版本控制系統 (VCS) 經歷了三個明顯階段:本地檔案系統 → 集中式 (CVCS) → 分散式 (DVCS)。理解這條演進脈絡,有助於我們掌握 Git 設計哲學的核心動機。
SVN、CVS、VSS。Git、Mercurial、Bazaar。push/pull 同步。採用內容指紋 (SHA-1) 而非版本號識別提交,支援離線工作、極速本地操作、輕量級分支、多種工作流模型。
單一 SVN 伺服器:架構簡單,但遠端操作延遲高

雙 SVN 伺服器(主從同步):讀取分流較快,但同步邏輯複雜、衝突處理困難

思考:如何同時達成「簡單」與「快速」?

Git 分散式架構:每個開發者擁有完整倉庫,本地操作極快,推拉同步靈活
git pull/push 是對等節點同步。add(暫存)、commit(本地提交)、status(狀態檢視)在 Git 與 SVN 中語義差異極大。Git 引入「暫存區」作為中介層。工作區 (Work Area) → 暫存區/索引 → 本地倉庫。add、commit、reset、checkout 實際是在操作這三區間的資料流向。blob(檔案內容)、tree(目錄結構)、commit(提交快照)、tag(標籤)。快照 而非差異、索引 即暫存區、fast-forward 合併策略。| 類別 | 核心指令 | 典型場景 |
|---|---|---|
| 本地分支管理 | branch、checkout、merge、rebase、reset、log、diff | 功能開發、實驗性修改、歷史重寫 |
| 遠端協作 | clone、fetch、pull、push、remote、format-patch、am | 團隊同步、代碼評審、補丁流程 |
| 衝突處理 | mergetool、stash、rerere | 合併衝突解決、臨時儲存現場 |
| 倉庫維護 | gc、fsck、config、help | 壓縮優化、損壞修復、配置管理 |
clone 完整倉庫commit 即完成版本記錄branch 建立功能分支,成本極低rebase 保持線性歷史(視團隊規範)HEAD、index、working tree 三者關係reset --soft/mixed/hard 三種模式差異Git 的分散式設計不只是技術實作的改良,更是協作模式的範式轉移:從「集中控制」轉向「自治協作」。深入理解其底層物件模型與三區機制,是駕馭 Git 複雜場景、排查疑難雜症的根本功力。