日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

02 SVN 与 Git 的优缺点

發(fā)布時(shí)間:2024/1/8 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 02 SVN 与 Git 的优缺点 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上一篇博客大致聊了聊關(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):

  • 擁有統(tǒng)一的版本號。和 CVS 對每一個(gè)文件按順序編排版本號不同,SVN 任何一次提交都會將所有文件增加到同一個(gè)新版本號,即使是該次提交不涉及到的文件,這樣就使得擁有同一版本號的所有文件集體構(gòu)成軟件的一個(gè)版本。
  • 原子提交。每次提交不管是單個(gè)或是多個(gè)文件,都是以文件作為一個(gè)整體提交的,如果傳輸過程被中斷之類的,也不會引起數(shù)據(jù)庫的不完整和數(shù)據(jù)損壞。
  • 對于重命名、復(fù)制、刪除文件等這些操作都會保存在版本歷史記錄中。
  • 原理上只關(guān)心文件內(nèi)容的具體差異。每次記錄有哪些文件作了更新,以及都更新了哪些行的什么內(nèi)容。只保存與上一版不同之處,極大地節(jié)約了空間。
  • 目錄也有版本歷史。整個(gè)目錄樹可以被移動或者復(fù)制,操作很簡單,而且能夠保留全部版本記錄。
  • 分支的開銷非常小。
  • 優(yōu)化過的數(shù)據(jù)庫訪問,使得一些操作不必訪問數(shù)據(jù)庫就可以做到。這樣減少了很多不必要的和數(shù)據(jù)庫主機(jī)之間的網(wǎng)絡(luò)流量。
  • 支持元數(shù)據(jù)(Metadata)管理。每個(gè)目錄或文件都可以定義屬性(Property),它是一些隱藏的鍵值對,用戶可以自定義屬性內(nèi)容,而且屬性和文件內(nèi)容一樣在版本控制范圍內(nèi)。
  • 文件鎖。支持文件鎖定。如果一個(gè)人想更改文件,那他可以在修改之前對文件進(jìn)行“加鎖”,如果他已經(jīng)鎖住了文件,別人就不能再對同一文件進(jìn)行加鎖,也不能修改文件,只能等他完成修改然后釋放鎖,等他解鎖之后,其他人才能對該文件新版本進(jìn)行上鎖編輯。
  • 支持 FSFS 和Berkeley DB兩種資料庫格式
  • 集中式版本控制,方便管理文檔。
  • 關(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):

  • 得益于它分布式的特點(diǎn),很多操作都可以在本地進(jìn)行,致使幾乎除了克隆以外的其他操作都十分地快速。
  • 遠(yuǎn)端與本地都保存著完整的git倉庫(包括代碼與版本信息等),編輯過程中不需要聯(lián)網(wǎng),可以等有網(wǎng)的時(shí)候在進(jìn)行推送;且每個(gè)用戶基本上都有完整備份。如果發(fā)生崩潰或損壞,可以向上推每個(gè)副本以替換。
  • 不需要服務(wù)器端軟件,可以運(yùn)作版本控制。使得源代碼的發(fā)布和交流及其方便。
  • 只關(guān)心文件數(shù)據(jù)的整體是否發(fā)生變化。不保存文件內(nèi)容前后變化的差異數(shù)據(jù)。更像是把變化的文件作快照后,記錄在一個(gè)微型的文件系統(tǒng)中。每次提交更新時(shí),縱覽一遍所有文件的指紋信息并對文件作一快照,然后保存一個(gè)指向這次快照的索引。為提高性能,若文件沒有變化,不會再次保存,而只對上次保存的快照作一連接。
  • 分支的本質(zhì)是一個(gè)指向提交快照的指針,速度快,靈活,分支之間可以任意切換。
  • 可以同時(shí)擁有多個(gè)完全獨(dú)立的本地分支,這些分支的創(chuàng)建、合并和刪除操作只需要幾秒,分支之間的切換更是絲般順滑,且在推送遠(yuǎn)端的時(shí)候可以選擇性推送共享分支,而不是將所有的分支都推送上去。
  • 它使用的數(shù)據(jù)模型可確保項(xiàng)目每個(gè)部分的加密完整性。所有的數(shù)據(jù)在存儲前都計(jì)算校驗(yàn)和,然后以校驗(yàn)和來引用。 這意味著不可能在它不知情時(shí)更改任何文件內(nèi)容或目錄內(nèi)容
  • SVN 與 Git 各自的優(yōu)劣

    前面描述他們的時(shí)候,也大致聊了聊我所了解到的他們各自的特點(diǎn),這里也聊聊他們各自的優(yōu)勢、劣勢吧。

    SVN 的優(yōu)勢:

  • 用法簡單,易上手,沒有 Git 那么多的命令,對新手比較友好。
  • 易于管理,對權(quán)限的管理相當(dāng)嚴(yán)格,可以按組、個(gè)人針對某個(gè)子目錄的權(quán)限控制。
  • 文檔鎖一定意義上真的非常有用,尤其是分工明確,且不愿意讓別人碰自己代碼的時(shí)候。
  • 本地設(shè)備上的文件更小,更省內(nèi)存,尤其是做大項(xiàng)目的時(shí)候,對電腦內(nèi)存比較友好。
  • 可以單獨(dú)檢出某個(gè)有權(quán)限的目錄。
  • 有全局版本號——不需要手動編號。
  • SVN 的劣勢:

  • 項(xiàng)目放在中央服務(wù)器中,一旦服務(wù)器出現(xiàn)什么意外,就會損失慘重。
  • 斷網(wǎng)意味著不能工作,比較扎心。聯(lián)內(nèi)網(wǎng)還好,聯(lián)外網(wǎng)能卡得你懷疑人生。
  • 人一多服務(wù)器就有點(diǎn)遭不住,尤其是那種大型開源項(xiàng)目。
  • 分支管理不靈活,svn分支是一個(gè)完整的目錄,且這個(gè)目錄擁有完整的實(shí)際文件,這些操作都是在服務(wù)端進(jìn)行同步的,不是本地化操作,如果要刪除分支,也是需要將遠(yuǎn)程的分支進(jìn)行刪除,這會導(dǎo)致大家都得同步。
  • Git的優(yōu)勢:

  • 速度快,靈活。
  • 離線工作。
  • 十分詳細(xì)且忠實(shí)地反映版本間的變化,能夠及時(shí)且方便地解決沖突。
  • 擁有多個(gè)完整獨(dú)立的分支,且可以只選擇推送共享分支。
  • 本地?fù)碛型暾?git 版本庫,無論損壞了那一邊,都能夠通過克隆的方式恢復(fù)。
  • Git的劣勢:

  • 權(quán)限管理形同虛設(shè),幾乎所有人都能獲取更改全部文件,難保會不會有傻缺更改注釋不全的代碼,導(dǎo)致報(bào)錯……而且也很容易被人扒源碼掛網(wǎng)上。
  • 模式上比 SVN 復(fù)雜,相對的學(xué)習(xí)周期更長。
  • 大致就這些吧,可能還不是很詳細(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。