Linus 一直痛恨的 CVS 及 SVN 都是集中式的版本控制系統(tǒng),而 Git 是分布式版本控制系統(tǒng),集中式和分布式版本控制系統(tǒng)有什么區(qū)別呢?
先說(shuō)集中式版本控制系統(tǒng),版本庫(kù)是集中存放在中央服務(wù)器的,而干活的時(shí)候,用的都是自己的電腦,所以要先從中央服務(wù)器取得最新的版本,然后開(kāi)始干活,干完活了,再把自己的活推送給中央服務(wù)器。中央服務(wù)器就好比是一個(gè)圖書(shū)館,你要改一本書(shū),必須先從圖書(shū)館借出來(lái),然后回到家自己改,改完了,再放回圖書(shū)館。
http://wiki.jikexueyuan.com/project/git-tutorial/images/git1.jpg" alt="" />
集中式版本控制系統(tǒng)最大的毛病就是必須聯(lián)網(wǎng)才能工作,如果在局域網(wǎng)內(nèi)還好,帶寬夠大,速度夠快,可如果在互聯(lián)網(wǎng)上,遇到網(wǎng)速慢的話,可能提交一個(gè) 10M 的文件就需要 5 分鐘,這還不得把人給憋死啊。
那分布式版本控制系統(tǒng)與集中式版本控制系統(tǒng)有何不同呢?首先,分布式版本控制系統(tǒng)根本沒(méi)有“中央服務(wù)器”,每個(gè)人的電腦上都是一個(gè)完整的版本庫(kù),這樣,你工作的時(shí)候,就不需要聯(lián)網(wǎng)了,因?yàn)榘姹編?kù)就在你自己的電腦上。既然每個(gè)人電腦上都有一個(gè)完整的版本庫(kù),那多個(gè)人如何協(xié)作呢?比方說(shuō)你在自己電腦上改了文件 A,你的同事也在他的電腦上改了文件A,這時(shí),你們倆之間只需把各自的修改推送給對(duì)方,就可以互相看到對(duì)方的修改了。
和集中式版本控制系統(tǒng)相比,分布式版本控制系統(tǒng)的安全性要高很多,因?yàn)槊總€(gè)人電腦里都有完整的版本庫(kù),某一個(gè)人的電腦壞掉了不要緊,隨便從其他人那里復(fù)制一個(gè)就可以了。而集中式版本控制系統(tǒng)的中央服務(wù)器要是出了問(wèn)題,所有人都沒(méi)法干活了。
在實(shí)際使用分布式版本控制系統(tǒng)的時(shí)候,其實(shí)很少在兩人之間的電腦上推送版本庫(kù)的修改,因?yàn)榭赡苣銈儌z不在一個(gè)局域網(wǎng)內(nèi),兩臺(tái)電腦互相訪問(wèn)不了,也可能今天你的同事病了,他的電腦壓根沒(méi)有開(kāi)機(jī)。因此,分布式版本控制系統(tǒng)通常也有一臺(tái)充當(dāng)“中央服務(wù)器”的電腦,但這個(gè)服務(wù)器的作用僅僅是用來(lái)方便“交換”大家的修改,沒(méi)有它大家也一樣干活,只是交換修改不方便而已。
http://wiki.jikexueyuan.com/project/git-tutorial/images/git2.jpg" alt="" />
當(dāng)然,Git 的優(yōu)勢(shì)不單是不必聯(lián)網(wǎng)這么簡(jiǎn)單,后面我們還會(huì)看到 Git 極其強(qiáng)大的分支管理,把 SVN 等遠(yuǎn)遠(yuǎn)拋在了后面。
CVS 作為最早的開(kāi)源而且免費(fèi)的集中式版本控制系統(tǒng),直到現(xiàn)在還有不少人在用。由于 CVS 自身設(shè)計(jì)的問(wèn)題,會(huì)造成提交文件不完整,版本庫(kù)莫名其妙損壞的情況。同樣是開(kāi)源而且免費(fèi)的 SVN 修正了 CVS 的一些穩(wěn)定性問(wèn)題,是目前用得最多的集中式版本庫(kù)控制系統(tǒng)。
除了免費(fèi)的外,還有收費(fèi)的集中式版本控制系統(tǒng),比如 IBM 的 ClearCase(以前是 Rational 公司的,被 IBM 收購(gòu)了),特點(diǎn)是安裝比 Windows 還大,運(yùn)行比蝸牛還慢,能用 ClearCase 的一般是世界 500 強(qiáng),他們有個(gè)共同的特點(diǎn)是財(cái)大氣粗,或者人傻錢多。
微軟自己也有一個(gè)集中式版本控制系統(tǒng)叫 VSS,集成在 Visual Studio 中。由于其反人類的設(shè)計(jì),連微軟自己都不好意思用了。
分布式版本控制系統(tǒng)除了 Git 以及促使 Git 誕生的 BitKeeper 外,還有類似 Git 的 Mercurial 和 Bazaar 等。這些分布式版本控制系統(tǒng)各有特點(diǎn),但最快、最簡(jiǎn)單也最流行的依然是 Git!