大家好,我是IT修真院深圳分院第3期的學(xué)員,一枚正直純潔善良的前端程序員,今天給大家分享一下,修真院官網(wǎng)前端工程師深度思考中的知識(shí)點(diǎn)——SVN和Git有什么區(qū)別? webstorm怎樣配置svn?
一.背景介紹
為什么要說(shuō)這兩款軟件的區(qū)別?
這兩款版本控制軟件應(yīng)該是現(xiàn)在最流行的版本控制軟件。我們?cè)谧鋈蝿?wù)做項(xiàng)目的時(shí)候,特別強(qiáng)調(diào)要學(xué)習(xí)使用這兩款軟件。
如果是一個(gè)人做項(xiàng)目、任務(wù),很難有機(jī)會(huì)充分感受到它們的優(yōu)點(diǎn)和坑點(diǎn)。(git還是能感受到)。
多人合作開(kāi)發(fā),由于項(xiàng)目的復(fù)雜性,一個(gè)模塊或者一個(gè)文件可能需要多人同時(shí)編寫(xiě),這時(shí)就能體現(xiàn)出版本控制軟件的強(qiáng)大與適用。
無(wú)論是有新需求、bug、文件沖突還是安全性等問(wèn)題,它們都可以很好的協(xié)助我們進(jìn)行解決。
二.知識(shí)剖析
簡(jiǎn)要介紹一下SVN和GIT
細(xì)數(shù)版本控制軟件,多達(dá)十幾種,像VSS、CVS、ClearCase、PVCS等等這些我這個(gè)菜雞聽(tīng)都沒(méi)聽(tīng)說(shuō)過(guò)的軟件也曾經(jīng)有過(guò)很多用戶(hù)。
游戲公司用Perforce比較多,似乎是因?yàn)樵诙M(jìn)制文件的支持和大文件存儲(chǔ)上,Perforce占優(yōu)。
而在開(kāi)發(fā)者眼中似乎只存在SVN和GIT的存在,為什么呢?
因?yàn)樗鼈兪情_(kāi)源免費(fèi)的??!
SVN介紹
SVN是Subversion的簡(jiǎn)稱(chēng),是一個(gè)開(kāi)源代碼集中的版本控制系統(tǒng),支持大多數(shù)常見(jiàn)的操作系統(tǒng)。作為一個(gè)開(kāi)源的版
本控制系統(tǒng),Subversion管理著隨時(shí)間改變的數(shù)據(jù)。這些數(shù)據(jù)集中放置在一個(gè)中央資料檔案庫(kù)中。這個(gè)檔案庫(kù)很像
一個(gè)普通的文件服務(wù)器,它會(huì)記住每一次文件的變動(dòng)。這樣你就可以把檔案恢復(fù)到舊的版本,或是瀏覽文件的變動(dòng)歷
史。Subversion是一個(gè)通用的系統(tǒng),可用來(lái)管理任何類(lèi)型的文件,其中包括了程序源碼。
集中式代碼管理

集中式代碼管理的核心是服務(wù)器,所有開(kāi)發(fā)者在開(kāi)始新一天的工作之前從服務(wù)器獲取代碼,然后開(kāi)發(fā),最后解決沖突,提交。所有的版本信息都放在服務(wù)器上。如果脫離了服務(wù)器,開(kāi)發(fā)者基本上可以說(shuō)是無(wú)法工作的。下面舉例說(shuō)明:
開(kāi)始新一天的工作:
1、從服務(wù)器下載項(xiàng)目組最新代碼。
2、進(jìn)入自己的分支,進(jìn)行工作,每隔一個(gè)小時(shí)向服務(wù)器自己的分支提交一次代碼(很多人都有這個(gè)習(xí)慣。因?yàn)橛袝r(shí)候自己對(duì)代碼改來(lái)改去,最后又想還原到前一個(gè)小時(shí)的版本,或者看看前一個(gè)小時(shí)自己修改了哪些代碼)。
3、下班時(shí)間快到了,把自己的分支合并到服務(wù)器主分支上,一天的工作完成,并反映給服務(wù)器.
Git介紹
Git是開(kāi)源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或小或大的項(xiàng)目。分布式相比于集中式的最大區(qū)別在
于開(kāi)發(fā)者可以提交到本地,每個(gè)開(kāi)發(fā)者通過(guò)克?。╣it clone),在本地機(jī)器上拷貝一個(gè)完整的Git倉(cāng)庫(kù).

