原文鏈接http://www.oschina.net/news/12542/git-and-svn,首先說(shuō)明,我沒(méi)看英文原版,因?yàn)榫臀夷壳皝?lái)說(shuō),自認(rèn)為沒(méi)這個(gè)需要了。好吧,我承認(rèn)其實(shí)是犯懶。。。 下面我結(jié)合自身體會(huì),逐條評(píng)論一下: 1.GIT是分布式的,SVN不是: 這一點(diǎn)絕對(duì)是最最關(guān)鍵的重點(diǎn),與原作者不同,我要特別強(qiáng)調(diào)的是這一點(diǎn)對(duì)身處大陸的碼農(nóng)們的重要性。為什么?因?yàn)槿思依贤庀氯?/span>android源碼要幾個(gè)小時(shí),而我們要十幾二十個(gè)小時(shí),甚至好幾天,還會(huì)不停斷線! 分布式的最大好處,在于當(dāng)你要切換不同的提交,不同的分支時(shí),不再需要聯(lián)網(wǎng)。試想一下,要是google的android源碼用svn(這個(gè)是純假設(shè),實(shí)際上是完全不可行的,后面會(huì)提到),本來(lái)在大陸下一次代碼就夠慢的了,要是每天再切個(gè)幾次分支和提交,那就別活了。所以在這一點(diǎn)上,我不說(shuō)git完爆svn,應(yīng)該說(shuō)是分布式完爆非分布式。 2. GIT把內(nèi)容按元數(shù)據(jù)方式存儲(chǔ),而SVN是按文件: 說(shuō)實(shí)話,我沒(méi)看出來(lái)原文列第二點(diǎn)出來(lái)是為了說(shuō)明什么。這確實(shí)是個(gè)區(qū)別,但一般用戶是不需要了解的。 看到評(píng)論中有人提到了提交沖突的問(wèn)題。真發(fā)生了大規(guī)模沖突,不管git還是svn,都是挺讓人感到頭疼的,兩者對(duì)沖突的解決辦法也是差不多的。個(gè)人見(jiàn)解,沖突是靠良好的團(tuán)隊(duì)管理和項(xiàng)目分工來(lái)盡力避免的,但真發(fā)生了,解決起來(lái)都差不多,也沒(méi)見(jiàn)哪個(gè)版本控制系統(tǒng)是以解決沖突效率高作為賣點(diǎn)的。當(dāng)然不存在沖突的版本管理系統(tǒng)也有,VSS嘛,往前推個(gè)10年,中興全公司都在用呢,呵呵~ 3. GIT分支和SVN的分支不同: 分支確實(shí)是一個(gè)重點(diǎn),只不過(guò)原文沒(méi)說(shuō)到點(diǎn)子上,不過(guò)看文章是挺久之前的,可能那時(shí)候git還沒(méi)現(xiàn)在這么普及(當(dāng)然現(xiàn)在國(guó)內(nèi)也未必有多普及),也情有可原吧。 這里我就說(shuō)最關(guān)鍵的一點(diǎn),你可以看完整的android代碼,如果沒(méi)有,可以用git clone個(gè)linux的完整代碼庫(kù),然后用git branch -r命令看看,你會(huì)發(fā)現(xiàn)有幾十個(gè)甚至近百個(gè)分支,如果你只用svn的話,你一定完全無(wú)法想象。但這就是git分支的優(yōu)勢(shì),因?yàn)?/span>git是基于差異來(lái)管理分支的,其分支的代價(jià)極小,再結(jié)合第一點(diǎn),所以其切換分支也極為方便和快捷。這一點(diǎn)上我認(rèn)為git是優(yōu)于svn的,之所以我不說(shuō)完爆,是因?yàn)檫@一點(diǎn)要結(jié)合項(xiàng)目需求,你的項(xiàng)目不是android,不是linux,沒(méi)有大量分支并行開(kāi)發(fā)、合并的需求,其實(shí)用svn也是可以的。但用git,你可以為一個(gè)單獨(dú)的小功能拉分支,為一輪完整的測(cè)試?yán)种В瑸槟愕拿恳粋€(gè)客戶單獨(dú)拉分支,等等等等,基本上是想拉就拉,這一點(diǎn)svn應(yīng)該是比不上的。 至于原文提到的合沒(méi)合并的問(wèn)題,svn我不常用,git下用git log命令,加上--graph參數(shù),再配合--oneline和--color,我覺(jué)得是很方便直觀的。 4. GIT沒(méi)有一個(gè)全局的版本號(hào),而SVN有: 原文承認(rèn)這一點(diǎn)不如svn,我也承認(rèn),但要補(bǔ)充說(shuō)明一下,git每次提交產(chǎn)生的40位(160bit)哈希值,是完全可以等同于svn全局id的作用的,之所以說(shuō)不如,只是因?yàn)椴缓糜浂选?/span> 5. GIT的內(nèi)容完整性要優(yōu)于SVN: 完整性這一點(diǎn)git要優(yōu)于svn這是事實(shí),雖然我個(gè)人不論git還是svn,都沒(méi)碰到過(guò)這類問(wèn)題。 反正對(duì)于git,每個(gè)克隆都是個(gè)完整的庫(kù),只要有一個(gè)克隆在,服務(wù)器被雷劈了都不怕,有點(diǎn)狡兔三窟的味道。當(dāng)然,我這里說(shuō)的跟原文說(shuō)的已經(jīng)不是一回事了。
看到有評(píng)論說(shuō)git鼓勵(lì)人們拉分支,這完全就是本末倒置了。事實(shí)是,git在分支這一點(diǎn)上優(yōu)勢(shì)巨大,所以當(dāng)項(xiàng)目有大量分支的需求時(shí),自然git就脫穎而出了。這也是為什么android、linux用不了svn的原因。至于說(shuō)svn的commit是一種主動(dòng)責(zé)任,稍微用點(diǎn)腦子想想,可能存在一個(gè)版本控制系統(tǒng),不需要程序員承擔(dān)所謂的主動(dòng)責(zé)任么?無(wú)非在VSS里面,是checkout/checkin,在svn里面是commit,git又把svn的commit拆分成了commit和push兩步而已。該評(píng)論實(shí)在是過(guò)于主觀,誤導(dǎo)傾向太重。 最后說(shuō)說(shuō)git的不足,結(jié)合項(xiàng)目經(jīng)歷,個(gè)人認(rèn)為最大的是兩點(diǎn),第一,圖形界面支持差,git本身是純命令行的,圖形化的界面也從來(lái)不是git的開(kāi)發(fā)目標(biāo)之一,所以雖然有第三方開(kāi)發(fā)了圖形界面支持,但這始終是git的短板;第二,git本身是不支持基于目錄的鑒權(quán)認(rèn)證的,我有碰到過(guò)幾個(gè)boss挺在意這個(gè)的,雖然也有插件能解決這個(gè)問(wèn)題,但我沒(méi)用過(guò)。git是linux之父專門為了linux內(nèi)核源碼而開(kāi)發(fā)設(shè)計(jì)的,人家不在意這兩點(diǎn),也完全可以理解。 選擇版本控制工具,要結(jié)合各方面的因素,我反正也見(jiàn)過(guò)一群中興出來(lái)開(kāi)公司的老古董,到今天都還在堅(jiān)持vss的。我只能說(shuō)git是我用下來(lái)感覺(jué)最方便,功能最強(qiáng)大的(本人開(kāi)發(fā)環(huán)境是純linux,寫代碼看代碼用vim,工作內(nèi)容有涉及跨平臺(tái),但vs之類的ide環(huán)境僅僅用來(lái)編譯一下而已)。如果你的項(xiàng)目很“l(fā)inux”的話,那我實(shí)在找不到不用git的理由。你只要想一想,天才如Linus者,會(huì)搞出個(gè)不如svn的東西來(lái)跟自己過(guò)不去么?
|
|
來(lái)自: NaturalWill > 《待分類1》