網(wǎng)上有很多關(guān)于 SVN 和 Git 的比較,但是大多數(shù)都是錯誤的,誤解的。
國內(nèi)外都沒有一個好的 SVN 倉庫,最近我自己做了一個出來,自認(rèn)為是市面最好的:SVNBucket?
但是引來了很多 Git 用戶的不屑、瞧不起、過時?
下面給大家列出來一些常見的誤解和真相,雖然這并不能說明哪個系統(tǒng)更好,但是可以幫助你更好的理解兩個系統(tǒng)之間的差異?
1.同樣的內(nèi)容,Git 倉庫遠(yuǎn)比 SVN 的小
錯誤:他們的存儲機(jī)制實(shí)際上是一樣的,所以相差非常小。例外的是二進(jìn)制文件,SVN 反而會遠(yuǎn)比 Git 占用的小,因?yàn)?SVN 對二進(jìn)制文件也能進(jìn)行差異存儲。
2.SVN 創(chuàng)建分支代價非常昂貴。
錯誤:很多人認(rèn)為 SVN 創(chuàng)建分支是復(fù)制整套代碼,代價很大。實(shí)際上從 1.0 版本開始,在 SVN 里創(chuàng)建分支的代價已經(jīng)非常非常小,你可以任意創(chuàng)建分支來修復(fù)一個小 BUG 或者開發(fā)新的功能
3.合并分支時需要指定版本號范圍
錯誤:這是一個過時的誤解,從 1.5 開始就不需要手工指定合并的版本號范圍了,更強(qiáng)大的是從 1.8 版本,還提供了自動合并的功能,大大方便了分支之間的代碼合并。
4.SVN 需要在每個目錄下都創(chuàng)建一個.svn 的目錄
錯誤:從 1.7 版本開始,已經(jīng)變?yōu)橹辉诟夸洿嬖?svn 目錄了。
5.沒有人再使用 SVN 了
錯誤:像 FreeBSD 和 LLVM 這種有名的開源項目都還在使用 SVN。實(shí)際上,有 47%的開源項目都在使用 SVN,然而使用 Git 的只有 38%。在公司層面就更多使用 SVN 的了,因?yàn)?SVN 是真正的標(biāo)準(zhǔn)企業(yè)級版本控制系統(tǒng)。
6.分布式的 Git 比集中式的 SVN 更優(yōu)越
錯誤:他們是平等的。分布式只是實(shí)現(xiàn)版本控制的另外一種方法。集中式和分布式兩種方法都有他們的正反兩面,分布式或許適合某些人,但是他也帶來了某些問題,比如:沒有權(quán)限控制;每個人都需要完全 clone 整個倉庫,沒法像 SVN 可以只 checkout 需要的子目錄;沒法鎖定文件等等問題
7.Git 很適合大項目,SVN 不行
錯誤:在 Git 里每個人都需要把整個倉庫都 clone 下來,2G 的倉庫或許沒什么問題,但是到達(dá)幾百 G 后呢?你需要 clone 幾百 G 的內(nèi)容,想想多可怕。有個經(jīng)典的解決方式就是把 Git 倉庫分為多個小的倉庫,但是這就導(dǎo)致了其他幾個問題:你需要管理多個倉庫;破壞了原有項目的完整性;沒法繼續(xù)跟他們一起使用分支;
8.Git 適合大團(tuán)隊
錯誤:某些工作流適合使用 Git,但是某些情況適合使用 SVN
9.在 SVN 里,合并總是個痛苦的事
錯誤:SVN 已經(jīng)能很好的處理合并和沖突,已經(jīng)成為他很重要的一個功能特性。只有在分支里重命名了文件夾或者文件時會有這種情況,這是個歷史遺留問題。
10.Git 有靈活強(qiáng)大的命令行操作
正確:Git 的設(shè)計初衷就是一套低級版本控制系統(tǒng),允許高級用戶通過命令玩一些黑科技,但是這并不安全,對初學(xué)者也不友好。Git 也因?yàn)闆]有良好的設(shè)計和混亂的命令受到了一些指責(zé):這導(dǎo)致加長了學(xué)習(xí)曲線和大大增加了公司和團(tuán)隊的成本,特別是大型團(tuán)隊以及團(tuán)隊成員水平不一的情況。比如美術(shù)、策劃、開發(fā)、這類人員,技術(shù)水平線不一。
11.Git 的歷史記錄不安全
正確:Git 的官方描述是“笨笨的內(nèi)容跟蹤”,它并不關(guān)心你整個倉庫歷史的完整性和精確性,這導(dǎo)致了重命名和 git rebase 這類操作很難跟蹤他們的修改記錄。相反 SVN 始終都可以精確的、完整的找到你需要的變動記錄。
12.Git 無法提供細(xì)顆粒的權(quán)限控制
正確:因?yàn)?Git 分布式的原因,每個人都擁有完整的倉庫代碼,導(dǎo)致每個人都有完整權(quán)限看到所有的內(nèi)容。雖然這樣對于開源項目來說沒什么,但是對于企業(yè)來說,這是不可接受的。相反,SVN 可以設(shè)置目錄級別的權(quán)限控制,你可以設(shè)置他只讀或者讀寫,而且非常適合大型項目。
13.Git 對二進(jìn)制文件存儲不友好
正確:Git 因?yàn)榉植际皆?,無法很好的處理二進(jìn)制文件,他是基于復(fù)制模式來管理的,所以并不適合有很多二進(jìn)制文件的項目,比如圖片多的項目。
* 翻譯來自:svnvsgit
* 如有翻譯錯誤歡迎指正
* 希望給那些對 SVN 有誤解的朋友一個參考。
* 理性的認(rèn)識兩個不同的工具,合適的使用不同的工具,他們之間沒有誰更好,只有誰更合適。