網上大部分關于 CVS 和 Subversion 的文章一般都只是提到了 Subversion 相對于 CVS 的優點:版本化目錄,原子提交,徹底的版本歷史(文件/目錄的重命名),而對于一些更本質的概念性差別卻很少有人提到。
對于像我這樣使用 CVS 已經很多年、已經習慣了 CVS 操作的人來說,想要遷移到 Subversion,需要從概念和具體操作上進行如下轉變:
1、修訂版本號差別:在 CVS 中,修訂版本號是每個文件的,這是因為 CVS 使用 RCS 作為后端;每個文件都在版本庫有一個對應的 RCS 文件,版本庫幾乎就是根據目錄樹的結構創建。而在 Subversion 中,修訂版本號是針對整個目錄樹的,每個修訂號代表了一次提交后版本庫整個目錄樹的特定狀態,另一種理解是修訂號 N 代表版本庫已經經過了 N 次提交。當 Subversion 用戶討論“foo.c 的修訂號 5”的時候,他們的實際意思是“版本庫在修訂號 5 時包含的 foo.c”。
2、由此引起第二個重大差別:分支和標簽的不同處理方式。在 CVS 中,你可以通過給你的目錄樹(或者單個文件)建立分支或標簽以標記某個時刻的目錄樹狀態,但不管如何處理,從物理目錄上來說,始終是同樣的目錄結構,表面來說看不出差別。而 Subversion 則不同,其不區分文件系統空間和“分支”空間;分支和標簽都是普通的文件系統目錄,這恐怕是 CVS 用戶需要逾越的最大心理障礙。也就是說,如果你在 Subversion 下創建分支或者標簽,事實上是在額外的地方保存了一個版本庫目錄樹的快照(snapshot),事實上,按照 Subversion 文檔的說法,并不是目錄樹的完整復制,采用了更加高效的方法,類似 Unix 下的硬鏈接[hard link]。如果你訪問過采用 Subversion 的開源項目,你會發現這些版本庫都會建立類似 /trunk、/branches 和 /tags 等三個根目錄,然后版本庫主干分支位于 /trunk 目錄下,當你創建分支的時候,會將目錄樹快照保存到 /branches,同樣,標簽會保存到 /tags 中。
除了這兩點概念上的變動比較大之外,Subversion 在其他方面對 CVS 的兼容操作性還是很強的。
標簽:cvs,subversion
posted on 2007-03-07 23:12
小石頭 閱讀(643)
評論(0) 編輯 收藏 所屬分類:
Subversion