版本管理工具 —— SVN


想想我們在開發過程中是不是會遇到這樣的情況:

  今天寫了很長的一段代碼,覺得不合理,然后刪了,第二天突然發現昨天的那段代碼才是正確的,那怎么辦,也無法撤銷刪除的代碼?

  還有團隊中多人共同開發一個項目,如何多人同時開發一個文件而不會導致沖突覆蓋的情況發生?

  就算是你自己寫代碼,寫小項目,如何管理這些項目?如何控制他們的版本?

 

解決這些問題就需要SVN啦:

SVN(Subversion):代碼版本管理軟件,你可以將文檔、項目、代碼放到SVN的中央倉庫(Repository)中,這個倉庫就像一個文件服務器,不過它會記住文件每一次的變動(包括日期、修改人等等),這樣你就可以把文件恢復到指定日期的版本。同時,多人開發時,可以將項目從倉庫中下載到本地,自己開發自己的模塊並提交,就算有沖突或覆蓋,也能及時發現並回退到之前的版本。只要你在每次修改和提交代碼之前將代碼更新到最新的版本,一般是不會發生覆蓋別人代碼的情況的。

 

從上面的描述就可以看出SVN分為服務端和客戶端了,下面就展示下服務端和客戶端的安裝過程,及使用。

一、SVN服務端安裝及使用

二、安裝客戶端及使用

三、賬號和權限設置

四、SVN客戶端使用 -- 基本操作

五、SVN客戶端使用 -- 沖突解決(重點)

六、在IntelliJ IDEA中使用SVN

七、分支、合並、切換

八、使用http方式訪問SVN

九、SVN對比Git

 

一、SVN服務端安裝及使用

  1.雙擊安裝SVN服務端、一路Next,安裝完成。我這里將服務端安裝到我本地的虛擬機內,我的虛擬機是win8 32位的。

  

  2.檢查安裝是否成功:svnserve --version 顯示如下信息則表示成功了。

  

  Subversion 在安裝時,同JAVA 的開發環境(JDK)的安裝一樣,同樣會自動的把安裝目錄下的bin目錄設置到系統變量中去。如果你使用的綠色版,那么設置系統變量這個步驟就得你自己手動來設置了。

  

  3.創建SVN倉庫:

  我在G盤建了一個SVNServer目錄作為SVN的服務器根目錄,然后建了一個所有項目的根目錄SVNServer\svn\repo,然后分別建了doc(存文檔)、trunk(存項目)目錄。

  建議大家從一開始無論做什么都要規范,包括命名,存放位置等等。

   

  現在假如我要開發一個scm項目,則在trunk下建一個scm倉庫用於存放該項目(這種方式是一個項目作為一個服務):> svnadmin create G:\SVNServer\svn\repo\trunk\scm

  可以為不同的項目創建對應的倉庫,分別存儲不同項目的代碼文件。

  

  4.啟動這個項目的服務:> svnserve -d -r G:\SVNServer\svn\repo\trunk\scm

  這種啟動方式,啟動成功后,當前命令窗口不能關閉,關閉則服務就關閉了。

  可以重新打開一個窗口,使用netstat -an檢查端口,svn的默認端口是3690, 有的話則表明svn服務啟動成功。

  

  5.將倉庫中的項目檢出:

  現在我將F盤作為我的本地開發目錄,在F盤下建立repo目錄,用來存儲從服務器檢出的項目

  > svn checkout svn://localhost F:\repo\scm

  這里使用命令行的方式,我將scm項目檢出到F盤的repo目錄下,檢出后可以在scm里看到.svn(本地svn管理)。記得勾選查看隱藏文件才能看到。

  在說明下命令參數:checkout則是檢出命令;svn:\\localhost則是啟動的svn服務器地址,這里指向的就是scm倉庫;F:\repo\scm 檢出地址。

  

  6.創建並提交

  在還沒有創建svn用戶的時候,如果想要向svn提交文件,需修改如下配置:允許匿名用戶有寫的權限,不過這個一般是不開放的。

  

  之后我在scm下創建了controller文件夾,並在里面創建了LoginController.java文件。

  需要注意的是:新目錄內部的文件不能直接提交,必須是目錄本身已經提交給倉庫了,該目錄的文件才可以單獨進行提交操作。

  

  加入到本地.svn版本控制中:svn add F:\repo\scm\controller

  

  提交到svn倉庫:svn commit -m 'controller代碼' F:\repo\scm\controller

  -m 后跟的是此次提交文件的備注。提交后的版本為1

  

  7.然后你可以在svn服務端的這個目錄下看到你提交的版本日志信息(上面顯示的版本為1),用SVN客戶端你可以看到詳細的版本信息,以后你也可以回退到任意版本了。

  用戶每提交一次,這里就會產生一個新的版本號。

  

  然后這個目錄下就可以看到文件內容詳細信息,不過服務端的管理一般都是不用你去操心的,這里只是介紹下。

  

 

