它必須解決的問題
2002 年,Linux 核心——擁有數千名貢獻者與數千條平行變更流——採用了專有的 BitKeeper 作為版本控制工具。2005 年,核心社群與 BitKeeper 開發商之間的關係破裂,該工具的免費使用資格遭撤銷,這個全球最大的協作軟體專案頓時失去了核心工作工具。
構想
一套為速度與數千條平行分支而生的分散式版本控制系統——每個複製都是完整的儲存庫,設計理念仿照核心自身的資料結構。
運作方式
Torvalds 親自寫下第一個版本:首次提交於 2005 年 4 月 7 日完成,訊息為「Initial revision of "git", the information manager from hell」——少數幾個 C 檔案,提供七個指令。設計目標汲取自 BitKeeper 的教訓,包括速度、簡單設計、對非線性開發的強大支援,以及完整的分散式架構。2005 年 7 月 26 日,他將維護工作交給 Junio Hamano,Git 1.0 於 2005 年 12 月 21 日發布。
它帶來的成果
Git 成為大多數開發者使用的版本控制系統:到了 2022 年,近 95% 的開發者表示以它作為主要版本控制系統,而主要的軟體代管平台——GitHub、GitLab、Bitbucket——皆以它為基礎建構。一個為單一專案工作流程而寫的內部工具,成了全球協作軟體開發的底層基礎。
背景
Linux 核心由數千名貢獻者開發,產生數千項平行變更,這使版本控制變得格外困難。2002 年,該專案採用了 BitKeeper,一套專有的分散式系統,其開發商允許免費使用。2005 年,這段關係破裂,免費使用資格遭撤銷,核心社群——尤其是 Linus Torvalds——必須替換這個承載所有工作的工具。
Torvalds 的答覆是親自寫出替代品。2005 年 4 月 7 日的首次提交帶著一抹幽默自我介紹:「Initial revision of "git", the information manager from hell」。那是一小組 C 檔案,提供七個低階指令,圍繞著與核心相同的理念打造:速度優先、簡單設計、為非線性開發提供低成本的 branching,以及完整的分散式架構,讓每份儲存庫複本都帶有完整歷史。
它很快就超越了私人工具的範疇。Junio Hamano 在數週內加入,並於 2005 年 7 月 26 日接手維護——Torvalds 從未打算永遠照料它——Git 1.0 於 2005 年 12 月 21 日發布。此後它完全脫離了核心:到了 2022 年,近 95% 的開發者表示以 Git 作為主要版本控制系統,而組織現代開放原始碼的各大代管平台,包括 GitHub 與 GitLab,本質上都是 Git 服務。
為何成功
它把版本控制當成效能問題來處理:速度是第一目標,因為讓人等待的工具,就是人們會設法繞過的工具。
完整的分散式架構意味著每位開發者都帶著完整歷史——沒有單點故障,想法與本機實驗之間也沒有權限關卡。
Branching 是一等操作,而非昂貴的副作用,因此平行的工作線成為嘗試新事物時廉價而正常的方式。
它是針對當時最嚴苛的真實工作負載——核心的規模——而非市場平均值來打造,這正是它能如此廣泛通用的原因。
可以借鏡之處
失去一個你依賴的工具,可能是一份禮物。Torvalds 針對自己最艱難的情境——龐大的歷史、數千條平行分支——來打造,而適合最艱難情境的設計,往往也適合所有人。
後續發展
自 2005 年 7 月那次交接以來,Junio Hamano 一直是 Git 的維護者,Torvalds 也仍有貢獻。二十年後,GitLab 於 2025 年針對首次提交的回顧,稱「information manager from hell」這句話名副其實——那是幾乎所有軟體如今都賴以運行的基礎設施層的創始玩笑。BitKeeper 本身於 2016 年開放原始碼,如今只是註腳;Git 才是預設。核心專案的危機應變,就採用程度而言,成了有史以來最成功的內部工具。
追溯依據
參考來源
- A Short History of Git Pro Git book (git-scm.com) · git-scm.com
- A journey through Git's 20 year history GitLab blog · about.gitlab.com ·
- Git Wikipedia · en.wikipedia.org