分布式代碼管理
分布式版本控制系統(tǒng)根本沒(méi)有“中央服務(wù)器”,每個(gè)人的電腦上都是一個(gè)完整的版本庫(kù)服務(wù)器。工作的時(shí)候,就不需
要聯(lián)網(wǎng)了,因?yàn)榘姹編?kù)就在你自己的電腦上。既然每個(gè)人電腦上都有一個(gè)完整的版本庫(kù),那多個(gè)人如何協(xié)作呢?
比方說(shuō)你在自己電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時(shí),你們倆之間只需把各自的修改推
送給對(duì)方,就可以互相看到對(duì)方的修改了。
三.常見(jiàn)問(wèn)題
1.SVN和Git有什么區(qū)別?
2.webstorm怎樣配置svn?
四.解決方案
SVN和Git有什么區(qū)別?
1、集中式、分布式
1.1、SVN屬于集中化的版本控制系統(tǒng),有個(gè)不太精確的比喻:SVN = 版本控制+ 備份服務(wù)器
SVN使用起來(lái)有點(diǎn)像是檔案?jìng)}庫(kù)的感覺(jué),支持并行讀寫(xiě)文件,支持代碼的版本化管理,功能包括取出、導(dǎo)入、更新、分支、改名、還原、合并等。Git是一個(gè)分布式版本控制系統(tǒng),操作命令包括:clone,pull,push,branch,merge ,rebase,Git擅長(zhǎng)的是程序代碼的版本化管理。
1.2、GIT跟SVN一樣有自己的集中式版本庫(kù)或服務(wù)器。
但GIT更傾向于被使用于分布式模式,也就是每個(gè)開(kāi)發(fā)人員從中心版本庫(kù)/服務(wù)器上check out代碼后會(huì)在自己的機(jī)器上克隆一個(gè)自己的版本庫(kù)。可以這樣說(shuō),如果你被困在一個(gè)不能連接網(wǎng)絡(luò)的地方時(shí),你仍然能夠提交文件,查看歷史版本記錄,創(chuàng)建項(xiàng)目分支,對(duì)一些人來(lái)說(shuō),這好像沒(méi)多大用處,但當(dāng)你突然遇到?jīng)]有
2、版本庫(kù)與工作區(qū)
2.1、Subversion的工作區(qū)和版本庫(kù)是截然分開(kāi)的
Subversion 的工作區(qū)和版本庫(kù)物理上分開(kāi):Subversion的版本庫(kù)和工作區(qū)是存儲(chǔ)在不同路徑下,一般是在不同的主機(jī)中,Subversion的企業(yè)級(jí)部署中,版本庫(kù)在服務(wù)器上,只能通過(guò) https, http, svn 等協(xié)議訪問(wèn),而不能直接被用戶(hù)接觸到。
2.2、Git的工作區(qū)和版本庫(kù)是如影隨形的。
Git 的版本庫(kù)和工作區(qū)在同一個(gè)目錄下,工作區(qū)的根目錄有一個(gè).git的子目錄,這個(gè)名為 .git的目錄就是版本庫(kù)本身,它是Git 用來(lái)保存元數(shù)據(jù)和對(duì)象數(shù)據(jù)庫(kù)的地方。該目錄非常重要,每次克隆鏡像倉(cāng)庫(kù)的時(shí)候,實(shí)際拷貝的就是這個(gè)目錄里面的數(shù)據(jù)。所以千萬(wàn)要小心刪除這個(gè)文件。
3、分支管理
3.1、SVN,分支是一個(gè)完整的目錄。且這個(gè)目錄擁有完整的實(shí)際文件。如果工作成員想要開(kāi)啟新的分支,那將會(huì)影響“全世界”!每個(gè)人都會(huì)擁有和你一樣的分支。如果你的分支是用來(lái)進(jìn)行破壞工作(安檢測(cè)試),那將會(huì)像傳染病一樣,你改一個(gè)分支,還得讓其他人重新切分支重新下載,十分狗血。
3.2、 Git,每個(gè)工作成員可以任意在自己的本地版本庫(kù)開(kāi)啟無(wú)限個(gè)分支。舉例:當(dāng)我想嘗試破壞自己的程序(安檢測(cè)試),并且想保留這些被修改的文件供日后使用, 我可以開(kāi)一個(gè)分支,做我喜歡的事。完全不需擔(dān)心妨礙其他工作成員。只要我不合并及提交到主要版本庫(kù),沒(méi)有一個(gè)工作成員會(huì)被影響。等到我不需要這個(gè)分支時(shí), 我只要把它從我的本地版本庫(kù)刪除即可。無(wú)痛無(wú)癢。
3.3、 Git里分支的切換比SVN方便很多。Git的分支名是可以使用不同名字的。例如:我的本地分支名為OK,而在主要版本庫(kù)的名字其實(shí)是master。最值得一提,我可以在Git的任意一個(gè)提交點(diǎn)(commit point)開(kāi)啟分支!所以不要吝嗇開(kāi)分支,git開(kāi)分支的代價(jià)很小。(其中一個(gè)方法是使用gitk –all 可觀察整個(gè)提交記錄,然后在任意點(diǎn)開(kāi)啟分支。)
4、權(quán)限管理
.Subversion通過(guò)對(duì)文件目錄授權(quán)來(lái)實(shí)現(xiàn)權(quán)限管理,子目錄默認(rèn)繼承父目錄的權(quán)限。但是也有缺憾,即權(quán)限不能在分支中繼承,不能對(duì)單個(gè)文件授權(quán)。例如為 /trunk及其子目錄的授權(quán),不能繼承到分支或者標(biāo)簽中相應(yīng)的目錄下。
Git 的授權(quán)做不到Subversion那樣精細(xì)。Git的授權(quán)模型只能實(shí)現(xiàn)非零即壹式的授權(quán),要么擁有全部的寫(xiě)權(quán)限,要么沒(méi)有寫(xiě)權(quán)限,要么擁有整個(gè)版本庫(kù)的讀權(quán)限,要么禁用。
5、存儲(chǔ)方式
GIT的內(nèi)容完整性要優(yōu)于SVN:GIT的內(nèi)容存儲(chǔ)使用的是SHA-1哈希算法。這能確保代碼內(nèi)容的完整性,確保在遇到磁盤(pán)故障和網(wǎng)絡(luò)問(wèn)題時(shí)降低對(duì)版本庫(kù)的破壞。
優(yōu)缺點(diǎn)比較
????????? SVN優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1、 管理方便,邏輯明確,符合一般人思維習(xí)慣。
2、 易于管理,集中式服務(wù)器更能保證安全性。
3、 代碼一致性非常高。
4、 適合開(kāi)發(fā)人數(shù)不多的項(xiàng)目開(kāi)發(fā)。
缺點(diǎn):
1、 服務(wù)器壓力太大,數(shù)據(jù)庫(kù)容量暴增。
2、 如果不能連接到服務(wù)器上,基本上不可以工作,看上面第二步,如果服務(wù)器不能連接上,就不能提交,還原,對(duì)比等等。
3、 不適合開(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)題。
? ? ? Git優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1、適合分布式開(kāi)發(fā),強(qiáng)調(diào)個(gè)體。
2、公共服務(wù)器壓力和數(shù)據(jù)量都不會(huì)太大。
3、速度快、靈活。
4、任意兩個(gè)開(kāi)發(fā)者之間可以很容易的解決沖突。
5、離線工作。 。
缺點(diǎn):
1、學(xué)習(xí)周期相對(duì)而言比較長(zhǎng)。
2、不符合常規(guī)思維。
3、代碼保密性差,一旦開(kāi)發(fā)者把整個(gè)庫(kù)克隆下來(lái)就可以完全公開(kāi)所有代碼和版本信息。
2.webstorm怎樣配置svn?
下載安裝sliksvn
在webstorm上配置sliksvn

