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