天天看點

cvs update 用法_項目管理之CVS與SVN日常使用總結

做了多時的軟體開發項目管理,深知代碼管理在軟體項目開發的過程中的重要位置,于是想到把遇到的關于代碼管理方面的經驗和問題記下,以供日後補充參考。目前在這個領域運用最為廣泛的莫過于CVS和SVN兩者,在實際運用中發現其實他們都同樣非常優秀,以下我總結一下 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 : 建立好新檔案後添加檔案#與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 : 檢視目前檔案不同版本的差別#與SVN同#

cvs diff file_name : 檢視目前檔案(可能已經修改了)和庫中相應檔案的差別#與SVN同#

* notice : cvs裡沒有cvs move或cvs rename,因為這兩個操作是可以由先cvs remove old_file_name,然後cvs add new_file_name實作的。

項目釋出導出不帶CVS目錄的源檔案#與SVN同# :

cvs export -r release1 project_name

cvs export -D 20021023 project_name

cvs export -D now project_name

多項目并發管理#與SVN不同#參考檔案***的NOTICE# :

cvs tag release_1_0 : 建立版本裡程碑

cvs commit -r 2 : 開始一個新的裡程碑(标記所有檔案開始進入2.x的開發)

cvs rtag -b -r release_1_0 release_1_0_patch proj_dir : 版本分支的建立(在開發項目的2.x版本的時候發現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上開發

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的開發目錄下合并release_1_0_patch_1中的修改到目前代碼中

cvs (-d :pserver:[email protected]:/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 : 也可以通過設定CVSROOT系統參數使得所有客戶機所有本地使用者都可以映射到CVS伺服器相應同名帳号

* notice : 将 $Id$ 加在程式檔案開頭的注釋裡是一個很好的習慣

CVSNT 裡面還有一個問題就是:添加的使用者登入時有可能出現 Fatal error, aborting. administrator: no such user 此類的錯誤,那麼我們需要在CVSNT的Server Settings中把client user設定一下,一般設定成 administrator 即可。

目前 My Team 統一使用 Eclipse 開發工具,以下是一篇關于 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的多任務管理與cvs不同,svn中的branch實際上是複制一份目前的repository,然後可以并行地分别修改。複制采用cheap copy機制,類似于unix系統中的硬連結,branch操作不會使repository所占用的空間倍增,花費的時間也是常數級别的。svn中沒有單獨的branch指令,通過svn copy來實作。

這裡有一點容易讓人糊塗,因為svn中的版本号都是指repository,是以不同branch的版本号是混合交叉的,比如trunk為r60,svn copy之後會建立r61的branch,對trunk修改後再commit就成了r62。

svn中的merge并非字面上所示的将兩個分支歸并到一起,而是diff-and-apply的意思,比較兩個repository tree,并将他們的差異歸并到working-copy中。這裡merge并不區分兩個repository tree是否處于不同的分支,也不會驗證working-copy的源頭,是以使用這個功能的時候要自己小心。

當我們建立了一個branch,并且對trunk和branch分别進行了比較大的修改,現在想要把branch中的修改歸并到trunk中,此時應該 merge的對象并不是trunk和branch的***版本,而應該是branch的起始版本和***版本。因為merge實際上隻是做一個diff,是以前者在将branch的修改歸并到trunk的同時也讓對trunk的修改丢失了。

原文連結:http://blog.csdn.net/shagoo/article/details/3975931

【編輯推薦】

【責任編輯:彭凡 TEL:(010)68476606】

點贊 0