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