讀書筆記:《Version Control With Git》

武斌_小米發表於2014-10-12

地一章 簡介

首先提到了VCS(Version Control System)的基本功能:

Although the authors and users of each tool might debate esoterics, each system address the same issues: develop and maintain a repository of content, provider access to historical editions of each datium, and record all changes in a log.

其次提到了Linus對於BitKeeper的替代品的期望。其實這些期望也可以看作Git的特點:

  • Facilitate distributed development(支援分散式開發)
    也就是人們不需要隨時的和中心倉庫同步。人們可以獨立、並行的開發,甚至在一些離線的本地環境中也不會遇到問題。

  • Scale to handle thousands of developers(可以支援上千名開發人員)

  • Perform quickly and efficiently(高效)
    相較於集中化的版本控制系統而言,Git每次只儲存增量,無疑更有優勢。
  • Maintain integrity and trust(保持完整和可信)
  • Enforce accountability(可靠性)
  • Immutability(不變性)
  • Atomic transactions(原子事物)
  • Support and encourage branched development(支援並鼓勵分支開發)
  • Complete repositories(完整的程式碼庫)
  • A clean internal design(乾淨的內部設計)
  • Be free, as in freedom(免費)

那麼Git時如何滿足這些需求的呢?哪些需求時我們的日常開發中也會遇到的呢?有哪些最佳實踐呢?遺憾的是,這一章中並沒有進一步進行闡述。

Git-Scm的文件中我們可能找到一些提示:

  • Git直接記錄快照而不是增量
  • 近乎所有的操作都是本地執行。這一點使得人們可以在離線狀態下進行開發。準確的說,不只是開發,大部分的版本控制操作都可以在離線狀態下完成!
  • 時刻保持完整性。這一特性是機遇SHA1加密演算法對於每個物件提供數字指紋來完成的。
  • 多數操作僅新增操作。

接下來,我會帶著上面的問題略過第二章(安裝),直接進入第三章(開始)進行學習。

=======================================
附錄一個常用的協作開發流程(參與已有專案開發):

  • 在Github上fork一個branch
  • Git clone到本地
  • 新增upstream: git remote add upstream (地址),可以通過git remote -v來檢視是否新增成功。這主要是為了能夠pull到其他人的change。
  • 建立新的分支:git branch branch_name。並切換到對應branch:git checkout branch_name。通過git branch可以檢視當前的分支。
  • 開發
  • git add . 新增所有的change。可以通過git status來檢視相關狀態
  • git commit -m “message”。
  • git push origin branch_name。
  • 在github上發一個pull request
  • code review並重復開發、新增、commit、push的步驟直到被merge。