cvs回退與分支等
9.版本回退(取出以前的某個版本)
有兩種方式:
一是隻把某一版本的檔案輸出到標準輸出上:
$cvs up –p –r <版本號> <filename>
“-p”選項讓CVS命令的結果只輸出到標準輸出,而不寫入到結果檔案中。
另一種是將輸出到標準輸出的結果重定向到檔案中:
$cvs up –p –r <版本號> <filename> > <filename>
如:目前abc.c檔案的版本號為1.5,要取出1.2的版本,那麼執行
$cvs up –p –r 1.2 abc.c > abc.c
若沒有使用“-p”選項進行回退,而是使用了$cvs up –r 1.2 abc.c命令,之後若對1.2版本進行修改後再提交到CVS時,會出現如下提示資訊:
cvs ci
cvs commit: Examining .
cvs commit: sticky tag `1.2' for file `abc.c' is not a branch
cvs [commit aborted]: correct above errors first!
解決辦法兩種方式:
I、修改CVS/Entries檔案,將以下黃色標記部分刪除即可。
$cd CVS
$ vi E*
/abc.c/1.2/Tue Dec 17 13:33:06 2002//T1.2
D
~
~
II、使用$cvs up –A abc.c命令來消除附著標籤,但是該命令是將1.2版本與最新版本進行了合併,還需對abc.c進行修改再重新提交。
版本標籤(tag)
版本標籤是符號化的版本號碼,具有直觀、易於記憶和管理的優點。用於階段式(里程碑)的版本標記。是連線專案中不同檔案不同版本的手段。
標籤的設定
[[email protected] test]$ cvs tag rel_1_0_1 test.c
給test.c打上標籤rel_1_0_1
注意:很少給單個檔案設標籤。
給目錄下所有檔案貼標籤:(選中目錄)
[[email protected] test]$ cvs tag baseline_1
刪除:
[[email protected] test]$ cvs tag –d baseline_1
重新命名:
[[email protected] test]$ cvs tag –r baseline_1 baseline_2
(先重新命名再進行刪除原標籤)
[[email protected] test]$ cvs tag –d baseline_1
移動:
[[email protected] test]$ cvs tag –r 1.6 –F baseline_1 test.c
這裡我們將test.c的標籤從舊版本1.5移到新版本1.6上。
§ 根據版本號碼或版本標籤獲得
[[email protected] test]$ cvs update –r 1.1 test.c
獲得某一版本標籤的整個軟體的原始碼:
[[email protected] test]$ cvs checkout –r baseline_1 test
或者跳轉到某個版本標籤的版本(已經有工作拷貝的情況下)
[[email protected] test]$ cvs update –r baseline_1
§ 根據時間獲得特定版本(更新到不晚於date的最新版本)
[[email protected] test]$ cvs update –D “2002-05-08”
版本分支
[[email protected] test]$ cvs co –d test_new –r base_1 test
將標籤base_1 下的檔案checkout到 新建目錄 test_new下
[[email protected] test_new]$ cvs tag –b New_Branch,
在標籤base_1下建立分支New_Branch
[[email protected] test_new]$ cvs up –r New_Branch,(可以在分支中修改程式如:test.c) (進入分支New_Branch,進入之後可以在分支上修改檔案) 1.1.2 變成1.1.2.1
[[email protected] test_new]$ cvs ci –m “fixed bug no 111” test.c(提交到分支上)
[[email protected] test]$ cvs up –j base_1_brh(分支版本合併到主幹版本中)
[[email protected] test]$ cvs ci –m “merged from branch:base_1_brh”
remove命令
刪除檔案
your_client$ cvs remove –f oldfile
your_client$ cvs commit –m “removed” oldfile
刪除資料夾
因為cvs不對目錄進行版本控制,所以和刪除檔案不同,沒有一個專門的命令。例如(要刪除目錄olddir):
your_client$ ls -a
olddir test.c test1.c test.pc
your_client$ cd olddir
your_client$ ls –a
tmp.c tmp1.c
以下是刪除目錄olddir的命令:
your_client$ cvs remove –f tmp.c tmp1.c
Your_client$cvs commit –m “removed” tmp.c tmp1.c
your_client$ cd ..
your_client$ cvs update –P (更新, -P 告知 cvs update將空目錄由庫存中刪除)
your_client$ cvs update(所有空目錄均從工作目錄中刪除)
這時目錄olddir從工作目錄中消失(注意前提是將olddir中的檔案全部刪除)
注意:此命令不會將庫中新新增的目錄取到工作目錄中,可執行命令:your_client$ cvs update -d