MyEclipse下SVN主干與分支的合并操作
一、分支的應用環境
1. 什么是分支?
分支是項目開發過程中,從項目中的某一版本獨立出來的一個單獨模塊,它可以 包含項目的全部組成成分,也可以僅僅包含其中某一個部分。
2. 分支的應用
a. 多個版本項目的維護
當一個項目存在多個不同的版本時,有可能項目的各個版本主體代碼都相同,只有一些少量的部分存在區別,此時如果把每個版本都用不同的SVN版本庫進行管理顯得比較臃腫,而且也會造成SVN服務器文件存儲空間浪費,而如果保留一個項目的主體,對不同的版本創建不同的分支,則僅僅需要關注那些各版本間有差別的文件,易于SVN版本庫的維護,同時當完成一個通用功能時不需要更新多個版本的SVN庫,對于開發效率也有提升。
b. 在新版本未完善時對舊版本的維護
在項目上線后,當用戶發現正在使用的版本中存在某些急需修改的問題,而新的版本推出時間不能滿足用戶需求,則需要創建一個舊版本的分支獨立在主干之外,主干繼續新版本的開發,而分支則關注于用戶所提出問題的修改,這樣既不影響問題的修改,也不影響新版本的開發進度,當新版本完成后再將分支合并到新版本,同樣也不會留下有隱患的問題。
c. 多個開發人員協同開發的工作模式
在一些協作開發的團隊中,采取每個開發人員都為自己的模塊建立一個分支的開發模式,這樣代碼的主體存在于主干中,開發人員只需要關注自己的模塊,且可以放心的從主干更新別人的修改和提交自己模塊的代碼到分支,而不用擔心引起任何沖突,最后將各個分支一起合并到主干。
二、創建分支
l 在SVN服務器上創建一個新的版本庫,包含基本的版本庫目錄(trunk、branches、tags)。
l 新建項目(demoSvn)并提交到SVN的主干trunk目錄下。
1. 為項目demoSvn創建分支
打開MyEclipse的SVN庫瀏覽視圖(SVN Repositories),找到demoSvn提交的版 本庫,在SVN的主干目錄trunk 上右鍵 -> new -> Branch 創建分支。


點擊【OK】創建分支,創建好的分支目錄結構如下:
2. 也可以為項目的某一部分創建分支
在demoSvn的WebRoot下新建目錄demo,并提交至SVN的主干。切換至SVN庫 瀏覽視圖為demo目錄創建分支,在demo目錄上右鍵 -> new -> Branch 創建分支
創建demo目錄的分支結構如下所示:
3. 同時還可以對分支創建分支,操作與以上類似,不在贅述
三、對分支的操作
1. 直接將分支作為一個項目import到本地進行修改,然后提交。
1) 將分支brhMain作為一個項目導入本地工作區間。

2) 在導入的項目demoBrhMain的demo目錄下新建JSP文件brhMain.jsp。

3) 將項目demoBrhMain的本地修改提交至SVN后,查看版本庫,發現分支brhMain的demo目錄下多了一個brhMain.jsp文件,由此實現對分支的修改。

2. 使用switch操作實現對分支的修改
switch操作將當前工作區間所選目錄的文件同步為所切換的分支的文件,并且該目 錄下的版本由分支進行管理。switch操作與update操作功能類似,只不過update 操作只能固定的從某個版本庫進行更新,而switch操作可以自由的選擇版本庫。
在項目demoSvn中使用switch操作實現分支brhDemo的修改:
1) 在demo目錄上右鍵 -> Team -> Switch,此操作將本地demo目錄的文件同步 成brhDemo分支的文件,demo目錄的版本庫切換為brhDemo。

2) 選擇將brhDemo分支同步至本地demo目錄

3) 本地工作區間的demoo目錄切換為brhDemo分支后,可以看到在demo目錄 及其下的文 件右下角有一個小箭頭,如下:

4) 此時工作區間的dmeo目錄已切換,可以在demo目錄下新建MyJsp.jsp,然后 提交,查看提交后的SVN版本庫,發現MyJsp.jsp已提交至brhDemo分支 下,而不是提交到trunk主干的demo目錄下,如下:

