1. 程式人生 > >例項講解SVN分支和合並問題

例項講解SVN分支和合並問題

本節向大家簡單描述一下SVN分支和合並方面的知識,在學習SVN的過程中SVN分支和合並時經常遇到的問題,在這裡和大家分享一下,希望本文對大家有用。
關於主線同SVN分支合併的概念及如何使用的誤區此問題是在netbuddy的問題上研究而成,走出誤區的過程中得到了pcplayer指點迷津。
一、我的合併需求
在主線的第54個版本上作了分支,在接下來的日子裡,主線和分支同時都有修改,此時需要將分支上的改動合併到主線上,合併前主線和分支都已經提交,截至到合併前,主線的修改達到了版本號66,而分支的修改達到了68。主線和分支修改的檔案不同。
二、我最初的錯誤操作
我當時的想法是合併,就是簡單的把主線的最新版本和分支的最新版本合在一起就成了,而且這也是符合我們的手工習慣。於是我就作出了一個錯誤的操作:
1、在SVN分支的工作副本上單擊右鍵,選擇合併,出現合併對話方塊,在起始路徑和版本號中選擇主線的最新版本,在結束路徑中選擇分支的最新版本,然後單擊合併,合併後,提示框內沒有任何合併的內容。
2、上個操作不成功,於是胡亂進行這個操作,在主線的工作副本上單擊右鍵,選擇合併,出現合併對話方塊,在起始路徑和版本號中選擇分支的最新版本,在結束路徑中選擇主線的最新版本,然後單擊合併,合併後,提示框內沒有任何合併的內容。
3、發現第2個操作仍沒有結果,更暈,於是進行下面的操作,在主線的工作副本上單擊右鍵,選擇合併,出現合併對話方塊,在起始路徑和版本號中選擇主線的最新版本,在結束路徑中選擇分支的最新版本,然後單擊合併,合併後,提示框內提示有檔案更新,開啟更新的檔案一看,原來是分支上的內容把主線上的工作副本覆蓋了。於是進行下一個實驗。
4、在SVN分支的工作副本上單擊右鍵,選擇合併,出現合併對話方塊,在起始路徑和版本號中選擇分支的最新版本,在結束路徑中選擇主線的最新版本,然後單擊合併,合併後,提示框內提示有檔案更新,開啟更新的檔案一看,原來是主線上的內容把分支上的覆蓋了。
總結操作問題:合併的起始和結束路徑不是同一路徑,而是主線和分支兩個不同的路徑
三、我把這個問題發到論壇,pcplayer指出了我的錯誤,即“起始選擇主線的最新版本,結束使用分支的最新版本”,並指明“應該選擇一條線上的兩個版本,這兩個版本間的改動會以打補丁的形式合併到另外一條線上”,於是看了一遍subversion中文手冊svnbook1.2版中第4章分支與合併,終於理解了合併的使用:
1、如果是需要將主線的改動合併到SVN分支上,需要在分支的工作副本下進行合併,合併的範圍是需要從主線上上次合併的版本到當前主線上最新的版本,如果主線和分支都修改了相同的檔案,合併後會出現衝突,然後解決衝突,如果主線修改但是分支沒有修改,則主線上合併的變更內容會增加到當前副本中,提交,如果是第一次合併,則起始版本號是上次建立分支的版本號
2、相反,如果是需要將分支的改動合併到主線上,需要在主線的工作副本下進行合併,合併的範圍是需要從分支上上次合併的版本到當前分支上最新的版本,合併後會出現衝突(衝突的前提如上種情況),然後解決衝突,提交,如果是第一次合併,則起始版本號是上次建立分支的版本號
3、正確的操作(對應我的需求,將分支上的改動合併到主線上):在主線的工作副本下單擊右鍵,合併,在起始範圍中選擇分支的54版本,結束範圍中選擇分支的最新版本(當然也可以修改到中間的其他版本,例如65等),然後單擊合併即可。由於我的需求中主線和分支修改的是不同的檔案,所以不會存在衝突,合併完後直接提交即可。
四、合併的工作是把主線或者分支上合併範圍內的所有改動列出,並對比當前副本的內容,由合併者手工修改衝突。如果當前工作副本是主線的,則合併的範圍是分支上的改動,如果工作副本是分支的,則合併範圍是主線上的改動。