3.4 保存修改到CVS中
現在,我們開始艱苦卓越的編程工作。經過數十分鐘、數小時乃至數天的工作,我們對原有的代碼做了較大的修改,現在要告一段落了。我們將修改的內容提交給CVS,于是,我們需要執行命令
cvs commit -m "Made some useful changes on some files"
這時,我們將會看到CVS給出一些提示信息,它掃描并比較此目錄下的現有文件和它在源碼庫中保存的原有文件,做了修改的文件將被更新,并且有了新的版本號:1.2。-m參數如同前面所說,是為了不想它啟動一個文本編輯器來讓自己輸入。如果我們僅是修改了其中一兩個文件,我們可以在上面的命令的后附上文件名,這樣CVS只會比較、更新指定的文件。注意的是,和自己做備份不同,CVS只是保存了不同版本之間的差異,并沒有完整的保存各個版本,F在,你是不是覺得CVS有點用處了。
3.5 添加文件到項目中
有,我們開始考慮給我們的網絡螞蟻加上從ftp站點下載文件的功能,于是,我們需要在原有的項目里添加兩個文件:ftp.c和ftp.h。首先,我們在工作目錄下建立并編輯、修改、生成了這兩個文件,然后我們使用命令add命令來添加。
cvs add ftp.c ftp.h
此時,文件并沒有真正的被添加,只是相當于"注冊"了一下,要使這個過程生效,我們仍然需要使用commit命令:
cvs commit ftp.c ftp.h -m "Add two files: ftp.c and ftp.h"
此時,CVS將把這兩個文件添加到項目中去,他們的版本均為初始的1.1。
3.6 從項目中刪除文件
除了添加以外,我們有的時候可能需要刪除某個文件,例如我們發現文件netants.h其實沒有什么用。于是,我們執行下面幾個命令來完成刪除工作:
rm netants.h
cvs remove netants.h
cvs commit netants.h -m "Delete a file."
要注意的是,CVS只是刪除了當前版本的netants.h,它以前的版本依然存在,除非它恰好僅有1.1版本。
3.7 設定特定版本號
經過一段時間的工作,程序已經初具規模,形成了較穩定的版本。這個時候,netants.c可能已經是5.4版本,而http.c可能是3.5版本,而我們希望將當前的代碼作一個版本發布。此時,我們需要使用的是tag命令。這個命令賦予指定的一個或多個文件一個給定的文本形式的版本號。版本號必須以字母開始,可以包含數字、下劃線和連接符號(-)。我們想給當前項目的所有文件賦予相同的版本號時,可以不指定文件或路徑參數,CVS默認選擇當前目錄下所有在CVS中注冊的文件(循環進子目錄)。下面既是一個例子:
鍵入命令:cvs tag release0-1
提示信息:
cvs tag: Tagging .
T Makefile
T ftp.c
T ftp.h
T http.c
T http.h
T netants.c
這樣當前版本的所有文件都有了一個叫做release0-1的版本代號。當我們需要這個版本的時候,我們使用 -r (版本代號) 參數來得到指定的版本。例如命令:
cvs checkout -r release0-1 netants
將在當前目錄下建立netants目錄,并導出所有版本代號為release0-1的文件。
3.8 更新當前工作目錄中的文件
這里使用的命令為update,它將比較指定的在CVS源碼庫中的文件和當前目錄下的文件,如果CVS源碼庫中有更高版本的源文件,則更新當前目錄下的文件。這個功能主要是多人協作開發項目時使用的,讓你及時分享同伴的工作成果。但它另外一個重要的用途,同樣適用于單人開發的項目。這個用途需要使用-j參數,我們看下面的例子:
cvs update -j 1.5 -j 1.3 netants.c
這個命令的功能是,在當前目錄的netants.c文件中,忽略從版本1.3到版本1.5所作的修改。毫無疑問,對程序員來說,這是一個非常重要的功能。因為在某個階段我們對程序所作的修改在現在可能會被視為是無效乃至錯誤的,這個功能很好的解決了這個問題。 在更新的過程中,CVS執行一個自動合并的過程。例如我們的工作目錄中的netants.c文件版本是2.1,并且我們已經對此文件作了一番修改,而CVS源碼庫中的是版本2.2,此時我們執行update命令時,CVS并不是簡單的將版本2.2覆蓋版本2.1,而是試圖將自版本2.1到版本2.2的修改添加到當前目錄中的文件中去,如果它和我們剛剛所作的修改有沖突,則CVS會以字符串"<<<<<"和">>>>>"表示由沖突發生,期待用戶去修改。CVS拒絕接受包含有上述特定字符串的文件。下面即是一個沖突的例子: netants.c: 版本號 2.2,保存在CVS中 …… getPartFile( ); showFinished(); return(A); } ……
netants: 版本號2.1 經過我們的修改 …… getPartFile( ); return(B); } …… 我們執行命令cvs update netants.c后,將會包含如下內容的新的netants.c:
…… getPartFile( ); showFinished(); <<<<<<< netants.c return(B); ========== return(A); >>>>>>> 2.2 } …… 除非我們做出修改并刪去"<<<<<<<"、"======="和">>>>>>>",否則在執行cvs commit的時候,netants.c 將不會更新原有的2.2版本。
4.CVS的其他功能
CVS當然遠不止上面所說的這些內容,這些僅是CVS的基本功能,CVS還有許多重要的功能,如上面所說的網絡工作方式、支持二進制文件等。下面我們對這些功能作簡單的說明。