7 文件比較
------------------------------------
cvs diff -c filename
cvs diff -c -r1.8 -r 1.5 filename
8 鎖定與解鎖文件
------------------------------------
為保證串行的修改文件,或修改二
cvs admin -l files
cvs admin -u files
==========================================================================
如果你只是一般性的使用cvs,到此為止足夠了。一個(gè)系統(tǒng)20%的功能往往能夠滿足80%的需求,CVS也不例外,以下是CVS常用的功能,可能用到的還不到它全部命令選項(xiàng)的10%,更多的功能請(qǐng)?jiān)趯?shí)際應(yīng)用過程中體會(huì),學(xué)習(xí)過程中應(yīng)該是用多少,學(xué)多少,用到了再學(xué)也不遲。
==========================================================================
CVS宏/keyword
==================================
CVS缺省會(huì)對(duì)文件進(jìn)行keyword(宏)替換,在文件中加入這些關(guān)鍵字是個(gè)良好的工作習(xí)慣
$Id$ 關(guān)鍵字是用文件名、版本、時(shí)間、作者 及代碼性質(zhì)替換,如果使用-l選項(xiàng)取出,在Exp后
面會(huì)加上登錄用戶的名稱。除了$Id$關(guān)鍵字,RCS還支持下面常用的關(guān)鍵字:
$Log$ : 你所提供的修改日志信息。
$Author$ :存入該版本的作者。
$Locker$ : 該版本的加鎖者
$State$ : 該版本的狀態(tài) Exp(試驗(yàn)版), Stabe(穩(wěn)定版), Rel(發(fā)行版).缺省是Exp
$Date$ : 該版本存入的時(shí)間,使用UTC時(shí)間格式。
$Revision$ : 該版本的版本號(hào)
$RCSfile$ : RCS文件名
$Source$ : RCS全路徑名
$Name$ : 取回該版本的符號(hào)名
$Header$ : 相當(dāng)于$ Source $$ Revision$$Date$$Author $$State$$Locker$的組合
Sticky Tag
==================================
tag的作用是對(duì)多個(gè)連續(xù)變化的文件做一個(gè)快照來表示某一時(shí)刻的所有不停內(nèi)部版本的文件,一般是項(xiàng)目到一定階段,可以給所有文件統(tǒng)一指定一個(gè)階段里程碑版本號(hào),需要的時(shí)候可以一次導(dǎo)出這些版本不一的文件.標(biāo)記的另外一個(gè)非常重要的作用是生成分支和合并分支.
1 cvs tag release_name module_name
------------------------------------
release_name要簡(jiǎn)潔而含義豐富,由字母開頭,加字母,數(shù)字,下劃線和連字號(hào)組成,特別是不能含“.”
2 cvs checkout -r release_name module_name
------------------------------------
取出tag_name標(biāo)志的文件
3 cvs update -A
------------------------------------
tag標(biāo)識(shí)的文件是歷史文件,不能修改,這樣可在本地去除這個(gè)限制,讓它和當(dāng)前版本合并
CVS分支管理
=============================
CVS可以將歷史劃分成多個(gè)獨(dú)立,并行和互不影響的分支,并去修改歷史
1 標(biāo)定里程碑
------------------------------------
cvs tag release_1_0 prj_dir_name
2 開始一個(gè)新的里程碑:
------------------------------------
cvs commit -r 2
標(biāo)記所有文件開始進(jìn)入2.x的開發(fā)
注意:CVS里的revsion和軟件包的發(fā)布版本可以沒有直接的關(guān)系。但所有文件使用和發(fā)布版本一致的版本號(hào)比較有助于維護(hù)。
3 建立分支
------------------------------------
在開發(fā)項(xiàng)目的2.x版本的時(shí)候發(fā)現(xiàn)1.x有問題,但2.x又不敢用,則從先前標(biāo)記的里程碑:release_1_0導(dǎo)出一個(gè)分支release_1_0_b2
cvs rtag -b -r release_1_0 release_1_0_bugfixes prj_dir_name
-r修飾的是release_1_0,-b 修飾的是release_1_0_bugfixes,cvs的版本號(hào)將變?yōu)?位,以后每分一次支,版本號(hào)增加2位
4 分支并行開發(fā)
------------------------------------
一些人先在另外一個(gè)目錄下導(dǎo)出release_1_0_bugfixes這個(gè)分支:解決1.0中的緊急問題,
cvs checkout -r release_1_0_bugfixes
分支是可以修改的,并自動(dòng)提交到分支上去
而其他人員仍舊在項(xiàng)目的主干分支2.x上開發(fā)
5 tag分支
------------------------------------
在release_1_0_bugfixes上修正錯(cuò)誤后,標(biāo)記一個(gè)1.0的錯(cuò)誤修正版本號(hào)
cvs tag release_1_0_bugfixes_p1
6 合并分支
------------------------------------
如果2.0認(rèn)為這些錯(cuò)誤修改在2.0里也需要,也可以在2.0的開發(fā)目錄下合并release_1_0_patch_1中的修改到當(dāng)前代碼中:
cvs update -j release_1_0_bugfixes
7 再次合并分支
------------------------------------
如果又發(fā)現(xiàn)1.x新的bug,我在分支已經(jīng)修改了,并標(biāo)定了release_1_0_patch_2,我們同樣希望把它合并到主干上來
cvs update -j release_1_0_bugfixes_p1 -j release_1_0_bugfixes
它的意思是把release_1_0_bugfixes_p1(tag)到release_1_0_bugfixes(分支)變化了的部分合并到當(dāng)前文件(主干)
否則用6步的方法,則以前合并的內(nèi)容會(huì)重新合并
注意:此時(shí)我們使用第5步的結(jié)果
教訓(xùn):盡早頻繁的tag,但同時(shí)不能導(dǎo)致tag泛濫,tag在不同的分支里可以同名
8 鎖定分支
------------------------------------
cvs admin -l r_0_2 鎖定r_0_2分支
cvs admin -l 鎖定主分支
9 設(shè)置缺省分支
------------------------------------
cvs admin -b r_0_2 設(shè)定r_0_2為缺省分支
cvs admin -b 設(shè)定主分支