版本控制是工作组软件开发和文档管理中的重要方面,它能防止意外的文件丢失、允许反追踪到早期版本、并能对版本进行分支、合并和管理。在软件开发和文档管理中如果需要比较两种版本的文件或找回早期版本的文件时,版本控制是非常有用的。
现在,有很多优秀的版本控制工具供我们选择,下面就四种主流的版本控制工具做简单的介绍。
PVCS Version Manager
是美国的MERANT公司软件配置管理工具PVCS 家族中的一个组成部分,它能够实现源代码、可执行文件、应用文件、图形文件和文档的版本管理;它能安全地支持软件并行开发,对多个软件版本的变更进行有效的控制管理。
ClearCase(CC)
是ROSE构件的一部分,目前最牛的配置管理工具,主要应用于复杂的产品发放、分布式团队合作、并行的开发和维护任务。可以控制word, excel,powerpoint,visio等文件格式,对于不认识的格式可以自己定义一种类型来标识。
Visual SourceSafe(VSS)
简单易用、方便高效、与Windows操作系统及微软开发工具高度集成。
CVS(Concurrent Versions System)
是开发源码的并发版本系统,它是目前最流行的面向软件开发人员的源代码版本管理解决方案。它可用于各种平台,包括 Linux 、Unix和 Windows NT/2000/XP等等。
其中PVCS VM、CC和VSS是重量级的商业版本控制工具,更适合庞大的团队和项目,并且价格不菲。Visual SourceSafe是微软的产品,当然只能用在windows平台并与微软的开发工具无缝集成。CVS免费开源,并且几乎所有开源项目都是使用CVS进行版本管理,无疑,它是我们Java开发者最优选择。
PVCS VM
PVCS VM(版本管理)是软件配置管理工具PVCS 家族中的一个组成部分。软件配置管理可以使软件开发队伍中的任何成员以一致,可重复的方式随时找回和创建应用的任何版本。
VM详细记录了一个软件系统的所有变更,包括谁做了修改,什么时候,和为什么修改。通过VM,你可以轻易地找回任何先前的修订版本,并且确信这些文件不是被忽略重写的。当你检出一个文件时,VM将阻止其他用户对该文件的修改。
通过VM,开发小组成员可以......
* 建立配置文件,能够为所有用户提供一套相同的特征,或者为不同项目提供不同的特征。
* 使用VM 特权设置每个用户的访问级别,以防止对文件和版本管理命令的未认证访问。
* 重建任何文件的任何修订。可以快速而容易地回到任一工 作文 件的先前修订。
* 用版本锁定来阻止其他用户对文件的修改,以及防止当文件更新时所造成的损失。
* 软件开发中的并行线称为分支。VM可以追踪分支并且保持开发的独立进行,这样你就可以在不影响主线的情况下跟随开发的另一线。
我们应用这个源码控制系统,对任何源码的更新过程,开发人员都必需遵循下面所列出的步骤:
* 先要检出源码:开发人员需要从PVCS VM服务器上向本地工作目录中检出要进行修改的原始文件。
* 修改本地的工作源文件:开发人员在本地工作目录中修改原始文件并在本机上测试。
* 为更新数据检入修改的源文件:使用“check in”命令将修改的源文件从本地工作目录更新到PVCS VM服务器中。
ClearCase
ClearCase主要应用于复杂的产品发放、分布式团队合作、并行的开发和维护任务,包括支持当今流行软件开发环境Client/Server网络结构。在激烈的市场竞争中,ClearCase的特点直接响应了软件团队的需求,如:软件生产、发布、维护等。
ClearCase在某些方式上和其它的软件配置管理系统有所不同,从本质上,ClearCase是无可比拟的,因为它包含了一套完整的软件配置管理工具而且结构透明、界面可亲。虽然ClearCase是一个可集成使用的环境,但实际上我们仍可以把ClearCase的所有特性划分为四个具体功能范畴。
Version Control
ClearCase自动追踪每一个文件和目录的变更情况,通过分支和归并功能支持并行开发。在软件开发环境中,ClearCase可以对每一种对象类型(包括源代码、二进制文件、目录内容、可执行文件、文档、测试包、编译器、库文件等)实现版本控制。因而,ClearCase提供的能力远远超出资源控制,并且可以帮助团队,在开发软件时为他们所处理的每一种信息类型建立一个安全可靠的版本历史记录。
Workspace Management
ClearCase给每一位开发者提供了一致性、灵活性和工作空间域(有时也称为"Sandboxes")可重用的功能。ClearCase采用一种称为View的创新技术,它可以选择所指定任务的每一个文件或目录的适当版本,并呈现它们。View可以让开发者在资源代码共享和私有代码独立的不断变更中达到平衡,从而使他们工作更有效。
Build Management
ClearCase自动产生软件系统构造文档信息清单,而且可以完全、可靠的重建任何构造环境。ClearCase也可以通过共享二进制文件和并发执行多个建立脚本的方式支持有效的软件构造。
Process Control
ClearCase有一个灵活、强大的功能,可以明确项目设计的流程。自动的常规日志可以监控软件被谁修改、修改了什么内容以及执行政策,如:可以通过对全体人员的不同授权来阻止某些修改的发生,无论任何时刻某一事件发生应立刻通知团队成员,对开发的进程建立一个永久记录并不断维护它。
VSS
VSS(Visual Source Safe)是微软随同Visual Studio一起推出的版本控管软件,是一种源代码控制系统,它提供了完善的版本和配置管理功能,以及安全保护和跟踪检查功能。VSS通过将有关项目文档(包括文本文件、图象文件、二进制文件、声音文件、视屏文件)存入数据库进行项目研发管理工作。用户可以根据需要随时快速有效地共享文件。文件一旦被添加进VSS,它的每次改动都会被记录下来,用户可以恢复文件的早期版本,项目组的其他成员也可以看到有关文档的最新版本,并对它们进行修改,VSS也同样会将新的改动记录下来。你还会发现,用VSS来组织管理项目,使得项目组间的沟通与合作更简易而且直观。
VSS可以同 Visual Basic、Visual C++、Visual J++、Visual InterDev、Visual FoxPro 开发环境以及 Microsoft Office 应用程序集成在一起,提供了方便易用、面向项目的版本控制功能。Visual SourceSafe 可以处理由各种开发语言、创作工具或应用程序所创建的任何文件类型。在提倡文件再使用的今天,用户可以同时在文件和项目级进行工作。Visual SourceSafe 面向项目的特性能更有效地管理工作组应用程序开发工作中的日常任务。
当你要修改VSS中某个文档时,需要先从数据库中将它签出(check out),或者告诉VSS你要编辑该文档。VSS会将该文档的副本从数据库中拿到你的工作文件夹(working folder)中,你就可以修改你的文档了。如果其他用户再想对同一文档进行修改,VSS会产生一个信息,告诉他,该文档已被签出(check out),从而避免多人同时修改文档,以保证文档的安全性。
当你完成修改之后,需要将文档 签入(check in)VSS。这个操作从你的工作文件夹(working folder)中复制被你修改的文档,并将它放回VSS数据库,以便其他用户能够及时看到文档的改动。VSS能够保存文档的所有改动,并显示最新版本,同时早期版本也会被跟踪记录下来。VSS对反增量技术的运用,仅需要用很少的磁盘空间就能使得用户获取文档的所有版本。
如果你没有修改文档,你可以执行撤消签出(undo check out)命令,文档将被保存为被签出(check out)之前的状态。如果你只需读取某一文档而并不需要编辑它,你可以执行取出(get)命令,将文档放入你的工作文件夹,再选择查看文档(view),来查看你的文档的最新版本。
VSS能够保存文件的多个版本,包括文件版本之间每一处微小的变动。通过版本控制实现组内合作、版本跟踪、跨平台开发、代码的再使用等。
在VSS中还可以实现一个文件被多个项目共享(share)。在一个项目中对文件的改动可以自动反映到其他共享的项目中去。这正提倡了代码重用。在file菜单中的properties中,点击link,可以查看某一文件的共享情况。
分支(branch)是将文件从原来共享的项目中分离出来的过程。它使得VSS可以实现从不同的路径追踪文件。
注:在其他版本控制系统中,分支是通过跟踪版本号来实现的。例如:版本“2.3.9.2”是版本2.3的第二个修订版本的第九个分支。而VSS通过明显不同的项目名称实现对文件分支的跟踪。分支就断开了共享连接,使得本项目中的文件与其他原来共享的项目无关。对此文件的修改将不会再反映到其他项目上。分支是这样被建立的:两个文件以前有着共同的历史记录,从分支开始,他们的历史记录将被VSS分别追踪。分支之后,link按纽将不再显示已断开的连接,但你可以用path(file菜单中的properties项)按纽浏览拆分的历史记录。共享(share)文件就是在多个项目间建立文件的连接。分支(branch)文件就是在项目之间建立了不同的文件路径。
VSS是存储和管理文件的工具,但是编辑和编译文件必须在VSS指定文件夹中进行。这个文件夹叫工作文件夹,它可以是现存的文件夹,也可以是VSS新建的文件夹。VSS浏览器在文件列表上方显示了文件的工作文件夹的路径。
CVS
CVS是RCS的前端工具,它是用于多用户并行开发的版本控制工具,它的最大特点 是使用了“copy-modify-merge”机制而不是“lock-modify-unlock”。通过使用 CVS生成一个存储文件的仓库(repository),存储在仓库中的每个目录叫做模块 (module),在修改时将相应的模块检出到工作目录中(working directory)生成对应的目录,所有的修改都在工作目录中完成,修改完成后再提交到仓库中生成新的版本号,并加以保存。
CVS把文件保存在一个名叫仓库(repository)的地方,仓库中保存的文件并不是每个版本的副本,而是可以从任意版本回溯到初始版本的一些代码的主控信息,这样,就节省了大量的存储空间风靡全球的Linux操作系统就是在大型分布式CVS系统上开发成功的。
CVS的版本编号分为系统编号和用户编号。系统编号是CVS自动给版本编的号码。CVS自动管理系统编号。单分支版本演化以1.0->1.1->1.2-...的方式顺序进行。用户编号是用户为了自己控制版本号码,或者统一版本号码,而对某一版本指定的编号。
cvs 仓库 repository 存储了用于版本控制的所有文件和目录的副本。通常,你不可以直接访问仓库里的任何文件。你使用cvs命令从仓库取得你的文件副本放到工作目录中,并对该副本进行工作。当完成了一系列修改后,你把它们提交(commit)到仓库。仓库将保存你对文件的所有修改情况,包括你做了什么样的修改和什么时候进行的修改,以及诸如此类的信息。注意,仓库不是工作目录的子目录,反之亦然。它们应该在各自独立的位置。
CVS有很多方法访问仓库。可以是本地计算机,也可以是隔壁房间里的或是世界另一端的计算机。为了区别访问仓库的方法,仓库的名称应该出现在访问方法(access method)的后面。例如:访问方法::local:是访一个仓库目录;:local:/usr/local/cvsroot 就是访问运行在/usr/local/cvsroot下的仓库。如果省略了访问方法,并且源码库以/打头,那么:local:就是默认的方法。如果仅仅没有以/打头,那么:ext:或者:server:就是默认的方法。例如,有一个仓库在/usr/local/cvsroot下,可以用/usr/local/cvsroot替代:local:/usr/local/cvsroot。但如果本地仓库 (例如在Windows NT下)在c:\src\cvsroot,那就要指定访问方法:local:c:/src/cvsroot。
仓库分成两个部分。$CVSROOT/CVSROOT包含关于CVS的管理文件。其它目录才是真正包含用户定义的模块。
在windows环境下,我们一般使用wincvs来对文件进行操作。
1、设置本地工作目录:
admin -> preference -> WinCvs -> HOME folder
2、将CVS服务器上的modules取到本地工作目录
本地工作目录上,点右键 -> Checkout module
3、将新增的程序或文档纳入CVS管理
将新增的程序或文档copy到CVS本地工作目录 -> 右键 -> Add selection 或 Add selection binary(由文档类型决定) -> Commit selection
4、修改已存在程序或文档
右键 -> Edit selection -> 修改完毕 -> Commit selection
5、放弃修改
只要还未commit,右键 -> Unedit selection
6、解决冲突
当二人或更多人修改了同一文件时就会发生冲突,此时可打开有问题的文件,搜索以<<<<<<<开始的行。冲突区有这样的标价:
<<<<<<< 文件名
你的修改
========
从库中合并的代码
>>>>>>> 修订版
你要判断代码应该是什么,作必要的修改,删除cvs的标价,然后将你的修改提交到库中。建议:在修改cvs中的文件时,先Update selection一下。
7、取回以前的版本
Graph selection -> 右键 -> tag selection 。
8、查看谁在修改文件
右键 -> Editors of selection。列出正在编辑files的用户。
9、查看文件的历史修改记录
右键 -> Log Selection
10、什么情况下需要锁定登出(checkout)?
对于word文档、函数库等二进制文件,因无法由CVS合并,应当选中锁定登出。右键 -> Lock Selection。Unreserved checkouts是CVS确省方式,允许其他用户修改被登出的文件。CVS不会告知第一个登入者是否还有人在修改文件。其他人要登入会得到错误信息,他们须先与仓库中的最新版本合并才能等入。对于源代码等,应选择非锁定登出,否则将大大降低软件生产率。如果非锁定登出造成严重的开幕冲突,那时因为开发者的沟通严重不足。
11、删除一个目录
需要先删除目录中的所以文件,使该目录成为一个空目录,然后运行cvs update -P让CVS从仓库中清除空目录。
12、重命名文件
将工作目录中的旧文件重命名为新文件。 -cvs mv old new
通知CVS删除旧文件 -cvs remove old
通知CVS添加新文件 -cvs add new
从CVS仓库中删除旧文件、添加新文件 -cvs ci -m "name old to new" old new
13、CVS无法完成二进制文件的版本比较和版本合并,为此,应该避免版本分支。
14、CVS无法更据文件内容识别二进制文件,但能够根据文件扩展名来识别那些文件是二进制文件,这是由cvswrappers配置文件定义的。
15、设置只读用户
向某些用户授权读取CVS仓库中的文件,但不允许他们修改文件。在$CVSROOT/CVSROOT/readers文件中列用户名,例如:
anonymous
guest
注:若点“右键”未出现以上命令,请在customize the menu下配置。有关cvs命令,可以在Admin->comand Line窗口运行