使用CVS進行項目開發管理
作者:網絡轉載 發布時間:[ 2013/2/17 16:40:52 ] 推薦標簽:
CVS在每個目錄下面都建立了一個名叫CVS的目錄,此外,目錄的結構是一樣的,事實上,CVS目錄中存放的是一些關于目錄結構在倉庫中的信息,Entries中包含了這些目錄中的子目錄,Respository包含此目錄在倉庫中的相對位置,ROOT包含導出的模塊主目錄的路徑。
cvs import命令只是在第一次把項目導入CVS倉庫時才使用,以后如果再需要加入目錄或者加入文件,則使用cvs add 命令加入,然后使用cvs commit提交之后,文件或者目錄才會真正加入到CVS倉庫中。我們可以把剛才編輯的hello.c文件拷貝到testprj/src/main/中,然后使用:
[kerberos@power zhyf]$ cvs add testprj/src/main/hello.c
cvs add: scheduling file `testprj/src/main/hello.c' for addition
cvs add: use 'cvs commit' to add this file permanently
使用cvs commit提交修改
[kerberos@power zhyf]$ cvs commit
cvs commit: Examining testprj
cvs commit: Examining testprj/admin
cvs commit: Examining testprj/doc
cvs commit: Examining testprj/include
cvs commit: Examining testprj/libs
cvs commit: Examining testprj/src
cvs commit: Examining testprj/src/include
cvs commit: Examining testprj/src/main
RCS file: /home/zhyf/cvsroot/testprj/src/main/hello.c,v
done
Checking in testprj/src/main/hello.c;
/home/zhyf/cvsroot/testprj/src/main/hello.c,v <-- hello.c
initial revision: 1.1
使用RCS管理單個文件
done
testprj/src/main/hello.c
由于CVS使用RCS管理單個文件,所以,前面我們講的關于RCS的知識也可以用到這里,不同的是命令之前要限定是cvs,比如cvs ci, cvs co, cvs diff, 或者在導出時使用 -r 選項指定導出的文件的版本。在源代碼文件中,同樣也可以使用RCS的關鍵字。
對于非ASCII文件,如二進制可執行文件,位圖等文件,我們不能直接使用cvs add加入到CVS倉庫中,因為CVS只是基于ASCII代碼比較文件的改變,所以,對于二進制文件,如果單純使用cvs add 命令會破壞文件的完整,所在加入二進制文件時,要指定-kb參數。如果對已有文件進行了修改,使用cvs ci, cvs commit 來提交修改。
另外一種情況是自己導出別人修改的文件,而不想覆蓋自己所作的修改,可以使用cvs update命令,這個命令會自動比較CVS倉庫中文件和當前自己文件的后修改時間來導出新的文件。
在cvs update 和cvs ci 時,你對此的文件修改與他人發生沖突,CVS則提示你。CVS會在文件中使用“>>>>>>” 或者“<<<<<<<”標記標出沖突的地方,你可以與他人協商手動修改這一段代碼。
如果你想刪除倉庫中的一個文件,要先刪除本地導出的文件,然后使用cvs remove 文件名, cvs commit來刪除。事實上,CVS是不會真正刪除這些文件的,如果你還想得到這些文件,只需要,使用cvs co -r 指定刪除前的版本導出可以了。
有時候為了導出CVS倉庫中的深層目錄或者文件不得不輸入很長的路徑,這一點很討厭,你可以導出CVS倉庫中CVSROOT目錄下,修改modules文件,定義這個目錄或者文件為一個模塊,提交修改后可以直接使用cvs co 模塊名 可以導出了。
CVS的版本控制功能主要體現在tag上。標記的作用如同是同時記錄了做標記時所有文件的版本,需要的時候可以一次導出這些版本不一的文件,這常常是在項目的開發達到了一定的目標時使用的。
cvs tag 命令的參數只有一個:標記名。例如:
cvs tag RELEASE_1.0_BETA
以后,如果需要這個版本,只需要使用cvs co -r RELEASE_1.0_BETA可以導出這個版本了;蛘呤褂胏vs diff -r 來生成patch文件和使用cvs log -r 來查看這個版本的日志。
標記的另外一個非常重要的作用是生成分支和合并分支。
通常,我們的項目的開發到某一定的程度時,需要探索某一條開發途徑是否有效,這個時候,我們需要做一個試驗,但是這個試驗的分支的開發不能影響項目的主開發分支,這樣,我們可以生成一個分支開發,主開發分支也可以繼續進行,兩者并不沖突,將來如果證明分支開發有效,還可以把分支合并到主開發分支中。建立一個CVS分支:
cvs tag -b 分支標記名
建立分支后,并不影響當前我們從CVS倉庫中的文件,需要從CVS倉庫中重新導出分支BRANCH_VER:
cvs co -r 分支標記名 模塊名
這樣,我們可以進行分支開發,主分支的開發也可以照常進行,如果此分支開發成功,我們可以把它與主分支合并:
cvs update -j 分支標記名
cvs commit
可以把開發分支合并到主分支中去了。
以上是本地CVS倉庫的操作,如果使用網絡CVS倉庫,只需要使用CVS_RSH環境變量指定通信shell,另外設置CVS倉庫為網絡倉庫可以了。網絡上的CVS倉庫的服務器有兩種:ext和dserver。對于后者在進行CVS操作時,需要先login驗證用戶。后者使用rlogin驗證,不需要顯式登陸。如:
ext CVS 服務器使用
export CVSROOT=:ext:kerberos@power:/home/repository
或者cvs -d :ext:kerberos@power:/home/repository
cvs co platoon
derser CVS 服務器使用
export CVSROOT=:pserver:anonymous@anoncvs.kde.org:/home/kde
cvs login
cvs co kdebase
其他一些常用的cvs 命令選項
-d 指定CVS倉庫的路徑
-zn 使用gzip 壓縮后傳輸,到本地后自動解壓。n為壓縮級別通常式 1~4,通常使用于服務器的傳輸速度較慢的情況下。
-x 用于服務器的通信使用加密算法,只有在使用kerberos驗證體系下有效
CVS 的GUI工具
幾個常用的GUI工具:
LinCVS(圖1),是Xwindow 的CVS客戶端工具,比較流行的一個,功能也很強大.