Linus Torvalds在2002年起,使用BitMover的版本控制軟體BitKeeper管理Linux核心開發,而因為Bitkeeper除商業付費版本,僅提供可免費使用但不允許修改釋出的精簡版本,引起開源社群的不滿,如自由軟體之父Richard Stallman也嚴厲批評Linus Torvalds使用非自由軟體開發Linux核心。

在2005年,Samba檔案伺服器開發人Andrew Tridgell寫了連接BitKeeper儲存庫的簡單程式,被BitMover創辦人Larry McVoy指控對BitKeeper進行逆向工程,因此決定停止BitKeeper對 Linux的支援。頓時Linux核心開發受到嚴峻的挑戰,而Linus Torvalds秉持「自己的版控自己寫」精神,整個周末不見人影,隔周卻如變法戲般的帶著Git出現。在Git誕生十周年的近日,Linus Torvalds接受Linux基金會的訪問,談論他對版本控制系統的想法及開發Git的過程。

為何你創造了Git?

我一直很不喜歡做原始碼管理,我覺得那是電腦領域中最無趣的一件事情(也許資料庫管理跟它有的比),我非常討厭原始碼管理。不過BitKeeper(簡稱BK)出現後,改變我對原始碼控制的想法。BK做對了大部分的事,它在本機端有一份完整的儲存庫,而且採取分散式做法非常了不起。分散式原始碼控制解決了原始碼控制常碰到的問題—誰有資格改變原始碼。藉著提供儲存庫給每個使用者,BK解決了這個問題。不過BK也有些缺陷,比方說某些技術決策引起了些問題(像是讓人頭痛的重新命名),但最大的缺點在於BK不是開放原始碼,所以很多人不願意使用。有幾位我們重要維護人員因為BK可以免費用在開源專案上而使用它,但BK始終沒有普遍的被使用,儘管它幫助了Linux核心的開發,BK仍有不足之處。

Andrew Tridgell違反BK的使用原則,對BK開始進行逆向工程。我花了幾個禮拜或是(或是幾個月),居中協調Tridgell跟Larry McVoy,不過顯然沒有多大的幫助。從那一刻起我決定放棄使用BK,但是我也不想回到以前沒有BK的日子。在那時雖然也有一些原始碼控制軟體想採用分散式的做法,但都不成氣候,它們離我效能表現的要求還差一大截,同時我擔心原始碼完整性及作業流程上的問題,索性決定自己寫一個原始碼控制系統。

你是怎麼做到這件事情的?花了整個周末熬夜還是在一般時間內把Git搞定?

呵呵,其實你可以去Git原始碼的儲存庫看它如何逐漸成形。我大概花一天讓Git能達到自己管理自己的程度(self-hosting),之後我就開始用Git跟Git提交程式碼了。我大部分的工作都在白天完成,不過也有幾天工作到深夜。我覺得最有趣的地方在看到Git如何快速地成形。在Git樹中的第一次提交並沒有寫很多程式,但是已經實作出提交程式碼的基本功能。寫Git並不會很難,比較難的是思考如何Git組織檔案的方式。

我想強調,Git從無到有大概花了我十天(包含我第一次用Git提交核心程式碼),而且我也不是焚膏繼晷的完成Git。這都取決對Git的基本概念是否很清楚,早在著手寫Git前,我已經看到其他原始碼控制系統的缺陷。我只是不想重蹈覆轍罷了。

Git有滿足你的期待嗎?它有哪些地方不足?

我很喜歡Git,它運作的非常好而且滿足所有我的需求。它掌管了許多計畫並且已超乎想像的速度在成長。不過看看CVS跟RCS還存在著,可見在使用者在轉用其他原始碼控式系統上還是有些惰性在,不過遲早有一天Git都會取代它們。

你認為Git被廣為接受的原因在?

我想很多人使用其他原始碼控制軟體都碰到跟我類似的問題,而這些問題讓我十分火光,在使用上要修正的幾個小問題就讓人抓狂。在Git未問世前,沒有比較好的解決方法。許多人還不清楚分散式版本控制的好處,甚至還為此爭吵不休。不過只要用過Git,一定無法回頭用其他東西。因為用Git備份原始碼簡單又可靠,而且也不必擔心測試儲存庫是否會影響到中央儲存庫。

