首先說明,我沒看英文原版,因為就我目前來說,自認為沒這個需要了。好吧,我承認其實是犯懶。。。
1.git
是分布式的,
svn不是:
這一點絕對是最最關鍵的重點,與原作者不同,我要特別強調的是這一點對身處大陸的碼農們的重要性。為什麼?因為人家老外下全套
android
原始碼要幾個小時,而我們要十幾二十個小時,甚至好幾天,還會不停斷線!
分布式的最大好處,在於當你要切換不同的提交,不同的分支時,不再需要聯網。試想一下,要是
的android
原始碼用svn
(這個是純假設,實際上是完全不可行的,後面會提到),本來在大陸下一次**就夠慢的了,要是每天再切個幾次分支和提交,那就別活了。所以在這一點上,我不說
git完爆
svn,應該說是分布式完爆非分布式。
2.
git把內容按元資料方式儲存,而
svn是按檔案:
說實話,我沒看出來原文列第二點出來是為了說明什麼。這確實是個區別,但一般使用者是不需要了解的。
git還是svn
,都是挺讓人感到頭疼的,兩者對衝突的解決辦法也是差不多的。個人見解,衝突是靠良好的團隊管理和專案分工來盡力避免的,但真發生了,解決起來都差不多,也沒見哪個版本控制系統是以解決衝突效率高作為賣點的。當然不存在衝突的版本管理系統也有,
vss嘛,往前推個
10年,中興全公司都在用呢,呵呵~
3.
git分支和
svn的分支不同:
分支確實是乙個重點,只不過原文沒說到點子上,不過看文章是挺久之前的,可能那時候
git還沒現在這麼普及(當然現在國內也未必有多普及),也情有可原吧。
這裡我就說最關鍵的一點,你可以看完整的
android
**,如果沒有,可以用
git clone
個linux
的完整**庫,然後用
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就脫穎而出了。這也是為什麼
android
、linux
用不了svn
的原因。至於說
svn的
commit
是一種主動責任,稍微用點腦子想想,可能存在乙個版本控制系統,不需要程式設計師承擔所謂的主動責任麼?無非在
vss裡面,是
checkout/checkin
,在svn
裡面是commit
,git
又把svn
的commit
拆分成了
commit
和push
最後說說
git的不足,結合專案經歷,個人認為最大的是兩點,第一,圖形介面支援差,
git本身是純命令列的,圖形化的介面也從來不是
git的開發目標之一,所以雖然有第三方開發了圖形介面支援,但這始終是
git的短板;第二,
git本身是不支援基於目錄的鑑權認證的,我有碰到過幾個
boss
挺在意這個的,雖然也有外掛程式能解決這個問題,但我沒用過。
git是
linux
之父專門為了
linux
核心原始碼而開發設計的,人家不在意這兩點,也完全可以理解。
選擇版本控制工具,要結合各方面的因素,我反正也見過一群中興出來開公司的老古董,到今天都還在堅持
vss的。我只能說
git是我用下來感覺最方便,功能最強大的(本人開發環境是純
linux
,寫**看**用
vim,工作內容有涉及跨平台,但
vs之類的
ide環境僅僅用來編譯一下而已)。如果你的專案很
「linux」
的話,那我實在找不到不用
git的理由。你只要想一想,天才如
linus
者,會搞出個不如
svn的東西來跟自己過不去麼?
GIT和SVN之間的五個基本區別
果你在讀這篇文章,說明你跟大多數開發者一樣對 git感興趣,如果你還沒有機會來試一試git,我想現在你就要了解它了。git不僅僅是個版本控制系統,它也是個內容管理系統 cms 工作管理系統等。如果你是乙個具有使用svn背景的人,你需要做一定的思想轉換,來適應git提供的一些概念和特徵。所以,這篇文章...
GIT和SVN之間的五個基本區別
如果你在讀這篇文章,說明你跟大多數開發者一樣對git感興趣,如果你還沒有機會來試一試git,我想現在你就要了解它了。git不僅僅是個版本控制系統,它也是個內容管理系統 cms 工作管理系統等。如果你是乙個具有使用svn背景的人,你需要做一定的思想轉換,來適應git提供的一些概念和特徵。所以,這篇文章...
GIT和SVN之間的五個基本區別
如果你在讀這篇文章,說明你跟大多數開發者一樣對git感興趣,如果你還沒有機會來試一試git,我想現在你就要了解它了。git不僅僅是個版本控制系統,它也是個內容管理系統 cms 工作管理系統等。如果你是乙個具有使用svn背景的人,你需要做一定的思想轉換,來適應git提供的一些概念和特徵。所以,這篇文章...