Git 簡介

此次要介紹的是 Source Control System:Git。由 Linux 作者 Linus Torvalds 撰寫。Git 的歷史部份就不在此述,重點放在 為何要選用 Git。

相信較早的RD,應該都用過 CVS,而 CVS 卻有著嚴重的歷史包袱。

  1. 不是 Atomic operation:當 commit 過程網路斷掉就是一場災難。
  2. 歷史紀錄是跟著檔案一起,檔案移除,歷史紀錄即消失,亦無法 checkout。
  3. 預設會把 core* 忽略,即預設 commit Linux Kernel 就會有檔案大量遺失
  4. 他無法支援 local branch 與 remote branch。
  5. ...

雖然它並未完全解決所有 CVS 的問題,但亦足夠一般使用。

而 Linus 為了解決一系列的問題,包含 BitKeeper 等等問題,重新設計了 Git。

  1. 只有在project 根目錄產生了 .git 子目錄,不像 CVS & Subversion 產生了一堆子目錄
  2. Git 本身有能力得知磁碟資料是否毀損,以達到資料完整性
  3. 由 Git 來 checkout 速度非常快,checkout Linux Kernel tree 比 svn 快 超過 5 倍
  4. Git 因為是完整 checkout,所以除了 push & pull 須要網路之外,其餘均不需要!
  5. Git merge 時,可以在 產生 conflict 時停下,選擇要 修正還是跳過該 commit,svn 在此功能上,較為複雜許多
  6. Git 要回溯某一個 commit,非常容易,而 svn 需要較多的操作
  7. Git 可以直接把某個 commit-id 直接做成 tar-ball
  8. ...

但是 Git 也並非完美無缺點,例如:

  1. Git 的學習曲線非常的陡峭,相較於 CVS 與 svn 來說,不過 Git還是非常值得一學
  2. Git 不予理會 空目錄,所以初學者可能會踩到此地雷
    如果你需要某些空目錄使用,請在該目錄下建立一個空白的 .gitignore 檔案讓 Git 不把該目錄忽略掉
  3. Git 不保存檔案的所有人,checkout 下來時即會改變,若要保留 權限與所有人,請用 ometastore 來完成

Git 的功能介紹留待下一章節