0 1
天才程序員
1993年,開發著名軟件Cygwin的公司Cygnus Solutions招募了一名天才程序員吉姆·金登 (Jim Kingdon)。
但是吉姆并不想搬到Cygnus所在硅谷,他想住在弗吉尼亞州一個鄉村的公社(commune )里。
Cygnus公司很重視人才,他們專門為吉姆·金登一個人拉了一條幀中繼線(這在當時價格可不低),讓他可以遠程工作。
問題是Cygnus使用CVS來管理源代碼,CVS是荷蘭阿姆斯特丹自由大學講師Dick Grune在80年代開發的一個程序,當時只能在單機使用。
(Dick Grune)
用戶需要從代碼倉庫中checkout代碼副本,存放在自己的home目錄,修改后commit回代碼倉庫。
所以住在鄉村的吉姆·金登雖然有了網絡,但是還無法遠程登錄CVS,在家工作。
這根本難不住吉姆這樣的天才黑客:讓CVS支持網絡不就行了嗎?
說干就干,他拿到CVS的源碼,研究了一番,把CVS拆分成了客戶端和服務器兩個部分。
1993年的網絡非常緩慢,吉姆·金登一不做二不休,干脆設計了一個全新的、高效的通信協議,極大地減少了網絡往返次數,降低了延遲。
服務器暴露在互聯網上,必然要考慮安全問題,Jim Kindon于是又增加了Kerberos 認證。
一套組合拳讓CVS脫胎換骨,成了當時非常先進的軟件,大大超越了同時代的許多工具。
Cygnus 是一家扎根于黑客文化的公司,也很樂意看到吉姆·金登對CVS做出這樣的修改。
現在,吉姆·金登可以愉快地遠程工作了,從灣區的 CVS 存儲庫中取出代碼,將其checkout弗吉尼亞自己的計算機上,隨心所欲地進行開發,并在完成后將其commit回去。
0 2
1990s:CVS黃金時代
照理說,開發了這么一個革命性的軟件,又遇上了開源的浪潮,全球的開發者都是潛在的用戶,吉姆·金登完全可以成立一個公司,提供技術支持和咨詢服務,弄不好就走上人生巔峰了。
但吉姆·金登魔改CVS,只是為了方便自己工作,只想在公司內部使用,根本沒有想到對外公開!
不僅如此,在解決了自己的問題以后,他就把注意力轉到了別的方面,從黑客界消失了。
這時候第二個吉姆出現了,吉姆·布蘭迪(Jim Blandy)是吉姆·金登的大學室友,他和朋友進行遠程協作時也遇到了類似的問題,只能通過電子郵件來發代碼補丁,極其麻煩。
這時候他聽說了被魔改的網絡版CVS,大喜過望,馬上給吉姆·金登寫信,希望能使用魔改版。
吉姆·金登當然同意分享代碼,但有一個條件:不能問他問題!
因為他對維護開源軟件的各種瑣事沒有興趣,也不想處理用戶的支持請求。
吉姆·布蘭迪就想,這么有用的軟件,沒人做技術支持,多可惜啊!
看到商機的吉姆和朋友干脆成立了一家叫做Cyclic Software的公司,專門提供網絡版CVS(被大家稱為Cyclic CVS)的技術支持和咨詢服務。
開源、免費、跨平臺的Cyclic CVS徹底改變了開源協作方式,GNU項目、FreeBSD、Apache HTTP Server、KDE、GNOME、Mozilla、Perl、Python等著名開源項目紛紛采用CVS保存自己的代碼庫。
當時最大的開源平臺SourceForge也在用CVS,CVS成了開源世界的標準。
0 3
2000s:SVN成功接棒
雖然Cyclic CVS風靡全球,解決了開源世界的協作的難題,但是它最初的設計缺陷也讓用戶抱怨連連:
1.缺乏原子提交
在 CVS 中,每個文件的更改是獨立提交的,多個文件的變更沒有任何關聯。
A 和 B 文件屬于同一次修改,但由于并非原子提交,可能 A 提交成功,而 B 失敗,導致代碼庫處于不完整狀態。
2.update 操作時非常低效
CVS 并不存儲整個項目的完整快照,而是對每個文件單獨管理版本,如果代碼庫有 10,000 個文件,但只有 3 個文件被修改,CVS 仍然需要通過網絡檢查全部 10,000 個文件,造成巨大的性能浪費。
3.創建分支非常困難。
CVS 創建分支時,實際上是為每個文件的歷史記錄打上一個分支標記,當代碼庫包含數十萬文件,非常耗時。
在整個90年代,CVS沒有好的免費開源替代品,大家還是不得不使用。
每天都在使用CVS的吉姆·布蘭迪一直在構思,怎么重新設計一下CVS,徹底解決這些問題。
新系統的名稱他都想好了,叫Subversion。
正好,一個叫做CollabNet的公司也受不了CVS了,掏錢資助吉姆·布蘭迪等5個人把Subversion給開發出來。
當時吉姆已經在紅帽公司工作,紅帽也非常慷慨:你去吧,什么時候把Subversion開發出來再回來!
開發工作于2000年2月啟動,5人目標明確,配合默契,按模塊分工,每個人專注于自己的部分,吉姆主要負責 服務器端,而其他人分別負責命令行工具、工作目錄庫等部分。
一開始他們還使用CVS來管理Subversion的源碼,一年以后,Subversion的主要功能已經完成,可以開始“吃自己的狗糧”,用Subversion來管理Subversion。
Subversion徹底解決了CVS的問題,實現了原子提交,迅速地創建分支等功能。
大家看到更好用的Subversion,紛紛拋棄CVS,上了Subversion的大船。
SubVersion成為了21世紀頭10年最主流的版本控制系統。
0 4
2010s:Git稱王
就在Subversion如日中天的時候,2005年,Linux社區發生了一件大事!
由于有人對BitKeeper做逆向工程,BitKeeper停止向Linux社區提供免費版本。
Linus只好暫停了Linux的開發,卷起袖子自己開發了一個版本管理軟件:Git。
和Subversion相比,BitKeeper和Git代表了另外一個重要的方向:分布式版本管理。
每個人都有一個本地的代碼倉庫,可以在本地隨意折騰,即使沒有網絡也具備完整的版本管理的能力。本地開發結束后后向服務器端的代碼倉庫提交就行。
這種方式更加符合開源軟件的全球化協作,所以Git開始走出Linux開發社區,慢慢地蠶食Subversion的市場。
2008年,GitHub成立,不但給Git 用戶提供了便捷的代碼托管服務和豐富的協作功能(Pull Request,Issues),還讓程序員可以關注自己感興趣的用戶和項目,成為程序員社交的重要平臺。
短短的兩三年時間內,GitHub吸引了Ruby on Rails,jQuery,Node.js,Bootstrap、Redis、Python、Puppet、Chef、Elasticsearch等一大批著名項目入駐。
到了2015年,Git 成為程序員最常用的版本控制工具,占據絕對主導地位。
SVN 的市場份額逐漸縮小,成為少數遺留項目/特殊項目的選擇。
就連Subversion的作者吉姆也開始奉勸別人:別用使用SVN了,它已經過時了......
從CVS到SVN再到Git,20年間代碼版本管理工具迭代了三次。
如今Git是全球霸主,被大家使用得多了,它的痛點問題也在慢慢暴露。
顛覆它的工具可能正在醞釀之中,也許某一天,Linus也會說:別用Git了,它已經過時了......
全文完,覺得不錯的話點個贊或者在看吧!
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.