由于软件项目越来越大,也增加了软件项目管理的难度。在开发组中,每个成员都要保留一个副本,在开发中非常容易引起冲突。CVS 就是为了解决这个问题的。
a、修改同步,防止一名开发人员的修改覆盖其他人的成果。(check out、read only)
b、维护不同的版本。(按 version 查找)
c、可查找历史记录。防止 bug 的再引入。(diff)
CVS 为了解决这个问题,采用的方式是:
当开发人员对源代码进行修改时,修改的内容被登记(check in)到了 CVS 仓库(repository)中。仓库中保存了代码的主控副本,以及历次修改的历史信息。它不保存文件的每个版本,而只是简单的记录发生在每个版本间的不同,节省磁盘空间。它能做到:
a、使开发人员的目录和仓库保持一致。可以把自己的修改提交(commit)给仓库,让仓库更新自己。
b、允许代码派生。可以进行测试,如果失败,可以消除所做的修改,维持原结果。
c、检索任何一个版本。
二、使用 CVS:
a、建立仓库:设置并 export CVSROOT 变量,并设置仓库目录。比如创建 /home/cvsroot 目录,并合理设置权限,在 .bash_profile 中加入:export CVSROOT=$HOME/cvsroot;运行 cvs init;设置让用户输入日志信息的默认的编辑器:export EDITOR=vim。如果使用的是网络,则 CVSROOT 变量的形式是: export CVSROOT=:exit:user@server:/path,比如:export CVSROOT=:exit:david@power/home/projects/repository
b、导入文件或目录:cvs import filename_or_directory vender_tag release_tag;这三个参数的含义是:在仓库中这些导入的文件所在的目录、供应商标记、发行标记。比如 cvs import step1 david start。导入时的 N 表示所导入的文件都是新文件。
c、使用时导出文件,用:cvs checkout directory_name;参数含义是仓库中所在的目录。建立新的目录,而不是获取他人的改动
d、对文件修改后,保存修改到仓库:cvs commit。
e、如果要获得他人的修改,使用 cvs update,U 表示本地的一个文件已经被更新。如果已经对文件进行了修改,而此是他人已经修改了该文件并提交,cvs 将告诉用户发生冲突和冲突的位置。
f、添加一个文件:cvs add filename; cvs commit。
g、删除一个文件:先在本地删除,然后使用 cvs remove file_name; cvs commit。
三、使用标记
可以使用标记记录某个时刻文件的内容,这在制作发行版本的过程中非常有用:
cvs tag release1.0
改动后发现不正常,重新获得这个版本,则使用:cvs checkout -r release1.0
四、测试性代码:
当其中一个开发者对代码进行改进,但未来结果不能确定时,可以使用 cvs 产生出一个代码的分之,这并不改变主控代码:cvs tag -b for_test。导出该代码的命令是:cvs checkout -r for_test example。由于在已有的目录树中不会使用该分之,因此必须重新建立目录树。如果测试成功,则要求将主控代码和测试代码合并,则先导出主控代码,然后合并:
cvs checkout;cvs update -jfor_test;cvs commit。
五、参考文献:
《Linux 编程宝典》