1. 程式人生 > >開發者必掌握工具 之 Git的誕生

開發者必掌握工具 之 Git的誕生

圖片源於Zoommy

相信各位開發者對Git不會陌生,就算不熟悉Git相信你對GitHub也有所瞭解。而Git這款在版本管理工具中叱吒風雲的軟體是如何出現的呢?在Git之前版本管理又是如何發展的呢?在本文裡我會對版本控制工具的發展和Git的起源的進行介紹。

我們在開發一款軟體時,尤其是多人協作開發,程式碼的管理是十分重要的。比如個人開發時需要對程式碼的版本進行管理,多人協作開發時需要一個工具來進行程式碼的合併、衝突處理、版本管理等等。這樣一款工具我們往往稱之為“版本控制系統”。

在最初的日子裡,我們同步、管理程式碼可能是通過軟盤拷貝、檔案伺服器(類似現在的雲盤)來進行的。但是這種方法絲毫沒有處理程式碼衝突的能力,合併程式碼只能通過人工手動來操作,這大大消耗了我們的人力和時間。

diff 和 patch

第一次改善這種狀況是 diff 和 patch 命令的出現。假如我們現在有兩個文字檔案 a.txt 和 b.txt。其中 diff 命令可以比較 a.txt 和 b.txt 的文字差異,另外它還可以比較兩個資料夾之間的差異。假如我們把差異儲存到了diff.txt 中,patch 命令則可以根據 diff.txt 和 a.txt、b.txt 的其中任一檔案得出另一檔案。這兩個工具的出現讓我們合併程式碼的能力等以增強。

CVS 和 SVN

第一個可以管理整個工程的版本工具CVS(ConCurrent Versions System)誕生於 1985年,它是由荷蘭一所大學 Dick Grune 教授打造。當時教授在和幾個學生協同開發一個專案,但苦於專案程式碼的合併,於是教授就基於單個檔案版本工具 RCS 開發了 CVS。

CVS 採用 C/S 架構設計,服務端來進行版本庫的管理工作,服務端通過只保留一份檔案拷貝和記錄差異使其儲存效率大大提高。CVS 也奠定了版本控制工具的模型,CVS中的commit log、tag、branch等屬性都在後續出現的版本控制工具中得以延續保留。

可以說CVS是集中式版本管理工具的開山鼻祖。當然CVS也存在很多問題,而正是因此,類CVS版本控制工具大量出現,在一定程度上解決了CVS存在的問題,SVN就是其一。

SVN(Subversion)於2000年由CollabNet資助開發,目標就是取代CVS。SVN優化了很多特性,如實現了原子提交、全域性版本號、檔案輕拷貝等,這些優化也使得它在版本控制工具中成為最佳選擇之一。但SVN本質上是一種集中式版本管理工具,這種版本控制太依賴於伺服器,如果伺服器出現問題,版本控制將不可用;如果網路較差,提交程式碼將變得十分漫長。再加上SVN本身設計的一些問題,使用其進行版本管理也並存在很多不如意之處。

Git

Git是由Linux之父Linus開發的,在2005年4月3號開始開發,到 4.7 僅四天時間Git就可以投入使用了。到同年6月份,Linux已經在使用Git管理程式碼了。

Linux版本管理最早是通過手工合併程式碼的方式進行的,不使用CVS的原因就是Linus堅決反對這種集中式的版本管理工具。而迫於其他開發者的壓力,Linus最後決定使用BitKeeper一種分散式的版本管理工具。與集中式不同,使用分散式的版本管理工具每個人都可以在本地進行版本的管理,如日誌提交、程式碼提交、建立tag和分支、合併分支等等操作。

而在2005年4月,Andrew Tridgell 為了開發一個可以與BitKeeper互動的工具,試圖反編譯BitKeeper。這讓開發該軟體的公司BitMover得知並取消了Linux社群免費試用BitKeeper的權利。這也成為了Linus開發Git的契機,促進了Git這一偉大作品的誕生。

Git為版本管理開啟一扇新的大門,後續我會對Git的入門使用進行介紹,如有興趣請繼續關注。

版權宣告
本文首發自簡書,搜尋作者 QinGeneral
同步發於CSDN部落格,搜尋作者 迷失
同步發於微信公眾號:AndroidRain
無需授權即可轉載,甚至無需保留以上版權宣告;
轉載時請務必註明作者。

掃碼關注微信公眾號
掃碼關注微信公眾號