CVS縱然是一個老牌的工具產(chǎn)品,并也對開源事業(yè)有貢獻(xiàn),但CVS的命令行操作著實讓一些使用者頭疼。在對一個特定版本的文檔Check in的時候,還要輸入一長串的路徑名、文件名。在操作易用性上與CVS形成對比的是微軟家族的VSS。作為微軟的產(chǎn)品,在圖形界面化操作上自不用多言,但VSS只能適用于小團(tuán)隊的開發(fā)工作。VSS是很好的入門級工具,但它的一些功能也太過于“入門”,在驗證密碼、保存密碼這些基本功能上處理的不盡人意。適用于大型軟件開發(fā)的有“中堅級”的Clearcase,用它來管理一些小型的項目管理有些“大材小用”。Clearcase支持目錄版本管理、異地團(tuán)隊開發(fā)、視圖、多服務(wù)器等強大功能,所以一些大公司把它做為一、二級產(chǎn)品管理用,但同樣它的價格也不菲。CVS是開源的,免費的,更何況它還有一個理想的替代者——SVN。SVN的設(shè)計專門針對CVS的問題作了改進(jìn),命令的設(shè)計更為合理,對二進(jìn)制文檔和目錄這樣的數(shù)據(jù)加強了控制能力,并且吸收了VSS的lock-modify-update(release)的模式和modify-merge模式的優(yōu)點這兩種方式在一定程度都支持并作了優(yōu)化,沒有提高使用的復(fù)雜度——這是難能可貴的。由于SVN的設(shè)計結(jié)構(gòu)很好,所以很容易為它開發(fā)客戶端,好像很快就有了tortoiseSVN,Eclipse插件等很多客戶端,還有WEB模式的,可以遠(yuǎn)程管理,支持RSS更改訂閱。
孰優(yōu)孰劣?
現(xiàn)在又回到“開源軟件 VS.商業(yè)軟件”的老話題上了。先來看下CVS的基本工作模式:

CVS在服務(wù)器端維護(hù)代碼文檔庫,不同的開發(fā)者在本地機器上建立對應(yīng)代碼樹,并利用CVS保持本地代碼文檔同代碼文檔庫的一致。當(dāng)由于多個開發(fā)者對文件的同時修改造成本地與庫中的代碼文件沖突時,CVS報告并協(xié)助解決沖突代碼的合并問題。普通開發(fā)者(非管理員)對CVS的使用流程如下所示:

Check out命令只需在開始建立本地代碼樹時使用一次,其后更新本地代碼則使用update命令。update命令比較服務(wù)器和本地代碼庫的區(qū)別,并把本地代碼樹中過時的文件自動更新。當(dāng)完成對代碼的修改之后,在提交代碼之前同樣需要使用update命令,以獲取他人并行修改的的代碼。如果出現(xiàn)沖突(即對同一文件同時進(jìn)行了修改),CVS將在本地代碼中把兩者都保留并標(biāo)記出來,要求開發(fā)者處理沖突。在沖突不存在或已解決的情況下,使用commit命令將服務(wù)器代碼更新為本地代碼。CVS要求為更改提供注釋,并自動為更新的文件處理版本編號。當(dāng)軟件需要正式發(fā)布時,使用export命令導(dǎo)出不包含CVS設(shè)置信息的源代碼樹。
即使不用拿CVS的升級版SVN,就算是拿沒有目錄版本控制功能的 CVS 來和商業(yè)的版本控制工具相比,我們也有充足的選擇開源版本控制工具的理由:
服務(wù)器端是否和客戶端一樣看起來很美?
有一些商業(yè)軟件的服務(wù)器端簡直就像是一個垃圾場,用流水號命名的文件名,一個目錄下動輒成千上萬個文件。CVS以文件為核心,即面向文件的管理方式,項目文件可以方便地組合和移植。
服務(wù)器端是否在使用數(shù)據(jù)庫來作版本控制的數(shù)據(jù)引擎?
為了支持目錄的版本控制工具,大多數(shù)商業(yè)軟件選擇了一個最為簡單和直接的解決方案——數(shù)據(jù)庫,用數(shù)據(jù)庫將文件名和版本庫對應(yīng)。但是引入數(shù)據(jù)庫,服務(wù)器的穩(wěn)定性、可維護(hù)性大大下降,成為管理員的噩夢。增量備份計劃難以實現(xiàn),不知道什么時候會出現(xiàn)數(shù)據(jù)庫崩潰。
是否支持到其他版本控制系統(tǒng)的遷移?
對于商業(yè)軟件,這個答案是否定的。如果允許將版本庫導(dǎo)出到其他版本控制系統(tǒng),簡直就是將自己好不容易積累的客戶拱手相讓。
可否定制?是否可以對提交說明(Commit Log)進(jìn)行檢查?可否每一次的提交事件能夠收到郵件通知?
CVS 的 CVSROOT 腳本擴展,以及 SVN 的 Hooks 鉤子腳本,可以讓用戶充分發(fā)揮想像的空間。而商業(yè)版本控制工具,有此功能的寥寥。
客戶端是如何狀態(tài)保持的?
熟悉 CVS 和 SVN 的用戶應(yīng)該知道工作目錄下的 CVS 和 .svn 隱含目錄的作用,就是用于記錄版本控制狀態(tài)信息的。而很多商業(yè)軟件并沒有這個機制,而是靠服務(wù)器端來維護(hù)此記錄:哪臺主機、檢出哪個版本的代碼、存儲到哪個目錄。這么做的一個弊病就是工作目錄不能自由在硬盤中移動,系統(tǒng)重裝導(dǎo)致的狀態(tài)丟失。}
成本因素
一是軟件采購成本。商業(yè)軟件版本控制工具動輒十幾萬美金,而且是和用戶數(shù)目掛鉤的。
二是學(xué)習(xí)成本。商業(yè)軟件版本控制工具的部署范圍非常有限,不能保證新員工一定熟悉該系統(tǒng),但是如果選擇開源的版本控制工具,那么員工的培訓(xùn)費,可能就可以省下了。
客戶確認(rèn)軟件中沒有木馬、間諜軟件么?
客戶肯定不會去購買你競爭對手開發(fā)的版本控制工具,那么您為什么還會相信其他閉源的版本控制工具呢?
小結(jié)
再優(yōu)秀的版本控制工具都是軟件項目開發(fā)中的一部份,況且,一個項目的完成并不只只涉及版本控制工具,還包括其他的一些工具。一個軟件項目的開發(fā)成功需要涉及工具的使用,開發(fā)人員資源的管理等因素。但是,選擇一款優(yōu)秀的、適合開發(fā)團(tuán)隊和項目需求的版本控制工具能夠提高開發(fā)工作效率和代碼的優(yōu)質(zhì)性。對于版本控制工具的選擇,秉持的一個原則是:“不選貴的,只選對的。”