明敏 發(fā)自 凹非寺
量子位 | 公眾號 QbitAI
轉(zhuǎn)眼間Git誕生20周年了!
為了給Git慶生,如今鮮少公開露面的Linus罕見接受采訪,更多幕后故事被更進一步展開。

2005年4月7日,Linux之父Linus Torvalds,提交了Git的首個版本。
憑借開源、分布式、本地可控等特點,Git快速從一個小型的個人項目發(fā)展成為目前全球最廣泛使用的版本控制系統(tǒng)。
后續(xù)隨著GitHub、GitLab等平臺共同推動,Git徹底改變了世界構(gòu)建軟件的方式,如今已經(jīng)成為“開源的默認語言”
在AI爆發(fā)的時代,Git也是AI開發(fā)不可或缺的一部分。幾乎所有知名的AI庫和模型都在GitHub上維護。
不過鮮為人知的是,這個影響全球的系統(tǒng),最初版本的開發(fā),僅用了10天時間——
當時Linux社區(qū)使用的BitKeeper由于授權(quán)被取消,不再免費提供給開源社區(qū)。
于是,創(chuàng)建了Linux的傳奇大佬Linus Torvalds再次出馬,Git由此而來。

4個月思考+10天執(zhí)行
對于Linus本人而言,“10天開發(fā)Git”這個傳說其實有點夸張。
10天只是最后寫代碼的時間,構(gòu)思Git最初的框架實際用了4個月。
當時,Linux開發(fā)社區(qū)使用的商業(yè)軟件BitKeeper在授權(quán)上出現(xiàn)了一些問題,將不再免費提供給開源社區(qū)使用。
為了解決自用問題,Linus開始想打造一個同類的工具。
實際上,想要復(fù)刻一個BitKeeper并不難,比如澳大利亞的Tridge基本是對BitKeeper的逆向,但這違反其規(guī)定。
從2004年底,Linus開始思考如何做出一個比BitKeeper更好、但實現(xiàn)方式不同的工具。
它最初的設(shè)計目標完全參考Linus個人的開發(fā)需求,專為處理Linux內(nèi)核這樣大規(guī)模項目設(shè)計。
我會做一些對我有用的東西,不關(guān)心其他人。

首個版本最核心關(guān)注點如下:
- 性能至上
- 分布式架構(gòu)
- 數(shù)據(jù)完整
首先在性能上,Linus的一個目標是Git能在半分鐘內(nèi)應(yīng)用大量補丁,50、100個那種。
他認為速度是生產(chǎn)力的關(guān)鍵。一方面,要確保常見操作幾乎實時完成,另一方面如果操作是即時的,發(fā)現(xiàn)錯誤時就要立即看到結(jié)果并繼續(xù)修復(fù)。
其次,它采用分布式架構(gòu)。
完全分布式的特性最終使得很多事情變得非常容易,這是Git與之前幾乎所有SCM(源代碼管理)的區(qū)別之一。
在設(shè)計上,每個存儲庫都是相同且平等的,可以完全本地工作、不依賴網(wǎng)絡(luò)連接,并簡化了項目分享和協(xié)作。
最后,Linus引入了SHA-1哈希用于檢測數(shù)據(jù)損壞、確保內(nèi)容可靠性。
盡管人們覺得使用SHA-1哈希是一個巨大的錯誤,但是對我來說,SHA-1哈希從來都不是關(guān)于安全性,而是被用于發(fā)現(xiàn)數(shù)據(jù)損壞的。
正是這兩三個核心設(shè)計理念,促成了Git的誕生,也解釋了為什么Git的底層實際上相當簡單。
我把它比作Unix。Unix的一個核心理念就是:一切都是一個過程、一切都是一個文件,you pipe things。
而在執(zhí)行方面,Linus的做法也很值得大家參考:
最初階段有一個清晰的想法,先不管之后是否能具體實現(xiàn)。
Git的首個版本,只有大約一萬行代碼,“甚至可以一口氣讀完”

