CVS 是開放源碼的一個奇跡,亦是開放源碼得以延續(xù)和發(fā)展的推動者,是版本控制的經(jīng)典。CVS 是常用的版本控制工具。
Starteam 是一個集合了版本控制和缺陷控制兩種功能的軟件,并且具有 CVS 沒有的強(qiáng)大的圖形界面,易學(xué)易用。2002年底被Borland公司收購,發(fā)展前景未知,它是我是用的第一個大型商用版本控制軟件(真的付了Money的呦)。
評價 CVS、STARTEAM 孰優(yōu)孰劣,是一個仁者見仁,智者見智的問題。
Starteam 的圖形化界面,能夠使初學(xué)者易于接收,而且其缺陷控制功能的功能(基于數(shù)據(jù)庫的Change Request),是CVS 不具有的,更是相應(yīng)工具中獨(dú)樹一幟的。
CVS的跨平臺能力、強(qiáng)大的命令行、清晰的服務(wù)器端數(shù)據(jù)結(jié)構(gòu)更便于數(shù)據(jù)的備份、災(zāi)難恢復(fù)和可靠性。Simple is Butiful 送給 CVS 一定沒錯。
側(cè)重不同
CVS專注于配置管理軟件范疇中的版本管理系統(tǒng)。而配置管理系統(tǒng)除了包括版本管理外,還包括構(gòu)建管理(Build Management)和缺陷跟蹤系統(tǒng)。而Starteam包括了這三項(xiàng)。本文檔也只比較其版本管理系統(tǒng)的異同。
權(quán)限控制
一般來說,CVS的權(quán)限設(shè)置單一,通常只能通過CVSROOT/passwd, CVSROOT/readers, CVSROOT/writers 文件,同時還要設(shè)置CVS REPOS的物理目錄權(quán)限來完成權(quán)限設(shè)置,無法完成復(fù)雜的權(quán)限控制;而STARTEAM無需通過物理路徑的權(quán)限設(shè)置,而是通過自己的數(shù)據(jù)庫管理,實(shí)現(xiàn)了類似WINDOWS NT的域用戶管理和目錄文件ACL控制。
但是CVS通過CVSROOT目錄下的腳本,提供了相應(yīng)功能擴(kuò)充的接口,不但可以完成精細(xì)的權(quán)限控制,還能完成更加個性化的功能。
易用性
Starteam的圖形界面功能強(qiáng)大,但其命令行功能較CVS弱,需要自己編寫shell腳本加強(qiáng)。而隨著WINCVS作為圖形客戶端的可用性的增強(qiáng),Starteam的強(qiáng)項(xiàng)正在被削弱。
Label的管理
CVS 的 label 建立在文件上,難以確定到底有多少存在的 label ,而STARTEAM(圖形界面)可以很方便知道有哪些 View Label及Revision Label。
CVS的版本分支, label是建立在文件上,工作在其他分支的程序同樣會看到其它分支的label;而Starteam的label只在同一個視圖內(nèi)有效,有獨(dú)立的命名空間。
STARTEAM具有Promotion states,可以看作是label的標(biāo)簽。在label上又封裝一層的 Promotion State 便于記錄版本的提升,和建立自動編譯;而CVS 沒有浮動 label 的概念,只能通過文件記錄方式實(shí)現(xiàn)(如我們使用 .promotion 文件記錄當(dāng)前穩(wěn)定的 label)。
文件緩存
Starteam 存在CACHE目錄,緩存了所有 Checkout的版本的文件,因此 Checkout速度快。而CVS沒有緩存,check out過程較慢,尤其是分支的 Checkout。
但我對此表示懷疑。尤其是Starteam Unix客戶端基于JAVA技術(shù),速度明顯比CVS要慢。
操作文件名和目錄名
CVS的REPOSITORY的物理存儲結(jié)構(gòu)即為項(xiàng)目的組織結(jié)構(gòu),使得文件名修改和目錄的重新組織成為難題,往往需要管理員權(quán)限去手動操作Repository;而STARTEAM的Repository的文件結(jié)構(gòu)和視圖的文件結(jié)構(gòu)可以完全不同,目錄、文件名修改和移動非常方便,基于數(shù)據(jù)庫的文件名管理還可以方便地在不同工程之間共享文件,協(xié)同工作。
CVS是程序員的工具,STARTEAM還是管理項(xiàng)目的工具
個人文件管理或小項(xiàng)目的組織,需要輕量級的管理,和靈活的文件導(dǎo)入、導(dǎo)出,以及和自由代碼的交互,則CVS,Perforce,PVCS,SourceSafe等面向文件的版本控制占優(yōu)勢。對于公司、大項(xiàng)目,需要獨(dú)立的測試、QA等分工,還要更多的考慮多樣的用戶權(quán)限控制,易用性(圖形界面),缺陷控制,則需要面向工程的STARTEAM來進(jìn)行版本控制和開發(fā)。
CVS的優(yōu)勢
CVS的優(yōu)勢:項(xiàng)目文件可以方便的組合和移植,這是因?yàn)镃VS以文件為核心,即面向文件的管理方式。而且目前網(wǎng)絡(luò)上很多開放源碼都采用CVS,可以很好溝通。
CVS配置簡單、健壯、可以很容易地移植;STARTEAM集成度較高,移植過程復(fù)雜,需要的管理負(fù)擔(dān)大,需要完善的備份計(jì)劃。
CVS是開發(fā)源碼,服務(wù)器端存儲易于理解,便于控制;而Starteam為商業(yè)軟件,服務(wù)器端存儲方式封閉,難以管理。但是 CVS 不提供圖形界面,有較長的學(xué)習(xí)曲線。
Starteam 的劣勢
不支持分支的合并,需要過多的手動干預(yù)。而CVS可以自動完成。
速度慢,一定程度上影響開發(fā)效率。
不支持并行開發(fā),不能很好解決Merge的問題。而CVS可以智能 Merge。
故障恢復(fù)困難,需要有專職管理員維護(hù)。而CVS易于維護(hù)。
評價優(yōu)劣,不如先用先得
不用刻意去取舍哪一個,只要用好,即可。況且,已經(jīng)有了完美的CVS、STARTEAM互相轉(zhuǎn)換的方法。(參見:《CVS, Starteam互相轉(zhuǎn)換》)