大家好鸟蟹,我是IT修真院北京分院web第29期學(xué)員吳昊杰乌妙,一枚正直純潔善良的web程序員。
【css-02】
【北京小課堂】svn和git有什么區(qū)別建钥? webstorm怎樣配置svn藤韵?
1.背景介紹
為什么要版本控制系統(tǒng)?
現(xiàn)在的軟件開(kāi)發(fā)工作經(jīng)常會(huì)需要修改文檔代碼锦针,一份文件可能會(huì)有很多的不同版本荠察,一旦丟了某個(gè)文件或者忘了放在哪里,一個(gè)個(gè)去找太麻煩奈搜。
于是就會(huì)想到如果有一個(gè)軟件悉盆,能夠幫我記住每次文件的改動(dòng),而且還可以和同事協(xié)同工作馋吗,就不用自己去管理一堆文件了焕盟,也不需要傳來(lái)傳去導(dǎo)致丟失。
所以版本控制系統(tǒng)就這樣誕生了。
它能夠具體的做記錄脚翘,具體的記錄每一步的改變灼卢,可以與小伙伴同步完成一個(gè)項(xiàng)目,這是版本控制系統(tǒng)最重要的作用来农。
2.知識(shí)剖析
SVN介紹
什么是SVN鞋真?Subversion的簡(jiǎn)稱(chēng),有一種說(shuō)法:SVN=版本控制+備份服務(wù)器。 它可以幫你記住每次上傳到這個(gè)服務(wù)器的檔案內(nèi)容沃于,并自動(dòng)賦予 每次變更 一個(gè)版本號(hào)涩咖。 我們用來(lái)存放(上傳過(guò)來(lái)的)檔案的地方叫做Repository。Repository的中文意思是倉(cāng)庫(kù)繁莹、貯藏室檩互、博物館萨脑。 我們有任何修改都可以上傳到Repository里扰柠。針對(duì)每次的上傳议纯,SVN server都會(huì)賦予一個(gè)新的版本锯茄。同時(shí),也會(huì)記錄每次上傳的時(shí)間肠牲。 我們以后可以從Repository中下載曾經(jīng)提交的檔案玲销。我們可以取到最新的版本懒闷,也可以取得之前任何一個(gè)版本村刨。如果忘記了版本告抄,還可以靠記憶獲取某個(gè)日期的版本撰茎。
Git介紹
Git是一種分布式的版本管理系統(tǒng)嵌牺,Linux的創(chuàng)造者Linus寫(xiě)的。git的作用就是對(duì)文件進(jìn)行版本管理龄糊,方便在不同版本進(jìn)行切換修改逆粹,類(lèi)似文件分不同時(shí)間備份讓后需要時(shí)找回其中一份代替,不過(guò)更方便使用炫惩。
至于Git的缺點(diǎn)就是命令太混亂僻弹,非常不直觀(guān),命令行幫助提示晦澀難懂他嚷。斷網(wǎng)的時(shí)候很可能不知道怎么使用Git
3.常見(jiàn)問(wèn)題
1.SVN和Git有什么區(qū)別蹋绽?
2.webstorm怎樣配置svn?
4.解決方案
SVN和Git有什么區(qū)別筋蓖?
1卸耘、SVN屬于集中化的版本控制系統(tǒng),Git是一個(gè)分布式版本控制系統(tǒng)。
2粘咖、Git把內(nèi)容按元數(shù)據(jù)方式存儲(chǔ)蚣抗,而SVN是按文件。
3瓮下、Git的分支卻是相當(dāng)?shù)暮?jiǎn)單和有趣,SVN較為復(fù)雜翰铡。
4钝域、Git的內(nèi)容完整性要優(yōu)于SVN。
5锭魔、Git沒(méi)有一個(gè)全局的版本號(hào)例证,而SVN有。
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)]有 網(wǎng)絡(luò)的環(huán)境時(shí),這個(gè)將解決你的大麻煩伪朽。
2.1轴咱、SVN這類(lèi)版本控制系統(tǒng)則關(guān)心文件內(nèi)容的具體差異
每次記錄有哪些文件作了更新,以及都更新了哪些行的什么內(nèi)容,SVN 服務(wù)器上保存著唯一的一份歷史版本庫(kù)朴肺,所以是越詳細(xì)越好了窖剑,我們想要查看一下某個(gè)文件的與昨天的版本相比的更新變動(dòng)信息SVN的優(yōu)勢(shì)就顯示出來(lái)了
2.2、Git 關(guān)心文件數(shù)據(jù)的整體是否發(fā)生變化
Git 并不保存這些前后變化的差異數(shù)據(jù)戈稿。實(shí)際上西土,Git更像是把變化的文件作快照后,記錄在一個(gè)微型的文件系統(tǒng)中鞍盗。每次提交更新時(shí)需了,它會(huì)縱覽一遍所有文件的指紋信息并對(duì)文件作一快照,然后保存一個(gè)指向這次快照的索引般甲。為提高性能肋乍,若文件沒(méi)有變化,Git 不會(huì)再次保存敷存,而只對(duì)上次保存的快照作一鏈接墓造。
3.1、svn分支是一個(gè)完整的目錄锚烦,且這個(gè)目錄擁有完整的實(shí)際文件觅闽。如果工作成員想要開(kāi)啟新的分支,那將會(huì)影響“全世界”涮俄!每個(gè)人都會(huì)擁有和你一樣的分支蛉拙。如果你的分支是用來(lái)對(duì)系統(tǒng)模塊進(jìn)行安全檢查測(cè)試的,那將會(huì)像傳染病一樣彻亲,你改一個(gè)分支孕锄,還得讓其他人重新切分支重新下載,而且這些代碼很可能對(duì)穩(wěn)定版本還是具有破壞性的睹栖。
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ú)癢聊浅。
4.Git 的內(nèi)容完整性要優(yōu)于SVN。因?yàn)镚it 在commit(存儲(chǔ)在本地)或者push(上傳到遠(yuǎn)程倉(cāng)庫(kù))之前,通過(guò)對(duì)文件的內(nèi)容或目錄的結(jié)構(gòu)計(jì)算出一個(gè) SHA-1哈希值低匙,作為指紋字符串進(jìn)行內(nèi)容的校驗(yàn)旷痕,并將此結(jié)果作為數(shù)據(jù)的唯一標(biāo)識(shí)和索引,在遠(yuǎn)處倉(cāng)庫(kù)接受到commit的文件之后顽冶,會(huì)再計(jì)算一遍哈希值然后跟傳遞過(guò)來(lái)的哈希值做比較欺抗,如果不一致,說(shuō)明文件在傳輸時(shí)變得不完整强重,或者磁盤(pán)損壞導(dǎo)致文件數(shù)據(jù)損壞绞呈。
5.SVN只能有一個(gè)指定中央版本庫(kù)。當(dāng)這個(gè)中央版本庫(kù)有問(wèn)題時(shí)间景,所有工作成員都一起癱瘓直到版本庫(kù)維修完畢或者新的版本庫(kù)設(shè)立完成佃声。而 Git可以有無(wú)限個(gè)版本庫(kù)√纫或者秉溉,更正確的說(shuō)法,每一個(gè)Git都是一個(gè)版本庫(kù)碗誉,區(qū)別是它們是否擁有活躍目錄召嘶。這能確保代碼內(nèi)容的完整性,確保在遇到磁盤(pán)故障和網(wǎng)絡(luò)問(wèn)題時(shí)降低對(duì)版本庫(kù)的破壞哮缺。
優(yōu)缺點(diǎn)比較
1.SVN優(yōu)缺點(diǎn)
優(yōu)點(diǎn): 1弄跌、 優(yōu)異的跨平臺(tái)支持。 2尝苇、 簡(jiǎn)單易用铛只。 3、 功能完善穩(wěn)定糠溜。 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ī)制(例如分支訪(fǎng)問(wèn)限制)岗宣,可以實(shí)現(xiàn)分層管理,從而很好的解決開(kāi)發(fā)人數(shù)眾多的問(wèn)題览徒。
2.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、離線(xiàn)工作或听。
缺點(diǎn): 1探孝、高昂的學(xué)習(xí)成本。 2誉裆、糟糕的抽象邏輯顿颅。 3、可能把事情變?cè)?Git的自由度較高足丢,Git沒(méi)有保護(hù)機(jī)制粱腻。 4、拙略的跨平臺(tá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ò)的文件柬批。
5.拓展思考
SVN 和 Git 哪個(gè)更適用于項(xiàng)目管理?
Git適用于參與開(kāi)源項(xiàng)目的開(kāi)發(fā)者揭糕。他們由于水平高萝快,更在乎的是效率而不是易用性。SVN則不同著角,它適合普通的公司開(kāi)發(fā)團(tuán)隊(duì)。使用起來(lái)更加容易旋恼。
使用的場(chǎng)合不同吏口。Git適用于通過(guò)Internet奄容,有多個(gè)開(kāi)發(fā)角色的單個(gè)項(xiàng)目開(kāi)發(fā),SVN適合企業(yè)內(nèi)部由項(xiàng)目經(jīng)理統(tǒng)一協(xié)調(diào)的多個(gè)并行項(xiàng)目的開(kāi)發(fā)产徊。
Git適用于單純的軟件項(xiàng)目,SVN擅長(zhǎng)多項(xiàng)目管理昂勒。
6.參考文獻(xiàn)
參考一:廖雪峰Git教程
參考二:Git 和 SVN 之間的五個(gè)基本區(qū)別
參考四:Svn與Git的區(qū)別
參考六:什么是SVN
參考七:版本控制:集中式VS分布式
參考八:git是什么?
今天的分享就到這里啦舟铜,歡迎大家點(diǎn)贊戈盈、轉(zhuǎn)發(fā)、留言谆刨、拍磚~
----------------------------------------------------------------------------------------------------------------------------------