Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)世蔗,由Linux開源社區(qū)開發(fā)嚎幸,最初設(shè)計摸底是為了方便管理Linux內(nèi)核的開發(fā)践美。大型開源項目linux kernel洗贰、Android、chromium陨倡、mono敛滋、dotnet、UE4等都使用Git管理項目
版本控制系統(tǒng)
如果你用Word寫過長篇文稿兴革,那你一定有這樣的經(jīng)歷:修改了其中一個段落绎晃,又怕將來想恢復(fù)找不回來怎么辦?有辦法杂曲,先把當(dāng)前文件“另存為……”一個新的Word文件箕昭,再接著改,改到一定程度解阅,再“另存為……”一個新文件,這樣一直改下去泌霍,最后你的Word文檔就會產(chǎn)生很多副本货抄。然后過了一周述召,你突然想找回被修改的文字,但已經(jīng)記不清修改前保存在哪個文件里了蟹地,只好一個一個文件去找积暖,焦躁并且憤怒著。
看著桌面一堆亂七八糟的文件怪与,想保留最新的一個夺刑,然后把其他的刪掉,又怕哪天會用上分别,還不敢刪遍愿,心情郁悶。如果有些部分需要你的財務(wù)同事幫助填寫耘斩,于是你把文件Copy到U盤里給她(也可能通過Email發(fā)送一份給她)沼填,然后,你繼續(xù)修改Word文件括授。一天后坞笙,同事再把Word文件傳給你,此時荚虚,你必須想想薛夜,發(fā)給她之后到你收到她的文件期間,你和她作了哪些改動版述,得把你的改動和她的部分合并梯澜,這樣效率就低了很多。
于是你期望院水,如果有一個軟件腊徙,不但能自動幫我記錄每次文件的改動,還可以讓同事協(xié)作編輯檬某,這樣就不用自己管理一堆類似的文件了撬腾,也不需要把文件傳來傳去。如果想查看某次改動恢恼,只需要在軟件里瞄一眼就可以民傻,豈不是很方便?這樣就出現(xiàn)了版本控制系統(tǒng)场斑,用于記錄文件的每次操作漓踢。
【圖片】
集中式版本控制系統(tǒng)
最早出現(xiàn)的是集中式版本控制系統(tǒng),版本庫是集中存放在中央服務(wù)器的漏隐,而干活的時候喧半,用的都是自己的電腦,所以要先從中央服務(wù)器取得最新的版本青责,然后開始干活挺据,干完活了取具,再把自己的活推送給中央服務(wù)器。中央服務(wù)器就好比是一個圖書館扁耐,你要改一本書暇检,必須先從圖書館借出來,然后回到家自己改婉称,改完了块仆,再放回圖書館。
集中式版本控制系統(tǒng)最大的毛病就是必須聯(lián)網(wǎng)才能工作王暗,如果在局域網(wǎng)內(nèi)還好悔据,帶寬夠大,速度夠快瘫筐,可如果在互聯(lián)網(wǎng)上蜜暑,就會受限于互聯(lián)網(wǎng)網(wǎng)速,當(dāng)工程比較大時策肝,這種方法就會嚴(yán)重滯后系統(tǒng)開發(fā)速率肛捍。
分布式版本控制系統(tǒng)
那分布式版本控制系統(tǒng)與集中式版本控制系統(tǒng)有何不同呢?首先之众,分布式版本控制系統(tǒng)根本沒有“中央服務(wù)器”拙毫,每個人的電腦上都是一個完整的版本庫,這樣棺禾,你工作的時候缀蹄,就不需要聯(lián)網(wǎng)了,因為版本庫就在你自己的電腦上膘婶。既然每個人電腦上都有一個完整的版本庫缺前,那多個人如何協(xié)作呢?比方說你在自己電腦上改了文件A悬襟,你的同事也在他的電腦上改了文件A衅码,這時,你們倆之間只需把各自的修改推送給對方脊岳,就可以互相看到對方的修改了逝段。
集中式和分布式各自的產(chǎn)品
集中式
免費(fèi):CVS作為最早的開源而且免費(fèi)的集中式版本控制系統(tǒng),直到現(xiàn)在還有不少人在用割捅。由于CVS自身設(shè)計的問題奶躯,會造成提交文件不完整,版本庫莫名其妙損壞的情況亿驾。同樣是開源而且免費(fèi)的SVN修正了CVS的一些穩(wěn)定性問題嘹黔,是目前用得最多的集中式版本庫控制系統(tǒng)。
收費(fèi) :比如IBM的ClearCase(以前是Rational公司的莫瞬,被IBM收購了)参淹,微軟的VSS等
分布式
促使Git誕生的BitKeeper外醉锄,還有類似Git的Mercurial和Bazaar等。這些分布式版本控制系統(tǒng)各有特點浙值,但最快、最簡單也最流行的依然是Git檩小!
集中式VS分布式
和集中式版本控制系統(tǒng)相比开呐,分布式版本控制系統(tǒng)的安全性要高很多,因為每個人電腦里都有完整的版本庫规求,某一個人的電腦壞掉了不要緊筐付,隨便從其他人那里復(fù)制一個就可以了。而集中式版本控制系統(tǒng)的中央服務(wù)器要是出了問題阻肿,所有人都沒法干活了瓦戚。
在實際使用分布式版本控制系統(tǒng)的時候,其實很少在兩人之間的電腦上推送版本庫的修改丛塌,因為可能你們倆不在一個局域網(wǎng)內(nèi)较解,兩臺電腦互相訪問不了,也可能今天你的同事病了赴邻,他的電腦壓根沒有開機(jī)印衔。因此,分布式版本控制系統(tǒng)通常也有一臺充當(dāng)“中央服務(wù)器”的電腦姥敛,但這個服務(wù)器的作用僅僅是用來方便“交換”大家的修改奸焙,沒有它大家也一樣干活,只是交換修改不方便而已彤敛。
Git由來
Git 在設(shè)計之初就制訂了若干目標(biāo):速度 与帆、 簡單的設(shè)計 、 對非線性開發(fā)模式的強(qiáng)力支持(允許上千個并行開發(fā)的分支)墨榄、完全分布式玄糟、有能力高效管理類似 Linux 內(nèi)核一樣的超大規(guī)模項目(速度和數(shù)據(jù)量)。Git 和其他版本控制系統(tǒng)(如 CVS)有不少的差別渠概,Git 本身關(guān)心文件的整體性是否有改變茶凳,但多數(shù)的 CVS 或 SVN(Subversion的簡稱) 系統(tǒng)則在乎文件內(nèi)容的差異。因此 Git 更像一個文件系統(tǒng)播揪,直接在本機(jī)上獲取數(shù)據(jù)贮喧,不必連接到主機(jī)端獲取數(shù)據(jù)。
自誕生于 2005 年以來猪狈,Git 日臻成熟完善箱沦,迅速成為最流行的分布式版本控制系統(tǒng),在高度易用的同時雇庙,仍然保留著初期設(shè)定的目標(biāo)谓形。它的速度飛快灶伊,極其適合管理大項目,它還有著令人難以置信的非線性分支管理系統(tǒng)寒跳,可以應(yīng)付各種復(fù)雜的項目開發(fā)需求聘萨。2008年,GitHub網(wǎng)站上線了童太,它為開源項目免費(fèi)提供Git存儲米辐,無數(shù)開源項目開始遷移至GitHub,包括jQuery书释,PHP翘贮,Ruby等等。
Git優(yōu)點
相比集中式控制版本爆惧,Git有如下幾個優(yōu)點:
- 本地是版本庫的完整鏡像狸页,因此支持離線工作
- 絕大多數(shù)操作都只需要訪問本地文件和資源,而且與每個提交都是所有文件的完整副本扯再,因此速度非成衷牛快。(PS:SVN等集中式版本控制系統(tǒng)存儲每個文件與初始化版本的差異,而Git每個提交都是所有文件的完整副本叔收,使得Git在回溯到某個提交時齿穗,不會對所有文件執(zhí)行差異計算還原,因此速度會非辰嚷桑快)
- 強(qiáng)大快捷的分支功能窃页,非常適合非線性開發(fā)過程。