git 是如何被創造的?講述 git 的誕生史、核心思想及其父:Linus Torvalds
git 是世界上最先進的分散式版本控制系統,沒有之一。
前言
本文簡要闡述了 git 的誕生歷程,以及其作者 Linus Torvalds(林納斯·託瓦茲,同時也是 Linux 之父)對 git 的思考。對開發者而言,瞭解 git 產生的背景和設計理念,有助於更好地理解和使用 git;對管理者而言,則能更好地對企業專案開展有效的管理。
本文授權並同步首發於歡聚時代旗下技術公眾號:YYGeeker。更多幹貨,歡迎訂閱。
未經許可,嚴禁轉載。
本文閱讀用時:8 分鐘。
歡聚時代(YY)及虎牙(HUYA)面試內推請移步文末。
年輕時的 Linus Torvalds
芬蘭,被譽為千湖之國。這是一個由眾多湖泊和島嶼組成的國家,準確的說,全國共有 188,000 個湖泊和 179,000 個島嶼。
1969 年,Linus Torvalds 生於芬蘭一個知識分子家庭。父親 Nils Torvalds 畢業於赫爾辛基大學,是一名活躍的電臺記者。母親 Anna Torvalds 同樣畢業於赫爾辛基大學,也是一名記者。有趣的是,他的祖父奧 Ole Torvalds 也是一名記者。除此之外, Torvalds 的外祖父 Leo Tornqvist 是芬蘭第一批統計學教授 。優秀的家庭背景為 Torvalds 奠定了接受良好教育的基礎。 Torvalds 在 11 歲時,應其外祖父要求用 BASIC 語言編寫一些統計學方面的小程式 。大眾普遍認為,這是他程式設計經歷之始。
在這樣的背景下,似乎註定了這位少年擁有不平凡的成長經歷。

CC BY-SA 4.0 圖片版權許可
1988年,Torvalds 進入赫爾辛基大學計算機科學系就讀。在興趣的趨勢下, Torvalds 創造併發布了自制的作業系統,並將其命名為 Linux 。1996 年碩士畢業並移居美國,後擁有美國國籍。2003 年,為專心維護 Linux 從全職公司辭職。
芬蘭人性格內斂,這與 Torvalds 的行事方式不謀而合。但他對開源的信念是近乎執著的,為此不少樹敵。
赫爾辛基大學,成立於1640年,是芬蘭最大且歷史最悠久的最高學府。Torvalds 一家三口都畢業於此。
與 BitKeeper 分道揚鑣:git 誕生的導火索
在 git 誕生之前,Torvalds 選擇使用 BitKeeper 進行 Linux 版本管理。BitKeeper 是一個閉源的商業軟體,這個決定長期受到社群的質疑和爭議。

