2011年4月27日 星期三

git 學習(一) 和 CVS 和 Subversion 的差異

從上個星期開始看 git 的文件,斷斷續續到今天才慢慢有一些心得,在這裡記錄一下。先推薦http://progit.chunzi.me/zh 這個網站,不得不說,人多的地方有空翻譯的人也多一些。雖然有些翻得奇怪的地方,不過不影響對 git 的了解。

作為一個版本管理系統, git 和一脈相承的 CVS 和 Subversion 不同,可能和時空背景不同有關係,硬碟空間的價錢變便宜。CVS 和 Subversion 使用的是節省空間的「記錄改變」,因而適合對可以比較的純文字,對於二進位的資料(如:圖檔)就無法處理。雖然省了硬碟空間,但是一旦版本多起來,計算最新版本所需要的時間也越長。因此  git 的出現,其中一個原因就是要解決這個問題。



git 的作法,記錄的是「快照」而非改變,因此在計錄上純文字和二進位檔的差異並不大,不過也因此,同樣的版本數 git 會花費較大的硬碟空間。這樣的設計,讓不同的版本或分支在切換上可以得到很高的效率。

另一個大差異,則是在每個 client 端,CVS 和 Subversion 只記錄最當前抓回來的版本,而 git 的作法則是「把所有記錄」抓回來,也就是說利用所有版本資料放在 client 端,所以切換版本不需要經過 Server,當然快很多,一個用(硬碟)空間換時間的作法。

在 CVS 和 Subversion 中,資料的取回和送回都需要和 Server 進行連線,因此當連不到主機時,就只能乾瞪眼了。而 git 則是因為抓回所有歷史資料,所以自己本身就可以作版本控管,等到覺得修改得差不多,再把修改的那幾個版本推(psuh)到主機上,因此在沒有網路的環境也可以利用本機上的資料作版本控管,可以隨意進行修改,不用擔心因為沒有被版本保護而丟失資料。

最後則是標記和分支的部分,CVS 和 Subversion 因為是記錄修改,所以對於分支的作法比較麻煩,是採用複製一份的作法,導致整個資料樹會越來越大。而 GIT 因為是記錄快照,所以不需要進行複製出新的資料夾,分支的切換只要改變不同的檔案,比起 Subversion 要重抓所有資料來得快。


由於 git 運作的速度,以及它利用空間換時間的特性,表示等於每個 Client 端都在作異地備份,加深我想要把現行的 Subversion 改成 git 的想法。

3 則留言:

  1. 這裡寫錯了:"而 CVS 因為是記錄快照",應該是GIT。

    回覆刪除
  2. 再把修改的那幾個版本推"(push)"到主機上

    回覆刪除