1.GIT是分布式的右莱,SVN不是:
這是GIT和其它非分布式的版本控制系統(tǒng),例如SVN档插,CVS等慢蜓,最核心的區(qū)別。如果你能理解這個(gè)概念郭膛,那么你就已經(jīng)上手一半了晨抡。需要做一點(diǎn)聲明,GIT并不是目前第一個(gè)或唯一的分布式版本控制系統(tǒng)则剃。還有一些系統(tǒng)耘柱,例如Bitkeeper, Mercurial等,也是運(yùn)行在分布式模式上的棍现。但GIT在這方面做的更好帆谍,而且有更多強(qiáng)大的功能特征。
GIT跟SVN一樣有自己的集中式版本庫(kù)或服務(wù)器轴咱。但,GIT更傾向于被使用于分布式模式烈涮,也就是每個(gè)開發(fā)人員從中心版本庫(kù)/服務(wù)器上chect out代碼后會(huì)在自己的機(jī)器上克隆一個(gè)自己的版本庫(kù)朴肺。可以這樣說(shuō)坚洽,如果你被困在一個(gè)不能連接網(wǎng)絡(luò)的地方時(shí)戈稿,就像在飛機(jī)上,地下室讶舰,電梯里等鞍盗,你仍然能夠提交文件需了,查看歷史版本記錄,創(chuàng)建項(xiàng)目分支般甲,等肋乍。對(duì)一些人來(lái)說(shuō),這好像沒(méi)多大用處敷存,但當(dāng)你突然遇到?jīng)]有網(wǎng)絡(luò)的環(huán)境時(shí)墓造,這個(gè)將解決你的大麻煩。
同樣锚烦,這種分布式的操作模式對(duì)于開源軟件社區(qū)的開發(fā)來(lái)說(shuō)也是個(gè)巨大的恩賜觅闽,你不必再像以前那樣做出補(bǔ)丁包,通過(guò)email方式發(fā)送出去涮俄,你只需要?jiǎng)?chuàng)建一個(gè)分支蛉拙,向項(xiàng)目團(tuán)隊(duì)發(fā)送一個(gè)推請(qǐng)求。這能讓你的代碼保持最新彻亲,而且不會(huì)在傳輸過(guò)程中丟失孕锄。GitHub.com就是一個(gè)這樣的優(yōu)秀案例。
2.GIT把內(nèi)容按元數(shù)據(jù)方式存儲(chǔ)睹栖,而SVN是按文件:
所有的資源控制系統(tǒng)都是把文件的元信息隱藏在一個(gè)類似.svn,.cvs等的文件夾里硫惕。如果你把.git目錄的體積大小跟.svn比較,你會(huì)發(fā)現(xiàn)它們差距很大野来。因?yàn)?.git目錄是處于你的機(jī)器上的一個(gè)克隆版的版本庫(kù)恼除,它擁有中心版本庫(kù)上所有的東西,例如標(biāo)簽曼氛,分支豁辉,版本記錄等。
Git沒(méi)有一個(gè)全局版本號(hào)舀患,而SVN有:目前為止這是跟SVN相比Git缺少的最大的一個(gè)特征徽级。
Git的內(nèi)容的完整性要優(yōu)于SVN: GIT的內(nèi)容存儲(chǔ)使用的是SHA-1哈希算法。這能確保代碼內(nèi)容的完整性聊浅,確保在遇到磁盤故障和網(wǎng)絡(luò)問(wèn)題時(shí)降低對(duì)版本庫(kù)的破壞餐抢。
Git下載下來(lái)后,在OffLine狀態(tài)下可以看到所有的Log,SVN不可以低匙。
剛開始用時(shí)很狗血的一點(diǎn)旷痕,SVN必須先Update才能Commit,忘記了合并時(shí)就會(huì)出現(xiàn)一些錯(cuò)誤,git還是比較少的出現(xiàn)這種情況顽冶。
克隆一份全新的目錄以同樣擁有五個(gè)分支來(lái)說(shuō)欺抗,SVN是同時(shí)復(fù)製5個(gè)版本的文件,也就是說(shuō)重復(fù)五次同樣的動(dòng)作。而Git只是獲取文件的每個(gè)版本的 元素强重,然后只載入主要的分支(master)在我的經(jīng)驗(yàn),克隆一個(gè)擁有將近一萬(wàn)個(gè)提交(commit),五個(gè)分支,每個(gè)分支有大約1500個(gè)文件的 SVN,耗了將近一個(gè)小時(shí)绞呈!而Git只用了區(qū)區(qū)的1分鐘贸人!
SVN的特點(diǎn)是簡(jiǎn)單,只是需要一個(gè)放代碼的地方時(shí)用是OK的佃声。
Git的特點(diǎn)版本控制可以不依賴網(wǎng)絡(luò)做任何事情艺智,對(duì)分支和合并有更好的支持(當(dāng)然這是開發(fā)者最關(guān)心的地方),不過(guò)想各位能更好使用它秉溉,需要花點(diǎn)時(shí)間嘗試下力惯。