SVN集中式版本管理工具
SVN能干嘛?
為了能夠更好的記錄保留軟件開發(fā)過程中的迭代版本,
你每一次修改后提交的代碼,SVN服務(wù)器都為我們保留了記錄。
為了能夠更好的協(xié)同開發(fā),并有效的解決多人之間的沖突,
多個(gè)人修改一個(gè)文件,把不同的修改進(jìn)行合并,這解決了我們協(xié)同開發(fā)中的一大難題。
為了能夠更便捷的異地同步代碼,
手機(jī)、平板、家里電腦、公司電腦,跟今天的云盤一個(gè)道理。
于是誕生了版本管理工具。SVN便是其中比較流行的一個(gè)工具。
這是一個(gè)集中式的版本管理,所有的數(shù)據(jù)都經(jīng)過中央服務(wù)器進(jìn)行交換同步
Git 分布式版本管理工具
git能干嘛?
功能上跟SVN一樣,只不過它是分布式的,不存在中央服務(wù)器
乍看上去,好像灰常復(fù)雜,其實(shí)不然。就是說根本沒有服務(wù)器的概念,或者人人都是服務(wù)器。任意兩臺(tái)電腦都可以互相通信
但是這樣帶來一個(gè)問題,就是如果要同步代碼,至少要保證兩臺(tái)機(jī)器同時(shí)開機(jī),所以使用git的通常做法是這樣的:
后來有了github這個(gè)神奇的網(wǎng)站,它提供24小時(shí)不間斷的服務(wù),并且在github上提交的代碼可以公開分享,來自全球的小伙伴學(xué)習(xí)別人的代碼更加的方便了,并且還是以版本管理的方式來同步代碼。于是git就瞬間流行起來了。
但是由于git復(fù)雜的原理,讓它的學(xué)習(xí)成本比svn高出了很多倍。非常不適合初學(xué)者
接下來,我嘗試用圖解的方式講解git原理,讓大家弄明白,git 為什么會(huì)看起來比SVN復(fù)雜很多卻又很受歡迎。
但不同的是,github自己編寫了一套程序接口,你可以經(jīng)過在它的網(wǎng)站上注冊(cè),然后在github上建立屬于你自己的倉(cāng)庫,然后把代碼同步過去,注意我用了同步這個(gè)詞,不是提交,因?yàn)榇蠹乙欢ㄒ涀?,這是分布式的!!
就是說github只是眾多客戶端之一(雖然它有點(diǎn)特殊),這里沒有服務(wù)器和客戶端的概念。
(請(qǐng)注意,git是一個(gè)分布式版本管理軟件,github是一個(gè)網(wǎng)站平臺(tái),請(qǐng)不要把二者混為一談)
這樣一來,大家就可以直接從github上下載,修改后都向github上面提交,就方便多了
講到這里,你一定會(huì)有疑問,這跟SVN有什么區(qū)別?SVN貌似不用這么折騰吧?
第1,這跟SVN確實(shí)沒什么區(qū)別。
但是,如果github網(wǎng)站掛掉了,張三、李四、王五仍然可以直接互相同步代碼,SVN做的到嗎?
第二,這個(gè)要重點(diǎn)說,git不單單只有這一點(diǎn)好處,更大的好處,在于它和SVN有著不同的管理文件的方式。
一個(gè)軟件從建立,到zui后發(fā)布上線,如果把每一次提交都算上,你覺得它大概要經(jīng)歷幾萬個(gè)版本?
我們都知道版本管理zui大的好處就是可以保留我們的歷史版本,在代碼開發(fā)到一半的時(shí)候,不至于無故丟失,還可以查看BUG的來龍去脈。
那怎么樣做到這一點(diǎn)呢?
如果每一次修改,都保留一個(gè)文件副本,那需要多少硬盤才能裝的下?
SVN是集中式管理,大家把文件都提交到一個(gè)地方,這服務(wù)器的存儲(chǔ)壓力就大了去了。
因此它對(duì)于文件的版本控制,采用增量式的,只記錄修改部分,不產(chǎn)生多余的數(shù)據(jù)。
但是要知道,只記錄修改,不產(chǎn)生冗余,還得準(zhǔn)確的還原每一個(gè)版本,解決沖突,可真不是一件容易的事情
所以你就明白,為什么到現(xiàn)在SVN還是動(dòng)不動(dòng)一個(gè)誤操作就出現(xiàn)無法提交的錯(cuò)誤,BUG滿天飛。
我們不得不說,SVN是一個(gè)非常優(yōu)秀的版本管理軟件,如果它早一點(diǎn)發(fā)明分支結(jié)構(gòu),如果在github之前就出現(xiàn)了svnhub,也許.....
算了,不提往事了,接下來再說git管理文件的方式。
Git以文件快照的方式保存,也就是說,每一個(gè)版本,就是一個(gè)文件副本
當(dāng)然,對(duì)于沒有變動(dòng)的提交,git會(huì)自動(dòng)生成一個(gè)虛的索引,就像快捷方式,以便節(jié)省空間,
但即便是這樣,你肯定還是覺得,這種做法太浪費(fèi)空間了。所以才發(fā)明了分支(fork)
我們還拿github舉例子,現(xiàn)在它既然要變成一個(gè)類似服務(wù)器的角色,為所有人提供代碼托管。
那如何來解決如此大量的冗余呢? 那就是想辦法把冗余放到本地。
首先,我們從github上的項(xiàng)目克隆一份到我們本地,
我們把github上的項(xiàng)目稱為主干,我們自己的稱為分支,我們的修改只提交在本地。
等到版本穩(wěn)定的時(shí)候,或者我負(fù)責(zé)的模塊開發(fā)完成了,再把zui后的版本提交到遠(yuǎn)程倉(cāng)庫。
這個(gè)過程稱為分支的合并
當(dāng)然,能不能合并,還得創(chuàng)建項(xiàng)目的人說了算。
試想一下,你發(fā)起了一個(gè)開源項(xiàng)目1.0,無數(shù)的人來幫你續(xù)寫2.0版本,并向你發(fā)送了合并申請(qǐng)。
你挨個(gè)審查,挑了一個(gè)優(yōu)秀的合并到你的項(xiàng)目中,豈不是很爽?
關(guān)于HTML5培訓(xùn),千鋒互聯(lián)是認(rèn)真的! >> https://kaoshi.china.com/xuexiao/bjqf/
課程咨詢
咨詢老師:金老師
咨詢電話:010-64707530/15110074071