上面就是SVN服務端的安裝及一些簡單的使用了,但是有幾個明顯的不好的地方:使用命令行操作太麻煩了;每次啟動SVN服務都必須手動啟動,且要保持命令窗口一直開着,如果多個項目還得啟動多個窗口。所以,后面就用SVN客戶端來操作。

 

 二、安裝客戶端及使用

  1.在安裝客戶端之前,首先我們需要安裝SVN服務器並制作成windows服務,用於作為SVN的倉庫,安裝步奏如上。

  服務端安裝成功之后,以管理員身份運行cmd,輸入如下命令創建成windows服務:

  > sc create SVN-Service binpath="E:\Program Files\SlikSvn\bin\svnserve.exe --service -r G:\SVNServer" displayname="SVN-Server" start=auto depend=Tcpip

  參數: 

    binpath為執行命令所在的路徑

    -r 為倉庫的路徑:這里配置的多倉庫,也就是 h說你可以在SVNServer下建立很多倉庫。你可以看成svn://localhost指向G:\SVNServer。這里G:\SVNServer是所有倉庫的根目錄。

    displayname則是SVN服務的顯示名稱。

  創建成功后,可以運行services.msc打開服務,查看SVN-Server是否制作成功。然后啟動SVN-Server。

  

  我這里是直接改的注冊表,cmd每次啟動就是管理員身份:如果你發現你執行不了,可以添加腳本的方式執行:

  比如:新建一個create.bat文件,復制要執行的命令粘貼到這個文件里;保存,然后右鍵"以管理員身份運行"即可。

 

  2.雙擊安裝SVN客戶端,一路Next。

  

  3.安裝成功:在任意位置,右鍵能看到如下的標志,則客戶端安裝成功。

  

  3.創建SVN倉庫

  第1步里,創建了SVN服務的根目錄G:\SVNServer,你可以直接在這個目錄下創建項目倉庫,比如scm,然后就以svn://localhost/scm訪問這個項目。

  我這里將G:\SVNServer\svn\repo作為倉庫:

    

  然后,點擊Create folder structure,創建SVN規范的結構目錄,會為倉庫自動生成trunk/branches/tags三個目錄,這是SVN目錄的規范。

  可以參考這篇博客:SVN的標准目錄結構:trunk、branches、tags

  

  4.然后,你可以到其它盤去瀏覽當前倉庫的目錄結構:

  

  輸入訪問的地址:

  

  可以看到repo倉庫的目錄結構了。

  

 

