小石頭
          Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price.
          posts - 91,comments - 22,trackbacks - 0

          CVS 與 Subversion 二三事

          DIrk 發(fā)表于 2006-05-14 Sunday

          網(wǎng)上大部分關于 CVSSubversion 的文章一般都只是提到了 Subversion 相對于 CVS 的優(yōu)點:版本化目錄,原子提交,徹底的版本歷史(文件/目錄的重命名),而對于一些更本質(zhì)的概念性差別卻很少有人提到。

          對于像我這樣使用 CVS 已經(jīng)很多年、已經(jīng)習慣了 CVS 操作的人來說,想要遷移到 Subversion,需要從概念和具體操作上進行如下轉(zhuǎn)變:

          1、修訂版本號差別:在 CVS 中,修訂版本號是每個文件的,這是因為 CVS 使用 RCS 作為后端;每個文件都在版本庫有一個對應的 RCS 文件,版本庫幾乎就是根據(jù)目錄樹的結構創(chuàng)建。而在 Subversion 中,修訂版本號是針對整個目錄樹的,每個修訂號代表了一次提交后版本庫整個目錄樹的特定狀態(tài),另一種理解是修訂號 N 代表版本庫已經(jīng)經(jīng)過了 N 次提交。當 Subversion 用戶討論“foo.c 的修訂號 5”的時候,他們的實際意思是“版本庫在修訂號 5 時包含的 foo.c”。
          2、由此引起第二個重大差別:分支和標簽的不同處理方式。在 CVS 中,你可以通過給你的目錄樹(或者單個文件)建立分支或標簽以標記某個時刻的目錄樹狀態(tài),但不管如何處理,從物理目錄上來說,始終是同樣的目錄結構,表面來說看不出差別。而 Subversion 則不同,其不區(qū)分文件系統(tǒng)空間和“分支”空間;分支和標簽都是普通的文件系統(tǒng)目錄,這恐怕是 CVS 用戶需要逾越的最大心理障礙。也就是說,如果你在 Subversion 下創(chuàng)建分支或者標簽,事實上是在額外的地方保存了一個版本庫目錄樹的快照(snapshot),事實上,按照 Subversion 文檔的說法,并不是目錄樹的完整復制,采用了更加高效的方法,類似 Unix 下的硬鏈接[hard link]。如果你訪問過采用 Subversion 的開源項目,你會發(fā)現(xiàn)這些版本庫都會建立類似 /trunk、/branches 和 /tags 等三個根目錄,然后版本庫主干分支位于 /trunk 目錄下,當你創(chuàng)建分支的時候,會將目錄樹快照保存到 /branches,同樣,標簽會保存到 /tags 中。

          除了這兩點概念上的變動比較大之外,Subversion 在其他方面對 CVS 的兼容操作性還是很強的。

          標簽:cvs,subversion

          4 條評論 ?

          1. 理解得不錯,再補充一點就是服務端沒有像cvs那樣完整的倉庫鏡像
            而是只存儲了每次提交的變化內(nèi)容
            所以cvs checkout最新版要比較快
            而svn查詢更新記錄則更快一些

          2. 第一點我已經(jīng)慢慢習慣了,現(xiàn)在覺得svn這樣處理是理所當然的,第二點還是不習慣,以前就這個問題,還上過subversion的maillist,用半生不熟的中國英語發(fā)過郵件,居然還引來一個作者的多次回應,讓我再看看基本的概念。

          3. 由此看來,svn要比cvs占得空間大得多,不過綜合來看還是進步了不少,值得使用

          4. 其實并不是文件目錄的直接拷貝,手冊解釋說更加接近Unix下的soft link,理解上可能只是一個符號鏈接,并不真的重復存儲數(shù)據(jù)。

            我們所命定的目標,不是享樂,不是受苦,而是行動,在每一個明天,都要比今天前進一步!
          posted on 2007-03-07 23:12 小石頭 閱讀(649) 評論(0)  編輯  收藏 所屬分類: Subversion
          主站蜘蛛池模板: 原阳县| 岳池县| 民勤县| 涟水县| 中卫市| 泸水县| 衡水市| 洞口县| 天峻县| 鸡西市| 公安县| 安远县| 全南县| 耿马| 三原县| 宾川县| 荔浦县| 庆元县| 台州市| 富川| 杨浦区| 赞皇县| 清镇市| 西宁市| 天长市| 五大连池市| 泾川县| 诏安县| 桑日县| 行唐县| 湖北省| 盐亭县| 娄烦县| 社旗县| 策勒县| 大化| 和顺县| 肇州县| 祁门县| 遂溪县| 广宁县|