一、CVS

一、所要解决的问题

    由于软件项目越来越大,也增加了软件项目管理的难度。在开发组中,每个成员都要保留一个副本,在开发中非常容易引起冲突。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 编程宝典》

回家