5) 此時對demo目錄下的修改,提交后都會更新到brhDemo的分支目錄中去,而 不會對主干的demo目錄有任何影響,若想對主干的demo目錄做出修改, 只需再進行switch切換回主干的demo目錄即可
注意:
l 需要進行switch切換的目錄(或整個項目)需要有一個與之有關聯的分支。
l 進行switch切換時,若切換的不是全部項目,而是項目下的某一個模塊,需要考慮到該某塊內部可能會有對模塊外文件的依賴,本地工作區間中那些依賴的文件可能與分支中依賴的文件有所差異,當該模塊切換至分支時,可能導致本地項目出現錯誤。
四、主干與分支的合并
1. 合并操作
1. 主干于分支的合并流程

2. 將分支合并到主干的操作就是將需要合并到主干的分支數據同步到本地工作區間,再由本地工作區間提交到主干版本庫。
3. 在上文中已在項目demoSvn創建目錄demo,并已創建demo目錄的分支brhDemo,也已經介紹過如何對分支brhDemo進行操作,現在通過將對分支brhDemo的修改合并至demo實現從分支到主干的合并。
將分支brhDemo的修改合并至主干:
1) 在demo目錄上進行switch操作,將分支brhDemo的文件同步至本地工作區間,在switch后的demo目錄中新建JSP文件demo.jsp,然后提交。檢查SVN版本庫,發現demo.jsp已提交至brhDemo下,而并未提交至主干的demo目錄下。
2) 將本地demo目錄通過switch切換同步回主干的demo目錄,檢查發現本地demo目錄下并無剛剛創建的demo.jsp,此時已實現對分支的修改,并提交至brhDemo。
3) 1),2)兩步參考上文中對分支的操作,不再做圖片說明。
4) 將分支的修改合并至本地工作區間,brhDemo的分支中含有demo.jsp文件,而本地的demo目錄中沒有該文件,先通過Merge操作將brhDemo中的文件與本地的demo目錄合并(注意此操作與switch操作的區別,switch操作是將brhDemo中的文件完全同步至本地工作區間,且改變所切換目錄的版本庫)在demo目錄上右鍵 -> Team -> Merge

【Ignore Ancestry】選項指是否忽略合并文件之間的祖先關聯,勾選后不管合 并的兩個文件之間是否有關聯,都會進行比較然后合并,而不勾選的時候, 若兩個文件沒有關聯則會直接刪除主干上的那個目標文件,然后將分支的相 應文件覆蓋。
【Record Only】勾選后僅僅合并當前選擇目錄下的文件,不會遞歸的合并該 目錄下子目錄及其中文件。
選擇將brhDemo分支合并至本地的demo目錄。

5) 合并后查看本地工作區間,發現已將demo.jsp同步至本地demo目錄。
6) 提交本地工作區間的更新,檢查SVN版本庫,發現主干的demo目錄已和brh分支的文件完全相同,由此實現brhDemo分支到主干的合并。

7) 合并后主干和brhDemo分支中demo.jsp文件完全相同,若在主干和分支分別對demo.jsp進行修改并提交,則當再次進行合并時,可能會產生沖突,此時需要手動的處理沖突文件。
將brhDemo分支和brhMain分支的文件同時合并至主干:
1) 本文采用的的SVN插件支持同時將兩個分支合并至主干,操作步驟與將一個分支合并至主干類似,不再做圖片說明,區別僅僅在選擇分支時,需選擇兩個分支。
2) 將兩個分支合并到主干的操作往往伴隨許多沖突,個人建議在需合并大量文件時不建議此種合并方式。
2. 取消合并
1. 未提交至主干時,取消本地工作區間的修改
在要取消的目錄上右鍵 -> Tean -> Revert
五、參考
l http://www.subversion.org.cn/svnbook/
六、說明
l 本文截圖均在MyEclipse10.6加SVN插件下完成,視工具版本不同略有區別。