最初幾年,Git也面臨一些體驗上的爭議。它一開始僅僅是plumbing,根本沒有用戶界面。需要手動運行commit-tree命令、手動將生成的SHA-1哈希寫入head文件、沒有g(shù)it commit這樣用戶友好的命令。
畢竟Linus在最初設(shè)計時也沒care這些使用體驗方面的問題。
Junio Hamano是改善Git使用體驗的核心人物。
在初版本發(fā)布4個月后,Linus就將項目轉(zhuǎn)交給他維護。采訪中Linus也表示,Junio的“品味”和長期奉獻是Git能夠成功的關(guān)鍵。
我做Git完全是出于自己的原因。在這20年中,我只花了4個月時間在上面。真正的功勞屬于Junio和所有其他參與Git的人,他們現(xiàn)在做的比我多得多。
大概從2007年-2010年,Git逐漸獲得越來越多人認可,特別是當時的新一代開發(fā)者,都會將Git作為首選工具。
Linus認為,讓Git真正流行的關(guān)鍵原因是Ruby on Rails社區(qū)的采用。后面隨著GitHub平臺出現(xiàn),進一步利用Ruby on Rails社區(qū)的用戶基礎(chǔ)、簡化Git使用體驗、添加社交屬性,讓Git的影響進一步擴大。
由此,Git從一個個人小眾工具,逐步發(fā)展為影響全行業(yè)的核心范式。
毒舌暴躁的開源傳奇大佬
最后,再來簡單回顧下Linus Torvalds的傳奇人生。
他1969年出生于芬蘭,現(xiàn)在已經(jīng)56歲了。

他一個人寫出了兩個改變世界的項目:Linux和Git。它們幾乎影響了整個IT和軟件產(chǎn)業(yè)的基礎(chǔ)架構(gòu)。
而且過程都非常相似:
不滿于當前系統(tǒng)→自己手搓一個開源免費版本→不斷擴展功能受到更多開發(fā)者關(guān)注→最終在全球產(chǎn)生廣泛影響。
1991年初,當時還是赫爾辛基大學學生的Linus開始對操作系統(tǒng)產(chǎn)生興趣。他使用的是基于UNIX的Minix系統(tǒng),但對其功能限制感到不滿。他想要一個能夠充分利用他的新Intel 386電腦的操作系統(tǒng)。
1991年8月25日,Linus在comp.os.minix新聞組發(fā)布了一條著名的消息:“我正在做一個(免費的)操作系統(tǒng)(只是個愛好,不會像GNU那樣龐大專業(yè))……”這被認為是Linux項目的正式誕生。
最初Linux只是一個終端模擬器,Linus用它來訪問大學的UNIX服務(wù)器。隨著時間推移,他不斷擴展其功能,添加了文件系統(tǒng)支持和設(shè)備驅(qū)動程序。
關(guān)鍵轉(zhuǎn)折點是Linus決定采用GNU通用公共許可證(GPL)發(fā)布Linux。這使得Linux成為一個真正的自由軟件,允許任何人查看、修改和分發(fā)代碼,只要他們同樣以GPL方式分享修改。
1992年,Linux與GNU項目的工具結(jié)合,形成了完整的操作系統(tǒng)。這種結(jié)合有時被稱為GNU/Linux。
隨著互聯(lián)網(wǎng)的普及,世界各地的開發(fā)者開始為Linux貢獻代碼。Linus采用了分散式開發(fā)模式,審核并整合來自全球的貢獻。
從1994年開始,Linux版本0.95發(fā)布,商業(yè)公司如Red Hat開始圍繞Linux創(chuàng)建商業(yè)產(chǎn)品和服務(wù)。
今天,Linux已成為互聯(lián)網(wǎng)基礎(chǔ)設(shè)施的核心,為大多數(shù)網(wǎng)站服務(wù)器、Android智能手機和超級計算機提供動力。盡管項目規(guī)模已經(jīng)龐大,Linus仍然擔任最終決策者,管理著Linux內(nèi)核的開發(fā)方向。
不過,除了技術(shù)和項目風靡全球,Linus的臭脾氣也是在技術(shù)圈廣為人知。
此前在有一次公開演講中,因?qū)VIDIA拒絕為Linux提供良好驅(qū)動支持的態(tài)度表示不滿,Linus直接對著攝像機豎起中指說:
NVIDIA,f**k you!
這一幕如今也成為了技術(shù)界的經(jīng)典場景。

此外,他本人也相當毒舌。
看到不好的代碼就直接在代碼評審中開噴。
這不僅是垃圾,而且是有史以來最蠢的垃圾。
你的代碼很爛,如果我是你,我就躲到角落里去哭,然后考慮轉(zhuǎn)行。
對C++頗有微詞:C++是一種可怕的語言。它在設(shè)計上有著根本性的缺陷…那些宣稱C++比C好十倍的人是在撒謊。
以及Git在俚語中的意思是“討厭鬼”。
如此種種,非常多,就不列舉了。
不過在2018年,Linus公開道歉,表示要洗心革面,調(diào)整自己的溝通方式。
所以近年來,他脾氣愈加溫和:仍舊直率但是明顯減少了個人攻擊和侮辱性語言。
好是好,就是大家能看的樂子也少了(bushi)。
https://github.blog/open-source/git/git-turns-20-a-qa-with-linus-torvalds/
熱門跟貼