Git會一直存在嗎?在未來十年內會有其他版本控制系統出現嗎?你會不會是那個系統的開發者?

我不會是那個系統的開發者,也許在十年內我們會看到類似的新東西出現,不過我敢保證,它一定會長的很像Git。Git並非十全十美,但是Git的基本設計做得非常完整,這是其他原始碼管理做不到的,我沒有在裝客氣。

為什麼Git在Linux上運作的很順?

一部分原因在於Git是為我們的工作流程量身打造,另一部分是我提了很多次Git的分散式設計,再重複幾次都不為過。Git是為有效處理龐大的專案如而生,像是Linux。它可以處理大家以前覺得很「困難」的事,不過那些對我來說像是家常便飯。
舉個例子,使用其他原始碼控制系統要執行合併是非常麻煩的事情,你得精心策畫,因為合併茲事體大。這我沒辦法接受,因為我每天都要執行一堆合併。使用Git合併只消幾秒鐘,反而是寫註解花掉我比較多的時間。所以基本上Git是為了滿足我的需求而寫出來的。

很多人說Git是給聰明人用的,Andrew Morton(Linux核心開發者)甚至說:「Git的設計讓使用者覺得自己比想像中的笨。」對此你有什麼樣的回應?

這種說法在過去說得通,不過現在不再是了。大家會這樣想會有一些原因,但是只有一個原因站得住腳:「同一件事情,Git提供太多方法去達成。」

你可以用Git去做很多事情。Git有許多規則,規範你該如何使用Git,而這些規則跟技術關聯沒那麼強,反而比較著墨在多人協作下如何發揮Git的功能。Git是個強大的工具,所以很多人一開始會被它嚇到,而因為GIt的功能是如此強大,每次你都可以用不同的方法完成相同的事情。但一般來說,學習Git的最好方法是從基本開始,熟悉基礎後再去摸索不一樣的東西。

Git被認為很複雜是有它的歷史因素在。其中一個原因是一開始它的確很複雜。一開始使用GIt做核心方面的工作時,使用者需要配置一些腳本。當時大部分的工作都花在開發核心,比較沒有精力去顧及讓Git易於使用。誠然,Git是很複雜,不過那也只是頭一年左右的事情。

另外一個大家覺得它複雜的原因是Git與眾不同。很多人用了CVS十幾年,但Git跟CVS可是天差地遠,不僅概念上不同,指令也不一樣。Git從來沒有想要模仿CVS,甚至想要反其道而行。如果你用類似CVS系統一段時間了,會覺得Git很複雜,甚至特立獨行。比方說,為什麼Git的版本編號不是「1.3.1」,像CVS那樣遞增的數字不是很好嗎?為什麼編號是恐怖的40字元HEX碼?

但Git並不是特立獨行,而是這些改進是必須的。某些人覺得複雜的原因是時代的遞嬗,使用CVS的時代已經過去了。現在很多工程師也許會搞不清楚CVS的操作方法,只是因為他們先學了Git。

如果沒有Git,Linux核心的發展會跟現在一樣好嗎?

呃,沒有Git,好吧。不過一定會有人寫出類似Git的分散式原始碼控制系統,我們絕對需要像Git的東西。

你對GitHub有什麼樣的想法?

GitHub提供很棒的程式碼託管服務,這方面我對它沒有什麼抱怨,不過我對GitHub比較有意見的地方是,GitHub作為一個開發平臺,它的提交、拉取要求、議題追蹤等功能運作的不是很好。GitHub有太多限制,跟核心比還差得遠。一部分的原因是在核心如何被建立,另一部分原因是GitHub的介面會養成使用者的壞習慣。因為GitHub介面的設計,在GitHub上提交會有品質不好的提交訊息等。在這方面他們做了些改善,不過永遠不會適用於像Linux核心的東西。

你覺得Git/GitHub過最有趣的用途是?

使用它們建立一個新專案非常簡單。以前要開啟一個專案很讓人頭痛,但使用Git或GitHub去建立小型專案實在輕而易舉。

目前你手邊上有沒有一些將主宰軟體業界未來發展的計畫?

目前沒有,如果有的話我會告訴你。


Advertisement

更多 iThome相關內容