評《GIT和SVN之間的五個基本區別》


原文連接http://www.oschina.net/news/12542/git-and-svn,首先說明,我沒看英文原版,由於就我目前來講,自認爲沒這個須要了。好吧,我認可實際上是犯懶。。。linux

下面我結合自身體會,逐條評論一下:
android

1.GIT是分佈式的,SVN不是:git

這一點絕對是最最關鍵的重點,與原做者不一樣,我要特別強調的是這一點對身處大陸的碼農們的重要性。爲何?由於人家老外下全套android源碼要幾個小時,而咱們要十幾二十個小時,甚至好幾天,還會不停斷線!程序員

分佈式的最大好處,在於當你要切換不一樣的提交,不一樣的分支時,再也不須要聯網。試想一下,要是googleandroid源碼用svn(這個是純假設,其實是徹底不可行的,後面會提到),原本在大陸下一次代碼就夠慢的了,要是天天再切個幾回分支和提交,那就別活了。因此在這一點上,我不說git完爆svn,應該說是分佈式完爆非分佈式。vim

2. GIT把內容按元數據方式存儲,而SVN是按文件:服務器

說實話,我沒看出來原文列第二點出來是爲了說明什麼。這確實是個區別,但通常用戶是不須要了解的。分佈式

看到評論中有人提到了提交衝突的問題。真發生了大規模衝突,無論git仍是svn,都是挺讓人感到頭疼的,二者對衝突的解決辦法也是差很少的。我的看法,衝突是靠良好的團隊管理和項目分工來盡力避免的,但真發生了,解決起來都差很少,也沒見哪一個版本控制系統是以解決衝突效率高做爲賣點的。固然不存在衝突的版本管理系統也有,VSS嘛,往前推個10年,中興全公司都在用呢,呵呵~ide

3. GIT分支和SVN的分支不一樣:svn

分支確實是一個重點,只不過原文沒說到點子上,不過看文章是挺久以前的,可能那時候git還沒如今這麼普及(固然如今國內也未必有多普及),也情有可原吧。工具

這裏我就說最關鍵的一點,你能夠看完整的android代碼,若是沒有,能夠用git clonelinux的完整代碼庫,而後用git branch -r命令看看,你會發現有幾十個甚至近百個分支,若是你只用svn的話,你必定徹底沒法想象。但這就是git分支的優點,由於git是基於差別來管理分支的,其分支的代價極小,再結合第一點,因此其切換分支也極爲方便和快捷。這一點上我認爲git是優於svn的,之因此我不說完爆,是由於這一點要結合項目需求,你的項目不是android,不是linux,沒有大量分支並行開發、合併的需求,其實用svn也是能夠的。但用git,你能夠爲一個單獨的小功能拉分支,爲一輪完整的測試拉分支,爲你的每個客戶單獨拉分支,等等等等,基本上是想拉就拉,這一點svn應該是比不上的。

至於原文提到的合沒合併的問題,svn我不經常使用,git下用git log命令,加上--graph參數,再配合--oneline--color,我以爲是很方便直觀的。

4. GIT沒有一個全局的版本號,而SVN有:

原文認可這一點不如svn,我也認可,但要補充說明一下,git每次提交產生的40位(160bit)哈希值,是徹底能夠等同於svn全局id的做用的,之因此說不如,只是由於很差記而已。

5. GIT的內容完整性要優於SVN

完整性這一點git要優於svn這是事實,雖然我我的不論git仍是svn,都沒碰到過這類問題。

反正對於git,每一個克隆都是個完整的庫,只要有一個克隆在,服務器被雷劈了都不怕,有點狡兔三窟的味道。固然,我這裏說的跟原文說的已經不是一回事了。

 

看到有評論說git鼓勵人們拉分支,這徹底就是本末倒置了。事實是,git在分支這一點上優點巨大,因此當項目有大量分支的需求時,天然git就脫穎而出了。這也是爲何androidlinux用不了svn的緣由。至於說svncommit是一種主動責任,稍微用點腦子想一想,可能存在一個版本控制系統,不須要程序員承擔所謂的主動責任麼?無非在VSS裏面,是checkout/checkin,在svn裏面是commitgit又把svncommit拆分紅了commitpush兩步而已。該評論實在是過於主觀,誤導傾向過重。

最後說說git的不足,結合項目經歷,我的認爲最大的是兩點,第一,圖形界面支持差,git自己是純命令行的,圖形化的界面也歷來不是git的開發目標之一,因此雖然有第三方開發了圖形界面支持,但這始終是git的短板;第二,git自己是不支持基於目錄的鑑權認證的,我有碰到過幾個boss挺在乎這個的,雖然也有插件能解決這個問題,但我沒用過。gitlinux之父專門爲了linux內核源碼而開發設計的,人家不在乎這兩點,也徹底能夠理解。

選擇版本控制工具,要結合各方面的因素,我反正也見過一羣中興出來開公司的老古董,到今天都還在堅持vss的。我只能說git是我用下來感受最方便,功能最強大的(本人開發環境是純linux,寫代碼看代碼用vim,工做內容有涉及跨平臺,但vs之類的ide環境僅僅用來編譯一下而已)。若是你的項目很「linux」的話,那我實在找不到不用git的理由。你只要想想,天才如Linus者,會搞出個不如svn的東西來跟本身過不去麼?

相關文章
相關標籤/搜索