項目管理之CVS與SVN日常使用總結(jié)
做了多時的軟件開發(fā)項目管理,深知代碼管理在軟件項目開發(fā)的過程中的重要位置,于是想到把遇到的關(guān)于代碼管理方面的經(jīng)驗和問題記下,以供日后補充參考。目前在這個領(lǐng)域運用最為廣泛的莫過于CVS和SVN兩者,在實際運用中發(fā)現(xiàn)其實他們都同樣非常優(yōu)秀,以下我總結(jié)一下 CVS 的日常使用(夾雜與 SVN 的對比):
日常運用 :
cvs init : CVS版本庫的初始化
cvs import -m "write some comments here" project_name vendor_tag release_tag : 一個項目的***導入
cvs checkout(co) project_name : 將代碼從CVS庫里導出#與SVN同#
cvs update(up) file_name : 將文件同步到***的版本#與SVN同#
cvs update : 將當前目錄同步到***的版本#與SVN同#
cvs commit(ci) -m "write some comments here" file_name : 確認修改寫入到CVS庫里#與SVN同#
cvs admin -m 1.3:"write some comments here" file_name : 修改某個版本注釋
cvs add new_file : 創(chuàng)建好新文件后添加文件#與SVN同#
cvs add -kb new_file.gif : 按二進制文件方式導入#與SVN同#
cvs admin -kkv new_file.css : 改回ASCII文件方式導入
cvs ci -m "write some comments here" : 然后確認修改并注釋#與SVN同#
cvs rm file_name : 將某個源文件物理刪除后(刪除后需要cvs ci -m "comments"一下)
cvs add dir_name : 添加目錄#與SVN同#
cvs log file_name / cvs history file_name : 查看修改歷史#與SVN同#
cvs diff(di) -r1.3 -r1.5 file_name : 查看當前文件不同版本的區(qū)別#與SVN同#
cvs diff file_name : 查看當前文件(可能已經(jīng)修改了)和庫中相應文件的區(qū)別#與SVN同#
* notice : cvs里沒有cvs move或cvs rename,因為這兩個操作是可以由先cvs remove old_file_name,然后cvs add new_file_name實現(xiàn)的。
項目發(fā)布導出不帶CVS目錄的源文件#與SVN同# :
cvs export -r release1 project_name
cvs export -D 20021023 project_name
cvs export -D now project_name
多項目并發(fā)管理#與SVN不同#參考文件***的NOTICE# :
cvs tag release_1_0 : 建立版本里程碑
cvs commit -r 2 : 開始一個新的里程碑(標記所有文件開始進入2.x的開發(fā))
cvs rtag -b -r release_1_0 release_1_0_patch proj_dir : 版本分支的建立(在開發(fā)項目的2.x版本的時候發(fā)現(xiàn)1.x有問題,但2.x又不敢用,則從先前標記的里程碑:release_1_0導出一個分支 release_1_0_patch)
cvs checkout -r release_1_0_patch : 一些人先在另外一個目錄下導出release_1_0_patch這個分支:解決1.0中的緊急問題,而其他人員仍舊在項目的主干分支2.x上開發(fā)
cvs tag release_1_0_patch_1 : 在release_1_0_patch上修正錯誤后,標記一個1.0的錯誤修正版本號
cvs update -j release_1_0_patch_1 : 如果2.0認為這些錯誤修改在2.0里也需要,也可以在2.0的開發(fā)目錄下合并release_1_0_patch_1中的修改到當前代碼中
cvs (-d :pserver:cvs_user_name@cvs.server.address:/path/to/cvsroot) login : 常見的登陸格式
cvs (-d xxx) passwd -a user_name : 添加用戶
cvs (-d xxx) passwd -r system_user user_name : 綁定用戶
cvs (-d xxx) passwd -X user_name : 刪除用戶
* notice : 也可以通過設(shè)置CVSROOT系統(tǒng)參數(shù)使得所有客戶機所有本地用戶都可以映射到CVS服務(wù)器相應同名帳號
* notice : 將 $Id$ 加在程序文件開頭的注釋里是一個很好的習慣
CVSNT 里面還有一個問題就是:添加的用戶登錄時有可能出現(xiàn) Fatal error, aborting. administrator: no such user 此類的錯誤,那么我們需要在CVSNT的Server Settings中把client user設(shè)置一下,一般設(shè)置成 administrator 即可。
目前 My Team 統(tǒng)一使用 Eclipse 開發(fā)工具,以下是一篇關(guān)于 Eclipse CVS 使用的文章,以供參考:http://www.eclipse.org/articles/article.php?file=Article-BranchingWithEclipseAndCVS/article1.html.
* notice : 注意右鍵菜單下面 Team/Compare with/Replace With 菜單的用法基本上就掌握了基本的 Eclipse CVS Plugin 的用法了~
* notice : svn的多任務(wù)管理與cvs不同,svn中的branch實際上是復制一份當前的repository,然后可以并行地分別修改。復制采用cheap copy機制,類似于unix系統(tǒng)中的硬鏈接,branch操作不會使repository所占用的空間倍增,花費的時間也是常數(shù)級別的。svn中沒有單獨的branch命令,通過svn copy來實現(xiàn)。
這里有一點容易讓人糊涂,因為svn中的版本號都是指repository,所以不同branch的版本號是混合交叉的,比如trunk為r60,svn copy之后會創(chuàng)建r61的branch,對trunk修改后再commit就成了r62。
svn中的merge并非字面上所示的將兩個分支歸并到一起,而是diff-and-apply的意思,比較兩個repository tree,并將他們的差異歸并到working-copy中。這里merge并不區(qū)分兩個repository tree是否處于不同的分支,也不會驗證working-copy的源頭,所以使用這個功能的時候要自己小心。
當我們創(chuàng)建了一個branch,并且對trunk和branch分別進行了比較大的修改,現(xiàn)在想要把branch中的修改歸并到trunk中,此時應該 merge的對象并不是trunk和branch的***版本,而應該是branch的起始版本和***版本。因為merge實際上只是做一個diff,所以前者在將branch的修改歸并到trunk的同時也讓對trunk的修改丟失了。
原文鏈接:http://blog.csdn.net/shagoo/article/details/3975931
【編輯推薦】