輸入svn插件安裝的位置

如何checkout代碼
根據(jù)服務(wù)器情況選擇svn信息,添加好地址就可以導(dǎo)入項(xiàng)目的版本庫(kù)了。

SVN服務(wù)器地址:
如何提交代碼,

在文件上選擇右鍵在彈出來(lái)的提示框點(diǎn)擊commit,就可以看自己更
改過(guò)的文件。

五.編碼實(shí)戰(zhàn)
六.擴(kuò)展思考
SVN 和 Git 哪個(gè)更適用于項(xiàng)目管理?
SVN更適用于項(xiàng)目管理, Git僅適用于代碼管理。
一個(gè)研發(fā)隊(duì)伍的成員正常包括:需求分析、設(shè)計(jì)、美工、程序員、測(cè)試、實(shí)施、運(yùn)維,每個(gè)成員在工作中都有產(chǎn)出物,? 包括了文檔、設(shè)計(jì)代碼、程序代碼,這些都需要按項(xiàng)目集中進(jìn)行管理的。SVN能清楚的按目錄進(jìn)行分類(lèi)管理, 使項(xiàng)目組的管理處于有序高效的狀態(tài)。
七.更多討論
八.參考文獻(xiàn)
參考一:SVN和Git 介紹,區(qū)別,優(yōu)缺點(diǎn),適用范圍總結(jié)?
參考四:為什么很多大企業(yè)都在用收費(fèi)的perforce而不是免費(fèi)的svn或者git?
參考五:Git 使用規(guī)范流程
參考六:svn老鳥(niǎo)轉(zhuǎn)用git必須理解的概念
PPT連接:
視頻鏈接
如果這篇文章對(duì)你有幫助,并且使你對(duì)修真院免費(fèi)在線學(xué)習(xí)感興趣,可以通過(guò)我的鏈接注冊(cè)成員會(huì),這會(huì)使我得到學(xué)分(兌換學(xué)時(shí))延長(zhǎng)學(xué)習(xí)時(shí)間:
邀請(qǐng)鏈接:http://www.jnshu.com/login/1/13374512
邀請(qǐng)碼:13374512