分类:
2011-02-25 15:05:56
CVS(Concurrent Version System)和Subversion都是非常优秀的版本控制系统,它可以在软件开发过程中记录文件的变更细节以及存储软件开发过程中的各种版本。
版本控制系统允许多名开发人员同时编辑同一文件而不会丢失数据。每名开发人员都拥有该文件的副本,最后将所有的修改合并到一起成为最终的结果。这种合并工作在正常情况下会自动完成,但只有文件是文本文件,而且各种不同的改动互相并不矛盾的情况下,才能顺利实现。如果不满足上述条件,那么CVS就要靠人工检入,手工解决冲突。如果对一个文本文件做的多个改动相互冲突,那么CVS就要插入帮助性解释,反映出冲突出现的位置。
CVS和Subversion都基于C/S,可以运行在UNIX、Linux以及Windows平台之上。CVS(Subversion)的服务器端存有一个源代码库,源代码库中保存众多不同的项目。客户端通过和服务器端建立连接,将源代码下载到本地计算机上,开发人员就可以在本地计算机上进行添加、修改、删除等操作,最后提交到服务器。如果项目出错还可以返回历史的任意一个版本。CVS服务器上会有这些项目的所有记录.
CVS有服务器和本地沙盒构成。在服务器端对每个文件维护着一个修订号(Revision,简记为SR),每次对文件的更新,都会使得文件的修订号加1。在沙盒中也对每个文件维护着一个修订号(简记为CR),CVS正是通过这两个修订号的关系,来进行Update,Commit和发现冲突等操作操作的。下面,看一下各个操作与修订号的关系:
1)commit操作。commit操作把本地对文件的修改提交到服务器端。当执行commit操作时,依次做两件事:
a)判断CR是否等于SR,如果CR
2)update操作。update操作把其他用户对文件的修改更新到本地。当执行update操作时,依次做两件事:
a)判断CR是否等于SR,如果CR
3)update special操作。功能比update更强大,参数更多。如果用户想放弃本地修改,而与服务器端同步,可以使用该操作。并选中“clean copy”复选框(注:只对于tortoiseCVS用户)。此外,还可以选择具体同步到服务器的那个版本。
4)checkout操作。从服务器端获得副本,并初始化CR,使之等于SR。
使用CVS有2个操作顺序,
一是先commit,如果冲突再执行update,否则不执行update,将此操作顺序称为commit优先法。
二是先update,修改文件后,再执行commit,如果冲突,需要再执行update,将此操作顺序称为update优先法。
update优先法更好一些,因为可以更早的发现冲突,并采取措施,推荐用这个方法使用CVS。
用update优先法使用CVS演示如下图。注意:图中N表示修订号;红色部分是为了演示Update冲突类型,假设用户执行的操作,正常情况下,没有这一步。