三、賬號和權限設置

  前面的講解了安裝及簡單的使用,使用的是匿名賬戶,這樣安全性極低,如果是多人開發,肯定會導致沖突的。所以我們先學習設置賬號和權限再繼續后面的使用。

  所有與賬號和權限相關的都在倉庫的conf目錄下配置。

  

  1.定義所有認證和授權政策:svnserve.conf

  ① anon-access 

    匿名用戶的訪問權限,應該是什么訪問權限都沒有

    anon-access = none  

  ② auth-access

    認證用戶授權擁有寫的權限

    auth-access = write

  ③ password-db

    指定用戶的認證文件為passwd文件(需要去掉#才能引入這個配置文件)

    password-db = passwd

  ④ authz-db

    指定用戶的授權文件為authz文件(需要去掉#才能引入這個配置文件)  

    authz-db = authz

  2.存放項目成員賬戶信息:password

  等號左邊代表用戶名,等號右邊代表密碼;這里我按部門添加了如下一些用戶:

  

  3.復雜的群主授權控制:authz

  如果用戶較少,可以不用分組,直接為用戶設置權限。

  

  比如我這里的配置:

  

  

  4.再次訪問的時候就需要你輸入用戶名和密碼了:

  

 

四、SVN客戶端使用 -- 基本操作

  在公司項目開發中,SVN服務器一般是搭建在一個局域網主機上,由管理員(或運維人員)管理着。我們的電腦上只需要安裝客戶端即可,就可以完成對SVN的管理及下載代碼等。

  比如我這里將我的SVN服務器搭建在虛擬機內(相當於一個局域網SVN服務器),然后用我的電腦來訪問。

  我下面以一個項目的開發來說明SVN客戶端的使用。

  1.首先在SVN版本庫里創建一個項目

  ①右鍵TortosieSVN -> Repo-browser

  ②倉庫地址:svn://localhost/svn/repo

  

  ③這里用admin登錄進去創建一個項目

  

  如果你之前勾選了"Save authentication",你是直接進入的;如果你要換一個賬號,需要先清空緩存:

  右鍵TortosieSVN -> Settings

  

  ④trunk是我們的主開發目錄,在trunk上右鍵 Create folder -> 輸入文件夾名稱 -> 輸入日志信息

  

  2.在你的電腦的hosts文件中添加域名的對應的IP,這樣就可以以域名的方式訪問SVN了。

   

  3.在電腦上訪問SVN(如果沒有安裝客戶端,需要安裝,開發電腦上只需安裝客戶端即可),將lyyzoo-scm下到本地:

  我這里在D盤建了兩個目錄bojiangzhou和chiangchou表示兩個開發者使用的目錄。下面演示在bojiangzhou目錄檢出項目,chiangchou目錄就不贅述了。

  1.右鍵 -> SVN Checkout  -> 輸入項目路徑,以及檢出目錄 -> 然后輸入用戶名和密碼 -> 檢出成功

  

  

  

  或者說,你可以右鍵 -> TortosieSVN -> Repo-browser 登錄客戶端,在項目上右鍵 -> Checkout

  

  4.在chiangchou目錄根據上面的步奏檢出lyyzoo-scm項目,記得切換chiangchou用戶。

  

  5.在bojiangzhou/lyyzoo-scm下按照maven的結構創建項目,可以先不用管maven。下面的是我的目錄結構

  

  

 6.下面就需要先提交這個目錄結構,以便大家一起開發

  ①先將增加的文件添加到本地svn(即.svn)的版本管理中。

  

  ②然后選擇子文件夾

  

  ③然后可以看到src前面的標志變為藍色加號了,說明這個文件已被加入.svn管理了

  

  ④提交文件(SVN Commit) -> 記得寫上你這次提交文件的備注 -> 提交完后src前的標志變為綠色勾,表示已經和服務端SVN同步了,然后你可以在SVN上看到你提交的文件

  

  

  

  

 

 7.chiangchou用戶更新項目,用chiangchou用戶登錄。這樣我就把別人提交的文件更新下來了。

  

  

  8.新增幾個文件:chiangchou用戶添加了兩個實體類,然后添加到.svn管理。

  

  然后你可以看到entity及其上級文件夾的標志變為了紅色感嘆號:

  

  提交這兩個文件:提交之后就變回綠色勾了。

  

  從SVN上可以看到最近誰更新了文件,以及提交的日志日期等

  

  右鍵 -> TortoiseSVN -> Show log 查看最近提交的日志記錄以及提交了哪些文件

  

五、SVN客戶端使用 -- 沖突解決(重點)

  兩個開發人員對同一個文件進行修改,彼此代碼出現覆蓋的情況就稱為沖突。在較短的時間內,兩個程序員對同一個文件同一處代碼開發,后上傳的會覆蓋先上傳的。

  1.首先看一下修改不同處代碼的沖突  

  ①下面對User.java進行修改,可以看到bojiangzhou和chiangchou的User.java的版本號都是11。以及User.java該版本的代碼如下

  

  

  

  

  ②首先chiangchou修改代碼如下:這里先不提交

  

  ③然后bojiangzhou修改代碼如下:不在同一處,相當於兩個開發人員同時修改同一個文件

  

  ④這時候chiangchou提交文件:版本變為12了。

  

  ⑤bojiangzhou再提交:可以看到是禁止提交的,原因是本地的版本已經過時了,不是最新的。

  

  ⑥需要你先更新到最新版再進行提交。因為這里沒有對同一處代碼進行開發,所以不會產生代碼沖突,可以直接更新,代碼會合並(Merge)到你的文件里。

   這時候你再提交代碼即可。可以看到版本已經到13了。

    

  2.再看如果改到同一處代碼的情況

  ①首先確認兩個的版本都是13.

  

  

  ②chiangchou修改User.java,setPassword()方法,暫時不提交

  

  ③同時,bojiangzhou修改setPassword方法

  

  ④chiangchou用戶提交文件:版本14。

  

  ⑤bojiangzhou提交文件,這時bojiangzhou的文件還是13的版本號。同樣,提交失敗,提示文件過時。

  

  ⑥這時再更新的話,就有代碼沖突了:一是User.java文件前面的標志變為黃色感嘆號了;二是提示沖突,多了幾個文件。

  User.java.mine表示自己的文件(相當於備份);r13、r14則是兩個版本的代碼,你可以用記事本打開看到里面的代碼。

  

  然后再看看沖突的User.java,變成了下面這樣:可以看到沖突的兩個代碼。

  

  ⑦那么如何解決這個沖突呢:

  首先需要明確你的代碼是否有必要覆蓋別人的代碼,如果不需要覆蓋,那么直接撤銷(Revert)所有更改,保持跟服務器的一樣即可,相當於就不要你的代碼了。更新后你的版本就是14了。

  

  但如果你覺得你的代碼比他的好,跟另一個開發人員商量下,然后覆蓋他的代碼。記得先將自己的代碼備份。

  這里因為你已經更新了代碼,所以先將代碼Revert,與服務器的版本保持一致;然后再從你備份的代碼中拷貝你改動的那些代碼進去。

  Revert之后,多余的文件也自動刪掉了。此時你的版本就是14了。

  

  再改動代碼后,提交文件。這是你的版本就是15了。同時chiangchou也要記得更新文件,chiangchou看到的代碼就是bojiangzhou最新提交的了。

  

  沖突解決:上鎖

  還可以通過上鎖的方式避免沖突,如果你當前正在修改這個文件,又不想讓別人來編輯這個文件,就給這個文件加一把鎖這樣其它人就不能修改了。

  不過公司里團隊開發一般不會這樣干,大家協作開發,在更新文件和提交文件的時候自己注意下就好了。

  ①比如我即將修改Log.java,Get lock加鎖。

  

  ②輸入備注

  

  ③用chiangchou賬號去修改Log.java,然后提交文件,則無法提交。

  

  ④這時就需要你釋放這把鎖,其它用戶才能提交了。

  

 沖突總結:

  沖突產生的原因:提交程序文件,本地版本號小於服務器版本號。

  沖突解決:

    ①令牌方式:給每個文件設置令牌,誰獲得令牌誰有權利開發該文件。vss源代碼控制管理軟件使用該方式。

    ②通過版本號進行控制:用戶commit文件,本地文件版本必須與倉庫版本號一致才可以提交,否則禁止提交。

      本地與服務器版本號不一致,一定是本地的版本號小於服務器的。SVN就是通過版本號解決沖突。

  所以在平時的開發中,首先你需要時刻將代碼更新到最新的版本,再寫代碼;然后提交代碼前先更新下代碼。

  其次,就算發生沖突,不能隨意覆蓋別人的代碼,先商量下,有時候你覆蓋了別人的代碼,很容易出問題而長時間找不到原因。

 再說一下文件前面的標志:

   ①藍色問號:新建的一個文件,本地.svn和遠程倉庫都沒有該文件的記錄

   ②藍色加號:本地的.svn對該文件形成管理

   ③綠色勾號:本地文件、.svn管理的版本文件、遠程倉庫 三者一致

     ④紅色嘆號:本地文件與.svn和倉庫的文件不一致,即用戶修改了該文件

   ⑤黃色嘆號:表示該文件正處於沖突狀態 

 

六、在IntelliJ IDEA中使用SVN

  看到這里,如果你細心的話,發現上面演示沖突的時候有些代碼是錯的,請不要太在意,用記事本寫的,有些沒注意到。在開發工具中就體現出來了。

  因為我平時使用IntelliJ IDEA做開發,這里簡單講一下如何在IDEA中使用SVN。

 1.在IDEA中配置SVN,Ctrl+Alt+S快捷鍵打開IDEA的設置或者File -> Settings;設置你的svn的路徑

  

  2.導入項目就不說了,File -> Open,會自動變為idea項目。我這里已經將User.java里面的錯誤改正過來了;然后添加了maven管理(pom.xml)和一個配置文件。

   我導入的是bojiangzhou目錄下的項目。

  3.記得在開發前先更新下你的代碼,更新代碼點擊工具類的藍色按鈕(或者你配置的快捷鍵)

  

  要求輸入密碼:

  

  4.新建文件,添加.svn管理,會自動將新建的文件添加到.svn管理中。

  

  5.提交文件:點擊綠色的按鈕 -> 勾選你要提交的文件 -> 寫上備注 -> 提交

  

  6.我重開一個IDEA打開chiangchou目錄下的項目,用chiangchou登錄,並更新代碼

  7.如果不需要提交的代碼可以將其放到另一個目錄下,我這里改了UserController和config.properties,config.properties是針對我本地的配置,所以不希望提交上去。

  提交的時候先去掉你不提交的文件;

  

  然后會彈出這個:加入到另外一個不提交的文件夾,點擊Yes

  

  然后你需要新建一個文件夾

  

  然后你就可以在Version Control(快捷鍵Alt+9)的Local Changes中看到NO這個目錄,以后不需要提交的文件都可以放到這個目錄;Default是你修改的文件默認存放的目錄。

  你也可以直接在這里右鍵新建目錄,而不用上面的方法;然后把文件移動到那個目錄即可。

  

  8.可以在Version Control的Repository中看到提交的日志、版本、開發人員等

  

  9.解決沖突,這里講下代碼沖突

  ①可以看到最新的版本是20,chiangchou先改了代碼,但還沒提交:

  

  ② bojiangzhou先更新代碼之后改了同一處的代碼。這次,bojiangzhou先提交代碼,讓chiangchou的代碼沖突....

   

  ③換chiangchou登錄,更新代碼,沖突:

  

  你如果點了Close,就會看到跟之前一樣的東西了。

  

  ④解決的方式  

  一是你可以選擇Merge,合並代碼,你可以選擇哪些代碼需要保留,哪些不需要。不過一般不建議這樣做,很容易遺漏。

  左邊的是你的代碼,中間的是合並后的代碼,右邊是服務端的最新代碼。然后可以點中間的 x 去掉這段代碼,或者 》 保留這段代碼。

  

  然后就是,建議直接點擊Accept Theirs,相當於Revert到服務端;如果你點擊Accept Yours,則你的代碼就覆蓋了別人的代碼。除非你十分確定,否則不能這樣干...

  

  Revert按鈕,撤銷所有改動,直接與服務器保存一樣。如果沖突了,記得把多余的文件手動刪除。

  

  10.查看項目的所有提交記錄,這個是SVN的記錄;如果你想看你本地的,IDEA是記錄了你的文件的每一次的變更記錄的,可以看Local History,這個就不在這里說了。

  

  然后你可以根據這些歷史記錄對比現在的代碼,想要找回以前的代碼也是很簡單的了,就自己試試吧。

  

  

  IDEA中使用SVN就說到這里了!!

 

七、分支、合並、切換

  1.首先了解下SVN的目錄結構:

  branches:存放支線副本:當項目穩定以后,先發布到 tags 下,如果發現了 bug,再從 tags 下檢出到 branches下。在該版本下進行 bug的修復,把修復完畢的穩定的版本重新發布到 tags下。

  tags:存放標簽副本,也就是存放穩定版本

  trunk:存放開發的主線,團隊成員在開發的時候一直要用這個庫中的內容

  

  2.假設我們的lyyzoo-scm第一個版本已經開發完了,版本號為1.0吧。現在來發布到tags

  ①我現在使用運維人員的賬號登錄,將整個庫檢出到運維人員的電腦上。

       

  ②進入到trunk目錄,在lyyzoo-scm上右鍵 -> TortoiseSVN -> Branch/tag 

   

  ③點擊右邊的選擇tags目錄,然后輸入/lyyzoo-scm-1.0,因為這里是拷貝lyyzoo-scm目錄下的文件。然后點擊OK

  

  ④然后在tags目錄下更新下,就可以看到發布的1.0版本了

  

  3.上面已經發布了第一個版本,現在trunk下開發的版本屬於2.0的;然后發現了1.0的一個bug需要修復下,現在將tags下的lyyzoo-scm-1.0做一個分支出來,再修復bug。

  不能直接將tags目錄下的lyyzoo-scm-1.0檢出進行修改,tags目錄是不能用於開發的。

  ①到tags目錄下,將lyyzoo-scm-1.0做一個分支到branches目錄下;跟上述同樣的操作。

   

  ②開發人員檢出lyyzoo-scm-1.0-fix-1.0進行bug修復,並提交代碼。

  

  ③然后對分支進行發布,發布到tags/lyyzoo-scm-1.1。然后更新tags,看到最新發布的版本

  

  

  4.合並,把1.1版本中改動的代碼合並到trunk中去

  推薦博客:SVN merge 三種方式

  ①在trunk/lyyzoo-scm/src上右鍵,選擇Merge

  

  ②Merge a range of revisions,合並一個范圍的版本。

  你可以選擇你具體修改的那個文件進行合並。這里選擇tags的1.1版本進行合並,然后點Next -> Merge進行合並。

  

  ③選擇tags/lyyzoo-scm-1.1進行合並,點Next -> Merge合並到trunk下。

  

  ④提交合並過來的文件。注意是否有沖突產生。然后開發人員更新到最新版本。

 

八、使用http方式訪問SVN

  通過svn://svn.lyyzoo.com/svn/repo這樣的方式去訪問版本庫,這是svn特有的方式,只能通過svn客戶端訪問服務端。

  如果你想通過http的方式訪問(比如在瀏覽器里訪問),如http://svn.lyyzoo.com/svn/repo,則配置起來就比較麻煩了。

  這里只說下實現方式,可自行查找資料實現。在公司開發中我們一般不用去管服務端的事情,我們只需會使用客戶端即可。

  1.利用Apache配置實現http的方式訪問Subversion

   推薦博客: 配置http方式訪問svn服務器 

  2.如果你發現你的Apache或SVN里沒有那些文件,你可以使用集成Apache的SVN: Subversion + Apache Server。不用配置,安裝即可使用。

  CollabNet需要你先注冊個賬號,SVN是免費使用的。

  官網下載地址:https://www.collab.net/downloads/subversion

  

  3.最后就是Subversion Edge了,集成Subversion + Apache + ViewVC,它集合了Subversion所需要一切資源,無需單獨安裝第三方軟件,且更新快,具備圖形操作功能,方便使用。

   推薦博客: CollabNet Subversion的Windows安裝及使用說明

   

 

九、SVN對比Git

  這里從別的地方貼過來的,原文:http://www.jianshu.com/p/96f2db36044b

  • 適用對象不同。 Git 適用於參與開源項目的開發者。 他們由於水平高,更在乎的是效率而不是易用性。Svn 則不同, 它適合普通的公司開發團隊。使用起來更加容易。

  • 使用的場合不同。 Git 適用於通過Internet,有多個開發角色的單個項目開發, Svn 適合企業內部由項目經理統一協調的多個並行項目的開發。

  • 權限管理策略不同。 Git 沒有嚴格的權限管理控制,只要有帳號,就可以導出、導入代碼,甚至執行回退操作。 Svn 則有嚴格的權限管理, 可以按組、按個人進行針對某個子目錄的權限控制。區分讀、寫權限。更嚴格的,不支持回退操作。保證代碼永遠可以追蹤。

  • 分支( branch )的使用范圍不一樣。 Git 中, 你只能針對整個倉庫作 branch, 而且一旦刪除,便無法恢復。而 svn 中, branch 可以針對任何子目錄,它本質上是一個拷貝操作。 所以,可以建立非常多、層次性的 branch, 並且,在不需要時將其刪除,而以后需要時只要 checkout 老的 svn 版本就可以了。

  • 基於第三點, Git 適用於單純的軟件項目,典型的就是一些開源項目,比如 Linux 內核、 busybox 等。相反, Svn 擅長多項目管理。 比如,你可以在一個 svn 倉庫中存放一個手機項目的 bsp/ 設計文檔 / 文件系統/ 應用程序 / 自動化編譯腳本, 或者在一個 svn 中存放 5 款手機項目的文件系統。 git 中必須建立 n ( 項目數 )* m (組件數) 個倉庫。 Svn 中只需要最多 n 或者 m 個就可以了。

  • Git 使用 128 位 ID 作為版本號, 而且 checkout 時要注明是哪個 branch, 而 svn 使用一個遞增的序列號作為全局唯一的版本號, 更加簡明易懂。雖然可以使用 git tag 來建立一些文字化的別名,但是畢竟那只是針對特殊版本。

  • 可跟蹤性,git 的典型開發過程為: 建立分支,進行開發,提交到本地 master,刪除分支。這樣做的后果是以前的修改細節會丟失。 而在 svn下做同樣的事情,不會丟失任何細節。

  • 局部更新,局部還原。SVN由於是在每個文件夾建立一個.svn文件夾來實現管理,所以可以很簡單實現局部更新或者還原。假如你只希望更新某些部分,則svn可以很好實現。同時代碼寫錯了,同時可以很好實現局部還原,當然git也可以通過歷史版本還原,但是無法簡單地實現局部還原。

 

-----------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM