版本控制系統前言linux
若是你是一枚程序猿,或者是網站等等的開發人員,若是你正在爲怎樣提升團隊開發效率,更好的解決在開發中遇到的BUG,又或者爲怎樣管理備份代碼而發愁,那麼,你該去了解一下版本控制系統了。git
什麼是版本控制系統吶,舉個例子吧,我在開發一個網站項目的時候,首先開發出了版本一,好的,將版本一部署到服務器上,部署好以後請客戶驗收,客戶看過以後,提出了一些修改意見,而後要按照客戶的意見修改網站功能,在修改首頁的時候,爲了防止丟失原來的首頁,我將其另存爲index.htm.backup,然後在index.htm的基礎上修改,修改完後存爲index.htm,後來發現缺乏一個功能,我又開始修改首頁,將index.htm存爲index.htm.2,開始加入新的功能,完成後保存,在改完後測試發現出現了bug,又返回開始修改bug,將index.htm存爲index.htm.3,又開始修改…,如此往復,最後去看index.htm,發現已是一團糟,更不不記得哪個版本引入了新功能,哪個版本新引入了bug。github
形成這種現象的緣由是在修改代碼的時候沒有使用版本控制系統,形成代碼重複保存、修改,出現混亂。上面舉得只是我的在開發的時候遇到的問題,這僅僅只是其中的一方面,若是團隊在項目開發,更要利用版本控制系統來協同開發、管理代碼。windows
版本控制系統的歷史 CVS——開啓版本控制系統的大門
CVS ( Concurrent Versions System )誕生於1985年,是由荷蘭阿姆斯特丹VU大學的Dick Grune 教授實現的。當時Dick Grune 教授和兩個學生一塊兒共同開發一個項目,可是三人的工做時間沒法協調到一塊兒,迫切須要一個記錄和協同開發的軟件。因而,Dick Grune 教授經過腳本語言對RCS(一個針對單獨文件的版本管理軟件)進行封裝,設計出了歷史上第一個被大規模使用的版本控制工具。ruby
CVS 採用服務器/客戶端架構設計,版本庫位於服務器端,實際上就是一個CVS容器。每個RCS文件以,v做爲文件名後綴,用於保存對應文件的每一次更改歷史。RCS文件中只保留一個版本的徹底拷貝,其餘歷次更改則差別存儲其中,使得存儲很是有效率。服務器
CVS最大的優勢就是簡單,但他的缺點使得CVS不能適應現代的版本控制,其缺點主要有網絡
服務器鬆散存儲的文件使得其在創建里程碑及分支時效率不高,而且當服務器端存儲的文件越多時,其效率越低。 分支和里程碑不可見,由於他們被分散的記錄在服務器端的各個RCS文件中。 合併困難。 因爲文件在服務器端是單獨經過差別存儲的,不能優化存儲內容相同但文件名不一樣的文件。 不能對文件盒目錄的重命名進行版本控制。
CVS 的成功激發了版本控制工具的大爆發,各式各樣的版本控制系統如雨後春筍般爆發出來,這其中最典型的的就是SVN。架構
SVN——集中式版本控制系統
Subversion,因爲其命令行工具爲svn,所以一般被稱爲SVN,SVN由CollabNet公司於2000年資助並開始開發,目的是建立按一個更好用的版本控制系以取代CVS,到2001年,SVN已經能夠用於本身的版本控制了。分佈式
SVN的每一次提交,都會在服務器端db/revs和db/revprops目錄下各建立一個以順序編號命名的文件。其中db/revs目錄下的文件記錄了於上一次提交之間的差別(字母A表示新增,M表示修改,D表示刪除)。在db/revprops目錄下的同名文件則保存着提交日誌、做者、提交時間等信息。這樣作使得SVN擁有全局版本號,每提交一次,SVN版本號都會自動加1,使得使用SVN有了極大的便利;同時,在提交時文件名不受限制,由於服務器端不須要創建和客戶端文件類似的文件名,因而,文件命名不受服務器操做系統字符集和大小寫的限制。svn
SVN在目錄的輕量級拷貝、版本庫受權以及冗餘的拷貝方面的亮點,使得SVN成爲開源社區和各大公司企業間的新寵。
可是,相比CVS,SVN本質上沒有區別,都屬於集中式版本控制系統。即一個項目對應一個版本庫,全部成員只能經過網絡向服務器上的版本庫提交,這樣除會出現單點故障外,在查看提交日誌及提交數據的延遲,也帶來了許多不便。
GIT——偉大的分佈式版本控制系統
Linux之父Linus是CVS和SVN的堅定反對者,在他管理維護linux代碼時,一直以手工修補文件的方式管理代碼,在2002年至2005年期間,Linus選擇了一款商業版本控制系統bitkeeper做爲linux內核的代碼管理工具,bitkeeper不一樣於CVS和SVN ,是一款分佈式的版本管理工具。
2005年的一件事致使了Git的誕生,samba的做者Andrew Trigell試圖對BitKeeper進行反向工程,以開發一個能與BitKeeper交互的開源工具,這激怒了BitKeeper的全部公司,要求收回linux社區免費的BitKeeper使用權。無可奈何,Linus最終決定本身開發一個分佈式版本控制工具,因而,Git誕生了。
Linus以一個文件系統專家和內核設計者的視角對Git進行設計,其獨特的設計讓Git擁有非凡的性能和最爲優化的存儲能力。通過短短几年的發展,Git獲得普遍的承認,衆多的開源項目紛紛遷移到Git上來,如Git和linux的內核外,還有Perl、GNOME、KDE、Qt、ruby on Rails、Android、Debin,還有github上的上百萬個項目。
現在,git能夠在linux、Mac OS、windows下運行,爲每個代碼開發者帶來了便利。