SVN 項目版本管理之trunk(主線) branch(分支) tag(標記)使用

應用場景:

  1. 優異的跨平臺支持,對windows平臺支持非常友好。
  2. 簡單易用,安裝後稍微培訓下就知道怎麼操作。
  3. 代碼,需求,文檔,涉及稿都可以用svn進行管理,適合不同部門的技術非技術的同事協作。
  4. 當研發成本比較低,協作開發人數不多,開發人員對於版本管理的水平參差不齊的時候,或者對於代碼的安全性要求更高一點的時候,適合用svn

SVN倉庫目錄結構Repository:

truck(主幹|主線|主分支):是用來做主方向開發的,新功能的開發應放在主線中,當模塊開發完成後,需要修改,就用branch;
branch(分支):分支開發和主線開發是可以同時進行的,也就是並行開發,分支通常用於修復bug時使用;
tag(標記):用於標記某個可用的版本,可以標記已經上線發佈的版本,也可以標記正在測試的版本,通常是隻讀的;

以上權限是通過服務端右鍵 Properties for xx目錄來控制該目錄權限 以及賦予權限(前提是添加用戶,分組來分配對應的權限)

SVN具體操作步驟:

一:創建本地倉庫

1. 創建目錄結構D:\TortoiseSVN\Repository\XXX

2. 在該目錄結構上右鍵

---> TortoiseSVN

---> Create repository here(創建倉庫這裏) 

---> Create folder structure(創建文件結構)

---> Start Repobrowser(開始倉庫瀏覽)

---> Ok

最後如下:(branches,tags,trunk是手動創建的文件結構)

備註:還有一種是通過直接在VisualSvn Server上直接在Repository右鍵Create New Repository 下一步選擇single-projiect-reprository 進行創建帶有文件結構的倉庫,然後update到本地也是一樣的;

二:將項目上傳到SVN上

      桌面(或者文件下空白處)右鍵
       ---> TortoiseSVN

       --->repo-browser--> URL:  file:///D:/TortoiseSVN/Repository/xxx

      ---> Ok

       --> 選中trunk文件夾右鍵

       ---> Add folder... 

       ---> 選中要上傳到SVN的項目的最外層目錄,輸入日誌

       ---> Ok
備註: Check Out  檢出代碼就不需要講啦

三:開發週期

1.因爲項目剛建立,這是在開發新功能,所以要在主線trunk上開發;

2.開發一段時間後,經測試,上線;打包到Tags

 在D:\TortoiseSVN\Repository\Source\tags 目錄下新建一個目錄:1.0,並將該目錄提交到SVN上,然後右鍵   D:\TortoiseSVN\Repository\Source\trunk\MyAppProject該目錄  ---> TortoiseSVN  ---->Branch/tag...  -----> To Path :/tags/1.0/MyAppProject  並選中 Head revision in repository ---> Ok 此時Source/tags/1.0 目錄中沒有任何內容,需要更新一下該 目錄做update操作。更新之後看到一個完整的項目源碼保存到該目錄中(該目錄下的源碼可看做是trunk目錄下版本爲1.0的一個 副本);這樣就1.0的版本包就在tags裏面了
備註:以上是在本地倉庫進行創建文件,在VisualSvn Server也可同樣操作;效果一樣

  3.用戶或測試人員反饋應用有重大bug,需要立即修復該bug並儘快上線, 此時程序員需要爲 tags/1.0 下的MyAppProject 打一 個分支branch,
  操作過程如下:

選中Source/tags/1.0/MyAppProject

右鍵 TortoiseSVN---->Branch/tag...

 ----->ToPath:/branches/MyAppProject

 ---> Ok
 此時看D:\TortoiseSVN\Repository\Source\branches目錄下仍然沒有任何內容,也需要update一下,更新之後發現該目錄下
 也出現一個完整的項目代碼(該代碼可看做是tags/1.0/MyAppProject的一個副本),注意打分支和打標記都是使用Branch/tag...菜單,不同的是To Path 的目錄不一樣,圖解看打分支的圖,只是to path 值不一樣,此時branches/MyAppProject/HomeViewController中的viewDidLoad和tags/1.0/MyAppProject/HomeViewController中的viewDidLoad代碼完全一致。

4. bug 修復好後,先提交修改的文件,並進行客戶端App上線,上線完成後再將branches/MyAppProject/打個tag到1.0.1目錄下(tags/1.0.1)(操作步驟同步驟3);

5. 接下來將將trunk 主幹的代碼合併到branch分支,操作步驟如下:

         右鍵 branches/MyAppProject 

        ------>TortoiseSVN

         ----> Merge... 

         ---> Merge a range of revisions 

         ----> Next

--->URL to merge from : file:///D:/TortoiseSVN/Repository/Repo-iOS/trunk/MyAppProject

(這個路徑是誰,就是合併誰的代碼)

         ----> Next

         ----> Merge

備註:將branch和合併到trunk也是同上只是 右鍵 trunk/MyAppProject ,URL to merge from--...../branch/...

6. 此時合併徹底結束,branches目錄下的源碼如果不想要也可以刪掉,接着修改bug的這位程序員需要切換工作空間到主線上來,使用Xcode重新打開trunk/MyAppProject項目,接着開發尚未完成的新功能。

備註:

1. 分支開發和主幹開發是兩個完全獨立的過程,兩者可以同時進行開發
2. 因分支和主幹開發是並行的,所以兩者可以任意的多次提交當前工程所修改的文件;