02 SVN 与 Git 的优缺点
上一篇博客大致聊了聊關(guān)于版本控制系統(tǒng)的周邊,這一篇我們就來繼續(xù)嘮嘮作為近年來最受歡迎的兩個(gè)版本控制系統(tǒng)的優(yōu)缺點(diǎn)吧。
聊優(yōu)缺點(diǎn)之前,先簡單了解一下這兩個(gè)這兩個(gè)版本控制系統(tǒng)好了:
關(guān)于 SVN
SVN 概述
SVN 毫無疑問是一個(gè)縮寫,它的全稱是:Subversion,名字源于創(chuàng)作者之一的 Ben Collins-Sussman ,中文釋義:“顛覆”,意為顛覆 CVS 的版本。
SVN 是 CollabNet 于 2000 年創(chuàng)建的開源項(xiàng)目,創(chuàng)作初衷是為了對當(dāng)時(shí)最受歡迎的版本控制系統(tǒng) CVS 進(jìn)行修正和補(bǔ)充。
在2000年2月項(xiàng)目創(chuàng)建之初他們就愉快地聯(lián)系上了 CVS 的“親媽”——Open Source Development with CVS(Coriolis, 1999)的作者 Karl Fogel,邀請他一同為這個(gè)新項(xiàng)目工作,而 Karl 本人也因在使用 CVS 時(shí)受到束縛而在考慮如何改進(jìn)創(chuàng)新,故此一拍即合,欣然拉著和他有相同想法的朋友—— Ben Collins-Sussman ,一起參與了 SVN 的開發(fā)工作。
由于初衷是對 CVS 的修復(fù)與補(bǔ)充,故此 SVN 保留著與 CVS 相同的開發(fā)模型,使得 CVS 的用戶可以不費(fèi)什么力氣地從 CVS 轉(zhuǎn)換至 SVN 。
SVN 的工作流程
和 CVS 一樣 SVN 是集中式版本控制系統(tǒng),其核心在于版本庫只在中央服務(wù)器上,所有想要獲取、想要更改其內(nèi)容的人都必須通過互聯(lián)網(wǎng)的途徑連接中央倉庫。
言語太過蒼白,直接上圖吧:
由上圖可以清晰地感受到,實(shí)際上中央版本庫就是一個(gè)大型的“資源共享場地”或者說是一個(gè)“情報(bào)局”——如果把提交上去的項(xiàng)目看作情報(bào)或者資源的話。
舉個(gè)栗子:
如果把一個(gè)放進(jìn) SVN 的公司項(xiàng)目比作一個(gè)"情報(bào)局",那么每一個(gè)參與這個(gè)項(xiàng)目的人都是可以從這個(gè)“情報(bào)局”獲取情報(bào)的成員,
每一個(gè)成員獲取或是更改“情報(bào)”都必須在“情報(bào)局”全方位觀測的情況下——獲取或更改等操作必須全程聯(lián)網(wǎng)。
不同的成員能獲取到的“情報(bào)內(nèi)容”有所不同——因?yàn)?SVN 有權(quán)限管理,但只能根據(jù)“情報(bào)類型”——只能設(shè)置目錄的訪問權(quán)限,不能設(shè)置單個(gè)文件的訪問權(quán)限。
如果多個(gè)成員都在更改同一則“情報(bào)”,大多數(shù)情況下都需要拼手速,要是有人先一步將自己更改過的“情報(bào)”上交,那后面的人就只會被無情地阻擋。若想繼續(xù)將自己更改內(nèi)容提交,只能先獲取已被更改過的“情報(bào)”,再更改自己想更改的內(nèi)容,進(jìn)一步提交。要是此時(shí)又有人捷足先登,那只能苦逼地繼續(xù)先獲取再更改了。
“情報(bào)局”也為提供“情報(bào)”的成員設(shè)立單人間,成員可以將自己要更改的“情報(bào)”帶進(jìn)單人間進(jìn)行操作,更改之后再將“情報(bào)”帶出來上交,完美地解決了拼手速的問題——文件鎖。
事實(shí)上,光是有“單間”是遠(yuǎn)遠(yuǎn)不夠的。文件鎖同樣存在著很大一部分問題:比如加鎖的人改完文件忘解鎖了;比如雖然想改的是同一個(gè)文件,但相互之間互不干擾,本可以并行的,加了鎖無法并行,降低了效率;比如因?yàn)槲募i的存在給人一種安全的錯覺,所以更改的時(shí)候并沒有事先商量,結(jié)果雖然改的是不同的文件,但文件間相互關(guān)聯(lián),修改的內(nèi)容在語義上并不兼容,再提交……哦,那畫面太美我不敢想。
所以 SVN 又提出了另一解決方案——“復(fù)制-修改-合并方案”——每一個(gè)用戶的客戶端都與倉庫通信,在本地創(chuàng)建一份私有的工作副本,然后用戶可以同時(shí)地互不干擾地修改自己的私有副本,最后將私有副本合并為一個(gè)新的最終版本,當(dāng)然, SVN 會提供合并操作,但歸根結(jié)底,必須由用戶自己來確保合并的結(jié)果是正確的。
沿用上面那個(gè)例子就是:如果有多個(gè)成員對同一份“情報(bào)”有異議想更改,那么“情報(bào)局”就會讓你們各自將“情報(bào)”復(fù)制一份,自己拿去修改,修改完上交“情報(bào)局”,“情報(bào)局”也會幫忙把這幾份修改過的“情報(bào)”統(tǒng)籌之后收錄為新版本,但“情報(bào)局”并不能保證它統(tǒng)籌過后的“情報(bào)”是否準(zhǔn)確,需要成員們自行去確認(rèn)或修正“情報(bào)”的準(zhǔn)確性。
這個(gè)“復(fù)制-修改-合并方案”是不是很耳熟?ε=(′ο`*)))唉,人類的發(fā)展就是一個(gè)相互借鑒、相互成長的過程吶。
SVN的特點(diǎn):
關(guān)于Git
Git概述
創(chuàng)建 Git 的大神曾自嘲自己編輯的這個(gè)版本控制系統(tǒng)為”愚蠢的內(nèi)容跟蹤器“。
與 SVN 不同 Git 最初的開發(fā)動力來自于 BitKeeper 和 Monotone ,起因是 Linux 之父 Linus Torvalds 在 2002年決定啟用 BitKeeper 來作為 Linux 內(nèi)核的版本控制系統(tǒng)。雖然 BitKeeper 不是開源項(xiàng)目引起了社區(qū)內(nèi)一些人的不滿,但人家愿意為 Linux 提供免費(fèi)的服務(wù)(免費(fèi)的多香啊),所以還是有驚無險(xiǎn)地度過了兩三年時(shí)光;直到 Linux 社區(qū)中有人試圖用自己的代碼自行連接 BitKeeper 的存儲庫,還被發(fā)現(xiàn)了……
道歉是不可能道歉的,所以 BitMover 關(guān)停了 BitKeeper 對 Linux 的免費(fèi)支持,所以本來也有此意向的 Linux 之父用 C 語言開啟了他為期十天的 Git 創(chuàng)作,然后 Git 誕生了。
Git 最初版本發(fā)布于2005年7月11號,作為 Linux 內(nèi)核主要的版本控制系統(tǒng),它也是一個(gè)開源項(xiàng)目。與 CVS 和 SVN 這類集中式版本控制系統(tǒng)不同,它采用分布式版本庫的方法,使源代碼的發(fā)布和交流及其方便。
同時(shí),Git 本著開源自由的主義精神,并沒有對版本庫的瀏覽和修改做任何的權(quán)限限制,通過其他工具也能夠達(dá)到有限的權(quán)限控制。得益于此,Git 不再局限于原來的活動范圍—— Linux 和 Unix,為廣大Windows用戶帶來了福音。
Git工作流程
git 是分布式的版本控制系統(tǒng),它由公共版本庫和本地版本庫組成,將項(xiàng)目主題存放在公共版本庫中,每個(gè)開發(fā)者都可以通過克隆,在本地機(jī)器上拷貝出一個(gè)完整的Git倉庫。
沒找著可以用的圖,手殘換了一張,將就看吧,大概就這個(gè)意思
公共版本庫可以放在服務(wù)器上、放在網(wǎng)站上、放在任一本地機(jī)器上都可以。需要進(jìn)行操作時(shí),先從公共版本庫中拉取最新版本到本地,然后再進(jìn)行修改,如果沒有網(wǎng)的情況下也可以先進(jìn)行修改,提交到本地倉庫,等有網(wǎng)的時(shí)候再進(jìn)行拉取,推送等操作。
因?yàn)槊恳粋€(gè)本地庫都有完整的git倉庫,且編輯的時(shí)候都在本地進(jìn)行的,所以也就不會存在需要拼手速搶著提交的問題。但是,每一推送前最好都拉取一遍,防止你在編輯的過程中有人向公共版本庫推送了他自己的修改,如果對方修改的內(nèi)容與你修改的內(nèi)容不沖突,那么直接推送是沒有問題的, Git 有相應(yīng)的合并操作;要是對方修改的內(nèi)容與你改的內(nèi)容有沖突, Git 也提供了相應(yīng)的工具(resolve)去供開發(fā)者們手動調(diào)解沖突。沖突調(diào)解完成后,就可以繼續(xù)推送了。
這一步操作是不是很眼熟?是的,這就是前面借鑒的對象。
Git的特點(diǎn):
SVN 與 Git 各自的優(yōu)劣
前面描述他們的時(shí)候,也大致聊了聊我所了解到的他們各自的特點(diǎn),這里也聊聊他們各自的優(yōu)勢、劣勢吧。
SVN 的優(yōu)勢:
SVN 的劣勢:
Git的優(yōu)勢:
Git的劣勢:
大致就這些吧,可能還不是很詳細(xì),原本也沒想到會整理那么久,頭都要大了。要是還有不全的,就交給未來的自己補(bǔ)充吧,下面是我在整理學(xué)習(xí)的時(shí)候參看的內(nèi)容。大佬們寫的也都很詳細(xì),很不錯,要是看完上面還不懂的話,不要猶豫,順著網(wǎng)線通過鏈接去膜拜大佬吧。
麻煩轉(zhuǎn)載引用的一定要標(biāo)注來源呀。
參考資料(排名不分先后)
Subversion - 維基百科,自由的百科全書 (wikipedia.org)
git - 維基百科,自由的百科全書 (wikipedia.org)
林納斯·托瓦茲 - 維基百科,自由的百科全書 (wikipedia.org)
subversion_百度百科 (baidu.com)
Subversion 版本控制-中文幫助文檔[加鎖-修改-解鎖 解決方案] (red-bean.com)
關(guān)于 - git (git-scm.com)
GIT(分布式版本控制系統(tǒng))_百度百科 (baidu.com)
Svn和Git的一次詳細(xì)對比 - ic翼 (bingyishow.top)
Git和SVN的區(qū)別 - 慕塵 - 博客園 (cnblogs.com)
對比 Git 與 SVN,這篇講的很易懂 - SegmentFault 思否
SVN與Git比較的優(yōu)缺點(diǎn)差異 - Tse先生 - 博客園 (cnblogs.com)
版本控制工具 - git和svn(優(yōu)缺點(diǎn)對比) - 程序員大本營 (pianshen.com)
總結(jié)
以上是生活随笔為你收集整理的02 SVN 与 Git 的优缺点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高中辍学,三年间做遍各种零工,转行程序员
- 下一篇: echarts饼图直观显示数值最实用的方