這里有一篇有關CVS的使用簡介,是我以前做項目時為
初學者翻譯的,本著“夠用”的原則翻的,還有很多精
華沒有翻出來,但作為一個入門進階是夠了。
CVS 使用簡介
============
CVS 是RCS的前端工具,它是用于多用戶并行開發的版本控制工具,它的最大特點是使用了“copy-modify-merge”機制而不是“lock- modify-unlock”。通過使用CVS生成一個存儲文件的倉庫(repository),存儲在倉庫中的每個目錄叫做模塊(module),在修改時將相應的模塊檢出到工作目錄中(working directory)生成對應的目錄,所有的修改都在工作目錄中完成,修改完成后再提交到倉庫中生成新的版本號,并加以保存。
1. CVS初始化
-------------
(1) 創建CVSROOT根目錄
編輯有關的環境變量,加入CVSROOT的定義(比如在 /etc/bashrc 文件中加入下面兩行):
CVSROOT=/usr/local/cvsroot
export CVSROOT
然后在相應位置開始創建CVSROOT
$cd /usr/local/
$mkdir cvsroot
$cvs –d /usr/local/cvsroot init
這時就會產生/usr/local/cvsroot/CVSROOT 目錄,這下面放著有關CVS的配置文件。同時/usr/local/cvsroot/也作為文件倉庫存放所有的文件。
(2) 創建開發項目
如果從頭開始一個新的項目,就需要創建一個單獨的目錄,并把所有要使用的文件做一個有效的組織。而如果在開始使用源文件的目錄之前就有了,則只需進入該目錄就行了。
$cd /work/tang
$ls cvstest
. .. c/
$cd cvstest
然后,就可以輸入源文件目錄:
$cvs import –m “Create Source Dir” cvstest/c tang cvstest
這樣會生成 $CVSROOT/cvstest/c 目錄。 其中 -m 用來指定注釋信息,如果后面在命令行不指定注釋信息,則會啟動缺省編輯器(vi)要求輸入注釋信息。 tang, cvstest分別標識了廠商和發行標識。
注意,使用import命令會把當前目錄下的所有文件和目錄(包括子目錄)引入到文件倉庫中指定模塊(目錄)下。
2. 命令簡介
-------------
(1) 檢出源文件
cvs checkout [-r rev][-D date][-d dir][-j merg1] [-j merg2] modules
-r 檢出指定版本的模塊
-D 檢出指定日期的模塊
-d 檢出指定目錄而不是模塊
-j 合并當前版本和指定版本
使用下面的命令會檢出剛才生成的模塊,并在當前目錄下生成與文件倉庫中完全一樣的目錄結構:
$cvs checkout cvstest/c
對于目錄結構比較復雜的模塊可以在 $CVSROOT/CVSROOT/modules中加以指定:
1) $cvs checkout CVSROOT/modules
2) 在modules文件中加入下面一行:
SOURCE cvstest/c
3) 然后執行:
$cvs commit –m “Add SOURCE”
以后就可以使用下面的命令在當前路徑下生成 cvstest/c 目錄
$cvs checkout SOURCE
在當前路徑下生成的這個目錄就被稱為工作目錄,對源文件的所有修改都應該在這個目錄下完成,而絕對不允許去改動在 文件倉庫中$CVSROOT 目錄下的文件。
(2) 刪除、增加、重命名文件和目錄
cvs add [-k kflags][-m message] files...
-k 指定以后該文件的缺省檢出目錄
-m 對文件的描述
上述命令會加入一個新的文件到文件倉庫里,但直到使用了提交命令它才會真正更新文件倉庫。
cvs remove [options] files
上述命令會從文件倉庫中刪除文件,但也要到提交之后才有作用。
例1:增加文件
$cvs checkout SOURCE
$cd cvstest/c
$touch test.c
$cvs add test.c
$cvs commit –m “add test.c”
例2:刪除文件
$cvs checkout SOURCE
$cd cvstest/c
$rm test.c
$cvs remove test.c
使用 –f 選項能上面兩步合做一步。
$cvs remove –f test.c
如果在提交之前想恢復剛才刪除的文件,可以如下:
$cvs add test.c
如果只執行了第一步刪除(rm),則可以用下面的方法恢復:
$cvs update test.c
對于重命名的文件,可以先刪除再添加。
對于目錄的修改(重命名),可能需要修改cvs 管理文件,一般應該遵循以下步驟:
1) 確認所有有關的修改都已經提交;
2) 進入文件倉庫中要修改的模塊目錄,對相應的目錄進行修改(重命名或刪除)
$cd $CVSROOT/modules
$mv old_dir new_dir
3) 如果有必要,修改管理文件,比如modules 文件
如果要刪除目錄,則應該先對目錄中每個文件都進行了刪除(包括使用cvs remove )處理之后再執行上面的第2步。
(3) 提交源文件
cvs commit [-Rl][-m mesg] files
-R 連子目錄一起提交
-l 只提交本地目錄(不提交子目錄)
-m 注釋信息
在檢出源文件之后,在工作目錄中對源文件進行的所有修改都必須在提交之后才能對文件倉庫中的源文件起作用,并且新的文件才能夠被分配一個新的版本號。
(4) 釋放工作目錄
cvs release –d SOURCE
這個命令會刪除工作目錄 cvstest/c (建議在提交了修改的模塊后執行這一步), 它比使用 rm –rf cvstest 要好。
3. 多用戶開發
---------------
在多用戶的情況下,如果不同用戶修改的是同一個文件的不同部分,則使用下面的命令就能進行版本合并(把檢出的文件與當前的最新版本合并):
$cvs update
(1) 沖突解決
在有多個用戶對同一個文件進行修改時,如果修改了其中的相同部分,而修改后的內容如果有不同的話,出現沖突是不可避免的。如果在CVS 文件倉庫中有一個文件 test.c ,它的版本是 1.4, 用戶A 先檢出該文件進行修改,而稍后有用戶B 檢出該文件進行修改,并提前提交成 1.5, 而在用戶A再提交時就會出現沖突(如果文件內容不同的話),這時CVS會提示需要手工解決。
文件倉庫中的版本1.4:
#include stdio.h
main()
{
int i;
for(i = 0; i < 100; i++)
printf(“Count: %d
”, i);
}
用戶B 1.5:
#include stdio.h
main()
{
int i;
for(i = 0; i < 10; i++)
printf(“Count: %d
”, i);
printf(“Over
”);
}
用戶A :
#include stdio.h
main()
{
int i;
for(i = 0; i < 50; i++)
printf(“Count: %d
”, i);
return;
}
提交時會提示有沖突,需要手工編輯,這時運行了$cvs update 之后再編輯test.c, 會看到:
#include stdio.h
main()
{
int i;
<<<<<<< test.c
for(i = 0; i < 50; i++)
=======
for(i = 0; i < 10; i++)
>>>>>>> 1.5
printf("Count: %d
", i);
<<<<<<< test.c
return;
=======
printf("Over
");
>>>>>>> 1.5
}
(2) 文件版本管理
cvs log [-lR][-r rev][-d date][-w login][files…]
-l 不處理子目錄
-R 對子目錄做同樣處理
-r 指定版本號
-d 指定時間
-w 指定登錄名
使用上面的命令可以參看當前模塊或指定文件的所有歷史版本信息。
cvs annotate [-lR][-r rev|-D date] files
-l 不處理子目錄
-R 對子目錄做同樣處理
-r 指定版本號
使用上面的命令可以參看指定文件(檢出之后)的所有修改信息。
例:$cvs annotate cvstest/c/test.c
輸出:
版本 修改人 修改時間 源代碼
1.1 (tang 18-Jan-00): #include stdio.h
1.1 (tang 18-Jan-00): #include string.h
1.1 (tang 18-Jan-00):
1.1 (tang 18-Jan-00): main()
1.1 (tang 18-Jan-00): {
1.1 (tang 18-Jan-00): int i = 0 ;
1.1 (tang 18-Jan-00):
1.1 (tang 18-Jan-00): for(i = 0; i < 20; i++)
1.1 (tang 18-Jan-00): printf("Count: %d
", i);
1.1 (tang 18-Jan-00):
1.3 (tang 18-Jan-00): printf("222222
");
1.4 (tang 18-Jan-00): printf("333333
");
1.1 (tang 18-Jan-00): }
使用下面的命令可以生成相對于一個指定主版本的分支版本:
cvs rtag –b –r rev_root rev_branch file_name
-b 指定生成一個分支版本
-r 指定該分支的主干節點版本號
rev_root 主干版本號
rev_branch 分支版本號
file_name 指定文件,使用“.”表示當前目錄下所有文件
使用上面的命令可以生成一個對應版本號的分支版本,由于CVS 版本號是用數字表示的,而且在同一個模塊下不同文件的版本完全可能是不同的,所以使用標識會更方便。
例:
$cvs rtag –b –r 1.2 tlb-1 SOURCE
以后要訪問該分支版本,可以使用“-r” 選項
$cvs checkout –r tlb-1 SOURCE
從當前檢出的版本切換到一個分支版本:
$cvs update –r tlb-1 SOURCE
使用下面的命令可以看版本信息:
cvs status [–vlR] files
-v 顯示所有信息
-l 不顯示子目錄信息
-R 顯示子目錄信息
cvs update –j rev module
把當前所做的修改與指定版本的文件進行合并。
主干 1.1 1.2 1.3 1.4 1.5 1.6
↓
分支tlb-1 1.2.2.1 1.2.2.2 1.2.2.3
如果要合并分支tlb-1上的版本:
$cvs update –j 1.2.2.3 –j tlb-1 test.c
其中1.2.2.3可以通過tag命令生成一個容易記憶的標識。
如果要合并分支tlb-1到主干上1.2 :
$cvs update –j tlb-1 test.c
如果要合并主干上的不同版本(注意順序很重要,同時在指定版本之間的所有修改將被丟棄):
$cvs update –j 1.5 –j 1.2 test.c
如果在不同版本之間模塊的文件有增減,則可以:
$cvs update –A
$cvs updata –jbranch_name
4. 在遠程機器上使用CVS
----------------------
通過網絡使用CVS 有很多種方式,但在這里只介紹比較簡單的一種:通過rsh 執行cvs 命令。
1) 在遠程機器的.rhosts中加入對本地機的訪問許可:
tom tang
2) 使用下面的命令檢出模塊ESMSTRG
$cvs –d :ext:tang@esmpro:/work/cvsroot checkout SOURCE
其中, ext 指明了連接方式為 rsh, tang 指明了本地用戶, esmpro 指明了遠地主機,/work/cvsroot 指明了在遠地主機上的$CVSROOT路徑,可以在本地設置CVS_SERVER環境變量指明這個目錄
文章來源于領測軟件測試網 http://www.kjueaiud.com/
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月