您的位置:软件测试 > 开源软件测试 > 开源配置管理工具 > cvs
配置管理工具CVS简单教程
作者:网络转载 发布时间:[ 2012/12/4 16:57:47 ] 推荐标签:

一把,这时候我会看到:

==================================================================
File: ceo.c             Status: Needing Patch

   Working revision:    1.1.1.1 'Some Date'
   Repository revision: 1.2     /home/cvsroot/nastaq/ceo.c,v
   Sticky Tag:          (none)
   Sticky Date:         (none)
   Sticky Options:      (none)

于是我知道有人改了ceo.c,于是我:
$cvs update ceo.c
或者干脆:
$cvs update
把ceo.c这个文件更新为新版本,然后再干活.然后提交.

如果这天你修改了coo.c,加了一行 puts("how about another kind of bragging?");
并且提交了,但是这时候我已经 $cvs status 过了,是说我不知道你的修改.
而我加了一行printf("You must shamelessly and seems knowingness to act as a coo");
并且傻乎乎地提交:
$cvs commit coo.c
这时候,CVS会告诉我
cvs commit: Examing .
cvs server: Up-to-date check failed for 'coo.c'
cvs [server aborted]: correct above error first!

于是我知道有个狗屎在我修改文件的当口做了提交,于是我
$cvs update
这时cvs会报告:
RCS file: /home/cvsroot/nasdaq/coo.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
Merging differences between 1.1.1.1 and 1.2 into coo.c
rcsmerge: warning: conflicts during merge
cvs update: conflicts found in coo.c
C coo.c
告诉你coo.c有版本冲突,于是我编辑coo.c,这时一般文件里看起来象这样:
  ...
printf("You must shamelessly and seems knowingness to act as a coo");
<<<<<<< foo.c
=======
...
  puts("how about another kind of bragging?");
>>>>>>> 1.2
...

于是我把上面改成:
printf("You must shamelessly and seems knowingness to act as a coo");
puts("how about another kind of bragging?");
然后
$cvs commit -m "merged" coo.c
于是下回你再更新的时候有新的补钉要打...如此往复,直到完成所有修改.
不过这里有一些要注意的地方是删除程序,如果你删掉一行对你可能没有用的程序
puts("to be honest"); 而我不想删除(因为我有用),而我不知情地直接:
$cvs update
了,那么我的这行程序也完蛋了,所以这里我们要注意所有开发人员的协调,千万不要乱删东西,大不了用
#if    0
#endif
宏定义对括起来.实在要删东西,那好先标记一个版本:
$cvs tag v_0_0_1

然后你可以发布并删除你自己的工作目录里这个版本的文件(注意:不是删除仓库里的.):

$cvs release -d nasdaq

然后你再生成一个新分支:

$cvs rtag -b -r v_0_0_1 v_0_0_1_1 nasdaq

然后再建立v_0_0_1_1的分支

$cvs checkout -r v_0_0_1_1 nasdaq

编辑并修改这个分支的文件,这样的做法比较好.

不过要注意的是,新标记和新分支的建立好由项目的管理人员负责,否则每个人都做一个分支,那么仓库太乱了.因此,比较的开发人员之间的直接沟通是不能忽略的.一般来说,在互联网上的标准模式是有一个管理员(可能自己并不写程序),有一个邮递列表,大家都在邮递列表上交流看法和做各种决议.当形成决议之后,管理员做一个新版本的标记.以此循环.
 

还有一些命令,比如要增加一个文件 garbage_china_concept_stocks_list:

$cvs add garbage_china_concept_stocks_list

然后还要:

$cvs commit  garbage_china_concert_stocks_list

看起来有点象数据库里的事务?的确是这样.CVS维护着一个本地的参考文件(在CVS/Entries里),这样提交的时候可以一次地把所有改变放到服务器端,这样也更安全.同样,如果想删除文件 bankrupted_web_site:

$rm bankrupted_web_site
$cvs remove bankrupted_web_site
$cvs commit bankrupted_web_site

3,一些小技巧:
$Header$ 标记:把这个标记放在文件的任何地方都会被 cvs 替换成后修改的 cvs 用户名,该文件当前版本号,后修改时间,该文件的 cvs 仓库路径,看起来象下面这个样子:

// $Header: /home/cvsroot/simhost/simhost.cpp,v 1.2 2001/04/20 08:26:10 jqliu Exp $

一般我们把它放在开头,这样对程序员修改文件非常便利,很多时候你只要看一眼开头知道文件是否新.

$Id$标记:把这个标记放在文件的任何地方都会被 cvs 替换成后修改的 cvs 用户名,该文件当前版本号,后修改时间,该文件的 cvs 仓库路径,看起来象下面这个样子:

$Id: simhost.cpp,v 1.3 2001/04/24 02:27:36 simhost Exp $

好了,上面所有的东西,估计是我们用cvs时80%情况下用的命令和内容,包括文件的更新,提交,冲突的解决,分支的派生,增删文件等.实际上cvs的功能之强大,远远超出我在这里描述的内容,我这个"速成"也管不了太多了,希望随着时间的推移,我们能够更加有效地使用CVS.也希望大家能够不断补充这篇文章,后能够成为手册,而不仅仅是速成.当然,还要更多地参考别的文档.

上一页1234下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd