CVS是并发版本系统(Concurrent Versions System)的意思,主流的开 放源码网络透明的版本控制系统。
CVS对于从个人开发者到大型,分布团队都是有用的:
它的客户机/服务器存取方法使得开发者可以从任何因特网的接入点存取新的代码。
它的无限制的版本管理检出(check out:注1)的模式避免了通常的因为排它 检出模式而引起的人工冲突。
它的客户端工具可以在绝大多数的平台上使用。
CVS被应用于流行的开放源码工程中,象Mozilla,GIMP,XEmacs,KDE,和GNOME等。
那么它到底怎么样?
你可能会说,它非常棒,但是对于"我"来说它能做什么?首先,基本的:
一个版本控制系统保持了对一系列文件所作改变的历史记录。
对于一个开发者来说,那意味着在你对一个程序所进行开发的整个期间,能够跟踪对其所作的所有改动的痕迹。对你来说,有没有出现过由于在命令行上 按错键而导致的工作都白费的情况呢?版本控制系统给了你一个安全的网络。
版本控制系统对任何人都有用,真的。(毕竟,谁不愿意使用一个安全的 网络呢?)但是它们经常被软件开发团队使用。在团队中工作的开发者需要能够调整他们的各自的修改;一个集 中式版本控制系统允许那样做。
代码集中的配置
个人开发者希望一个版本控制系统的安全网络能够运行在他们的本地的 一台机器上。然而,开发团队需要一个集中的服务器,所有的成员可以将服务器作为仓库来访问他们的代码。在 一个办公室中,没有问题 -- 只是将仓库连到本地网络上的一台服务器上行了。对于开放源码项目...噢, 还是没有问题,这要感谢因特网。CVS内建了客户机/服务器存取方法,所以任何一个可以连到因特网上的开发 者都可以存取在一台CVS服务器上的文件。
调整代码
在传统的版本控制系统中,一个开发者检出一个文件,修改它,然后将其登记回去。检出文件的开发者拥有对这个文件修改的排它权。没有其它的开发者可以检出这个文件 -- 并且只 有检出那个文件的开发者可以登记(check in:注2)所做的修改。(当然对于管理员有很多方法可以超越这个限制。)
想一下排它的检出可能会如何工作:Bob的兄弟检出foo.java以便加入注释,写好代码后他什么也没做。然后他去吃午饭了。Bob吃完午饭后,发现他的老板所指给他的一个bug在 foo.java里。他试图检出 foo.java... 但是版本控制系统不允许他这样做,因为他的兄弟已经把它检出了。Bob不 得不等着他的兄弟吃完午饭回来(在这个"好"日子用了两个小时),他才可以修正bug。
在一个大型的开放源码工程中,因为开发者可能在任意的时区工作得很 晚,给予一个开发者阻止任意地方的其它开发者继续处理任意文件的能力很明显示无法运转。他们终将因为不能够在他们想要的时候开展项目而感到厌烦。
CVS通过它的无限制的检出模式解决了这个问题。检出一个文件并不给定 开发者对那个文件的排它权。其它的开发者也可以对其检出,进行他们自已的修改,并且将其登记回去。
"等一下!"你可能会说。"但是后面的登记不是会覆盖前面的吗?"回答 是不会。详细地回答是当多个开发者对同一个文件作了修改CVS会检测,并且自动合并那些改变。
哇噢。自动的?不用担心 -- CVS 会很小心,并且将会自动合并那些只 要不是对代码的同一行所作的改动。如果CVS不能安全的处理这些改动,开发者将不得不手工合并它们。
从此去往何处?
到现在为止,你已经毫不犹豫地着迷于CVS 的潜力,并且急不可待地想 开始。第一步是去得到适合你的平台的CVS软件。安装CVS通常是将其从你下载的压缩包中解开这么一件 事。配置CVS 可能要小心一些,它非常依赖于你使用的平台和你的CVS代码仓库的存放地。