SVN與Git
本帖最后由 chelang 于 2020-2-22 15:50 編輯一、基本概念
1. SVN是Subversion的簡(jiǎn)稱,是一個(gè)開(kāi)放源代碼的版本控制系統(tǒng),相較于RCS、CVS,它采用了分支管理系統(tǒng),它的設(shè)計(jì)目標(biāo)就是取代CVS?;ヂ?lián)網(wǎng)上很多版本控制服務(wù)已從CVS遷移到Subversion。說(shuō)得簡(jiǎn)單一點(diǎn)SVN就是用于多個(gè)人共同開(kāi)發(fā)同一個(gè)項(xiàng)目,共用資源的目的。
2. Git是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),可以有效、高速的處理從很小到非常大的項(xiàng)目版本管理。 Git 是 Linus Torvalds 為了幫助管理 Linux 內(nèi)核開(kāi)發(fā)而開(kāi)發(fā)的一個(gè)開(kāi)放源碼的版本控制軟件。
Torvalds 開(kāi)始著手開(kāi)發(fā) Git 是為了作為一種過(guò)渡方案來(lái)替代 BitKeeper,后者之前一直是 Linux 內(nèi)核開(kāi)發(fā)人員在全球使用的主要源代碼工具。開(kāi)放源碼社區(qū)中的有些人覺(jué)得BitKeeper 的許可證并不適合開(kāi)放源碼社區(qū)的工作,因此 Torvalds 決定著手研究許可證更為靈活的版本控制系統(tǒng)。盡管最初 Git 的開(kāi)發(fā)是為了輔助 Linux 內(nèi)核開(kāi)發(fā)的過(guò)程,但是我們已經(jīng)發(fā)現(xiàn)在很多其他自由軟件項(xiàng)目中也使用了 Git。例如 很多 Freedesktop的項(xiàng)目遷移到了 Git 上。
二、兩者區(qū)別
1. git是分布式的,svn是集中式的
這是GIT和其它非分布式的版本控制系統(tǒng),例如SVN,CVS等,最核心的區(qū)別。好處是跟其他同事不會(huì)有太多的沖突,自己寫的代碼放在自己電腦上,一段時(shí)間后再提交、合并,也可以不用聯(lián)網(wǎng)在本地提交。
(1)集中式管理的工作流程如下:
集中式代碼管理的核心是服務(wù)器,所有開(kāi)發(fā)者在開(kāi)始新一天的工作之前必須從服務(wù)器獲取代碼,然后開(kāi)發(fā),最后解決沖突,提交。所有的版本信息都放在服務(wù)器上。如果脫離了服務(wù)器,開(kāi)發(fā)者基本上可以說(shuō)是無(wú)法工作的。下面舉例說(shuō)明:
開(kāi)始新一天的工作:
a. 從服務(wù)器下載項(xiàng)目組最新代碼。
b. 進(jìn)入自己的分支,進(jìn)行工作,每隔一個(gè)小時(shí)向服務(wù)器自己的分支提交一次代碼(很多人都有這個(gè)習(xí)慣。因?yàn)橛袝r(shí)候自己對(duì)代碼改來(lái)改去,最后又想還原到前一個(gè)小時(shí)的版本,或者看看前一個(gè)小時(shí)自己修改了哪些代碼,就需要這樣做了)。
c. 下班時(shí)間快到了,把自己的分支合并到服務(wù)器主分支上,一天的工作完成,并反映給服務(wù)器。
這就是經(jīng)典的svn工作流程,從流程上看,有不少缺點(diǎn),但也有優(yōu)點(diǎn)。
(2)分布式相比于集中式的最大區(qū)別在于開(kāi)發(fā)者可以提交到本地,每個(gè)開(kāi)發(fā)者通過(guò)克隆(git clone),在本地機(jī)器上拷貝一個(gè)完整的Git倉(cāng)庫(kù)。
2. git把內(nèi)容按元數(shù)據(jù)方式存儲(chǔ),而svn是按文件
所有的資源控 制系統(tǒng)都是把文件的元信息隱藏在一個(gè)類似.svn,.cvs等的文件夾里。如果你把.git目錄的體積大小跟.svn比較,你會(huì)發(fā)現(xiàn)它們差距很大。因 為,.git目錄是處于你的機(jī)器上的一個(gè)克隆版的版本庫(kù),它擁有中心版本庫(kù)上所有的東西,例如標(biāo)簽,分支,版本記錄等。
3. git的內(nèi)容完整性要優(yōu)于svn
GIT的內(nèi)容存儲(chǔ)使用的是SHA-1哈希算法。這能確保代碼內(nèi)容的完整性,確保在遇到磁盤故障和網(wǎng)絡(luò)問(wèn)題時(shí)降低對(duì)版本庫(kù)的破壞。
4.git 不需聯(lián)網(wǎng),svn 需要聯(lián)網(wǎng)操作
git下載下來(lái)后,在本地不必聯(lián)網(wǎng)就可以看到所有的log,很方便學(xué)習(xí);
svn卻需要聯(lián)網(wǎng),沒(méi)有網(wǎng)絡(luò)代碼沒(méi)辦法提交。
三、兩者優(yōu)缺點(diǎn)
1. Git:
(1)優(yōu)點(diǎn):
適合分布式開(kāi)發(fā),強(qiáng)調(diào)個(gè)體。
公共服務(wù)器壓力和數(shù)據(jù)量都不會(huì)太大。
速度快、靈活。
任意兩個(gè)開(kāi)發(fā)者之間可以很容易的解決沖突。
離線工作。
(2)缺點(diǎn):
資料少(起碼中文資料很少)。
學(xué)習(xí)周期相對(duì)而言比較長(zhǎng)。
不符合常規(guī)思維。
代碼保密性差,一旦開(kāi)發(fā)者把整個(gè)庫(kù)克隆下來(lái)就可以完全公開(kāi)所有代碼和版本信息。
2. SVN
(1)優(yōu)點(diǎn):
管理方便,邏輯明確,符合一般人思維習(xí)慣。
易于管理,集中式服務(wù)器更能保證安全性。
代碼一致性非常高。
適合開(kāi)發(fā)人數(shù)不多的項(xiàng)目開(kāi)發(fā)。
大部分軟件配置管理的大學(xué)教材都是使用svn和vss。
(2)缺點(diǎn):
服務(wù)器壓力太大,數(shù)據(jù)庫(kù)容量暴增。
如果不能連接到服務(wù)器上,基本上不可以工作,看上面第二步,如果服務(wù)器不能連接上,就不能提交,還原,對(duì)比等等。
不適合開(kāi)源開(kāi)發(fā)(開(kāi)發(fā)人數(shù)非常非常多,但是Google app engine就是用svn的),但是一般集中式管理的有非常明確的權(quán)限管理機(jī)制(例如分支訪問(wèn)限制),可以實(shí)現(xiàn)分層管理,從而很好的解決開(kāi)發(fā)人數(shù)眾多的問(wèn)題。
頁(yè):
[1]