公有領域 圖片版權許可
2005 年,一位 Linux 開發成員 Andrew(Samba 協議之父)寫了一個可以連線 BitKeeper 倉庫的外掛,因此 BitMover 公司(BitKeeper 持有者)認為他反編譯了 BitKeeper。BitMover 決定中止 Linux 免費使用 BitKeeper 的授權。最終 Linux 團隊與 BitMover 磋商無果,Torvalds 決定開發自己的版本管理系統。
十天後,git 誕生了。
你沒有看錯。git 從開始到誕生,Torvalds 這位天才只用了 10 天的時間。
極具前瞻性的三個訴求
在確定開發 git 前,Torvalds 對市面上多個版本管理方案進行過評估,但現有的方案都不令人滿意,最終決定開發自己的版本管理系統。
Torvalds 認為, 健壯的版本管理系統應當有以下三個特性 :
- 可靠性(reliable)
- 高效(high-performance)
- 分散式(distributed)
這三個特性,被視為 git 的核心靈魂所在,深遠的影響了 git 及其他 SCM 的後續發展。
可靠性(reliable)
資料的存入取出必須是安全的、一致的。所有行為都要校驗,倉庫任何部分不允許篡改。在今天看來,這並不是什麼高明之舉,但在當時,絕大多數的 SCM 都做不到這一點。那時候,人們依賴保護中央伺服器來保證資料不被篡改,而不是依靠版本管理自身的設計來保證。
Torvalds 認為,應當通過演算法來保證,倉庫任何一個位元組被篡改,都能夠被發現。
高效(high-performance)
這是 git 極具優勢的特性。Torvalds 認為, 版本管理的所有操作都必須在毫秒級內完成 :這是對 svn 最大的批評。查日誌、拉分支、合併、提交這些高頻率操作,必須能夠在本地能夠完成,而不是等待伺服器響應。這一特性直接決定了 git 能夠被廣泛傳播。
作為對比,svn 每一步操作都在等待資料包成為了人們口中的詬病。
分散式(distributed)
以往人們在備份資料上花了很大精力:傳統的中央伺服器,資料受損是災難性事故。現在, 所有人電腦中的 git 倉庫都是一致的,每個人的倉庫都是完整的副本 。完整的副本意味著可以在本地做所有事;允許相互同步促使它被設計成為自帶資料校驗。
最終,Torvalds 圍繞著這三個訴求,用 10 天的時間創造出 git。
事實證明,這些想法是極具前瞻性的。git 在解決原有訴求的前提下,還解決了長久以來的一些痛點。
刺破痛點
從工程的角度看,許多 SCM 方案都有各自的殺手鐗,例如 BitKeeper 在超大型專案的優越效能,以及 SVN 精準的許可權控制。但在實際生產方面,則有所欠缺。
程式碼政治
大多數 SCM 都存在許可權爭議問題,特別是在超大型專案上。開發者最常見的發問是,你憑啥不給我許可權?在有些企業,程式碼管理被淪為政治工具,許可權則被視為權利的象徵。分散式的 git 則不存在此問題,如果你擁有該倉庫,你就擁有了所有的許可權。
提交粒度
如果「提交程式碼」容易對他人造成影響,那麼就沒人願意頻繁提交。在開發階段,由於程式碼始終無法完美(例如,包含測試程式碼、代風格錯誤、還有待改動),以至於總是無法提交程式碼(強行提交將造成他人無法執行)。導致的結果是,大量改動堆積,最後一次性提交。這樣的後果是,單個 commit 提交粒度極大,還會導致合併、code review、乃至回滾的困難。而 git 的 commit 操作不需要推送到遠端,因此隨意提交也不會不影響他人。
建立新分支
在許多 SCM,建立新分支是「重量級操作」,並且所有人可見。在許多專案看來,建立新分支是重大行為。因為 建立新分支影響重大,因此開發人員不會隨意建立新分支。這直接導致了同一個分支上需要承載大量的業務 。而由於 git 的操作是本地化的,你可以隨意建立分支(毫秒級操作)並行多個子迭代,迭代完畢且合併分支後,再刪除分支標籤。最後推送到遠端伺服器,他人並不知曉你建立過什麼分支。
開源,共築,影響力
革新總是艱難的。當 Linux 開發團隊決定使用 git 作為版本管理的時候,社群反對聲音並不小,理由是 git 太難用了。實際上,確實是這樣的,Torvalds 也承認了這點。
技術服眾還不夠。Torvalds 的領導力是驚人的,他發動社群力量讓大家投入到 git 的開發當中。隨著開發的深入,git 命令變得更簡單,更易用。另一方面,開源有助於集思廣益,並且避免腐敗。
後來的事,大家都知道了。git 逐漸被大眾接受,為 git 提供託管服務的 github 於 2008 年 2 月上線,從此 git 點亮萬家燈火。

github-free 圖片版權許可
另外,2016 年 5 月,BitKeeper 宣佈以 Apache 2.0 許可證開源。但人們說,太晚了。
今天的 Torvalds
Torvalds 與妻子 Tove 育有三名孩子。Tove 曾獲得六次芬蘭空手道冠軍頭銜。
2000 年,在時代 100 人:本世紀最重要的人物投票中,他位居第 17 名。
2004 年,他被評為世界最有影響力的人之一。
2010 年,宣誓成為美國公民。
2018 年 10 月,在休假反省一個多月之後,Torvalds 繼續接管核心開發。Torvalds 在維護專案上一向言行激烈,不少人因此而受到傷害。他表示「對自己過去的行為表示反悔,對因為他的言行而受到傷害的人表示道歉」。

CC BY 3.0 圖片版權許可
內推
現在,歡聚時代(YY Inc.)及虎牙(HUYA Inc.) 所有崗位(包括但不限於 Android、iOS、Java、前端、大資料、機器學習、音視訊演算法、其他非技術崗均可) 均可進行內部推薦。
傳送簡歷到 zhujiajun# ofollow,noindex">yy.com (#替換成@) ,並附上簡歷,即可內推。
回家等通知? 時間寶貴,不做無謂等待。 加入知識星球並內推, 享受內推進度查詢待遇 。

加入知識星球