您的位置:软件测试 > 开源软件测试 > 开源配置管理工具 > cvs
CVS 速成班
作者:网络转载 发布时间:[ 2013/1/18 14:26:35 ] 推荐标签:

这里重要的是 Status 栏,这里总共可能有四种状态: 
Up-to-date:表明你要到的文件是新的. 
Locally Modified:表明你曾经修改过该文件,但还没有提交,你的版本比仓库里的新. 
Needing Patch:表明有个哥们已经修改过该文件并且已经提交了!你的版本比仓库里的旧. 
Needs Merge:表明你曾经修改国该文件,但是偏偏有个不识相的也修改了这个文件,而且还提交
给仓库了! 

如果你只是想保持软件的同步的话(象我),那么上面的东西足够用了.可是如果多人协作开发
项目的话,可不是了这么简单了.当你参加项目,维护文件时,需要更多命令,比如说你我都
是某nasdaq项目的开发人员: 

1,你对某个文件做了修改,比如说改了ceo.c,加了一行程序:printf("where can I find VC to cheat!"); 
改完之后你要把修改提交给仓库,用命令: 
$cvs commit -m "add a complain" ceo.c 
或者是: 
$cvs commit -m "worry about money" 
让cvs帮你检查哪个文件需要提交. 

2,当我开始干活的时候,可能我先: 
$cvs status 
一把,这时候我会看到: 

=============================================== 
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 
  

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

参考资料: 
http://www.loria.fr/cgi-bin/molli/wilma.cgi/doc.865331095.html 
http://www.loria.fr/~molli/cvs/doc/cvs_toc.html

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