您的位置:軟件測試 > 開源軟件測試 > 開源配置管理工具 > cvs
CVS 速成班
作者:網(wǎng)絡轉(zhuǎn)載 發(fā)布時間:[ 2013/1/18 14:26:35 ] 推薦標簽:

這里重要的是 Status 欄,這里總共可能有四種狀態(tài): 
Up-to-date:表明你要到的文件是新的. 
Locally Modified:表明你曾經(jīng)修改過該文件,但還沒有提交,你的版本比倉庫里的新. 
Needing Patch:表明有個哥們已經(jīng)修改過該文件并且已經(jīng)提交了!你的版本比倉庫里的舊. 
Needs Merge:表明你曾經(jīng)修改國該文件,但是偏偏有個不識相的也修改了這個文件,而且還提交
給倉庫了! 

如果你只是想保持軟件的同步的話(象我),那么上面的東西足夠用了.可是如果多人協(xié)作開發(fā)
項目的話,可不是了這么簡單了.當你參加項目,維護文件時,需要更多命令,比如說你我都
是某nasdaq項目的開發(fā)人員: 

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?"); 
并且提交了,但是這時候我已經(jīng) $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 
了,那么我的這行程序也完蛋了,所以這里我們要注意所有開發(fā)人員的協(xié)調(diào),千萬不要 
亂刪東西,大不了用 
#if    0 
#endif 
宏定義對括起來.實在要刪東西,那好先標記一個版本: 
$cvs tag v_0_0_1 

然后你可以發(fā)布并刪除你自己的工作目錄里這個版本的文件(注意:不是刪除倉庫里的.): 

$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 

看起來有點象數(shù)據(jù)庫里的事務?的確是這樣.CVS維護著一個本地的參考文件(在CVS/Entries里),
這樣提交的時候可以一次地把所有改變放到服務器端,這樣也更安全. 
同樣,如果想刪除文件 bankrupted_web_site: 

$rm bankrupted_web_site 
$cvs remove bankrupted_web_site 
$cvs commit bankrupted_web_site 
  

好了,上面所有的東西,估計是我們用cvs時80%情況下用的命令和內(nèi)容,包括文件的更新,提
交,沖突的解決,分支的派生,增刪文件等.實際上cvs的功能之強大,遠遠超出我在這里描述的
內(nèi)容,我這個"速成"也管不了太多了,希望隨著時間的推移,我們能夠更加有效地使用CVS.
也希望大家能夠不斷補充這篇文章,后能夠成為手冊,而不僅僅是速成.當然,還要更多地參考
別的文檔. 

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

上一頁12下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd