svn的分支與合并
作者:fbysss msn:jameslastchina@hotmail.com blog:blog.csdn.net/fbysss 聲明:本文由fbysss原創,轉載請注明出處 關鍵字:svn分支合并
1.創建分支的意義
創建分支的意義,比如我們在一個基礎平臺上進行開發,每個技術小組負責一個子項目,而基礎平臺也是有可能會繼續更改的,這個時候,如果不創建分支,子項目之間會相互影響,影響最大的就是后期的測試和版本發布,子項目A已經結束,但測試卻受到正在進行的子項目B的影響,測試通不過,就別說版本發布了。所以,我們需要從目前的項目(主干trunk)中創建分支(branch),隔離子項目間的相互影響。
2.svn創建分支原理
在svn中,創建分支,實際上就是一個版本拷貝(對應copy to...注意:絕不是簡單在客戶端上copy一個目錄,而是svn倉庫中copy,文件版本號會增加。),兩邊做任何修改發生的版本變化,是一套機制。舉例:目前主干版本是100,分支版本是101,主干中增加一個文件,版本為102,分支中再增加一個文件,版本就為103了。兩邊的版本號是一套,不會重復。
3.svn創建分支的方法
TortoiseSVN:右鍵點擊工程目錄->TortoiseSVN->Branch/tag..菜單,From WC at Url自動為工程svn url,比如https://localhost:8443/svn/fbysss/prj1/trunk,to Url填寫https://localhost:8443/svn/fbysss/prj1/branches/branch1。點OK按鈕,分支就創建好了。
Subclipse:Team->Branch/tag..,跟上面類似.
SVN命令模式:svn copy trunk_path branch_path -m '描述'
舉例:svn copy https://localhost:8443/svn/fbysss/prj1/trunk
https://localhost:8443/svn/fbysss/prj1/branches/branch1 -m "第一個分支"
注意一點:trunk和branch不能互為子目錄,否則就亂套了。
4.分支合并
1)從分支合并到主干
分支開發結束之后,往往需要合并回主干去測試、發布,但分支和主干可能有很多沖突的地方,在合并時經常需要手工解決。
被操作對象:主干
From:主干的打出分支時的版本
To:分支的Head版本(最新版本)
怎么理解這個From和To呢?似乎跟我們的想當然不太一樣:因為我們理解,把分支合并到主干,肯定是From分支,To主干。怎么搞反了呢?
實際上,Svn認為,我們要合并的,是從主干的某個版本開始,到分支的某個版本結束。兩邊的版本號實際上是一套系統,不會有重復。我們從TortoiseSVN Help中也能找到證據:
- If you are using this method to merge a feature branch back to trunk, you need to ........
- In the From: field enter the full folder URL of the trunk. This may sound wrong, but remember that the trunk is the start point to which you want to add the branch changes. You may also click ... to browse the repository.
- In the To: field enter the full folder URL of the feature branch.
2)從主干合并到分支
試想這樣的情況:一個項目里面,要獨立出來一個子項目,需要單獨發布版本,用到了基礎框架代碼,而基礎框架在主干中不斷修改完善,這就需要從主干合并到分支。
被操作對象:分支
From:分支的第一個版本(最舊版本)
To:主干的Head版本(最新版本)
相當于從分支的第一個版本開始一直到主干最后一個版本結束合并之后,替換分支。
3)從分支合并到分支
有這樣的需求:一個項目中有很多分支,這些分支需要分期上線,有多個工作并行,但每一期之間不能相互影響,這就可以打出幾個tag(也是分支),從主干copy而來。其他主干根據排期分別合并到這些tag中來。比如有prjTag1和prjTag2,model1、model2需要合并到prjTag1中,model3、model4需要合并到prjTag2中。拿prjTag1舉例:
在prjTag1的work copy中,merge
From:主干的打出分支時的版本
To:分支的Head版本(最新版本)
注意:From不是本Tag的某個版本,而是之前主干打出分支時的版本,最終Merge到prjTag1的work copy,而prjTag1是找不到當初打分支時的版本的。
浙公網安備 33010602011771號