- SVN的合併操作其實是一系列操作的組合:
- 將主幹或某個分支上的一組修訂(即合併的源頭)應用到另一個分支或主幹(即合併的目標)的working copy(本地工作拷貝);簡單說,合併包括三要素——源頭、目標、目標的working copy;
- 如果出現衝突(conflict),需手工解決衝突;
- 最後提交,提交時還要在SVN備註中標明這是一次合併,如merge -r 5645:5650 svn://10.191.17.67/p17_ii/development/sourcecode/Branchs/P17-II/2011-03-17 發佈前又有小改動;
- 爲何會出現衝突,如何解決:
- 源不僅是個url,還包括一個修訂範圍,例如前面紅字示例中的-r 5645:5660;
- 假設源頭包含5646、5648、5650三個修訂版,working copy的當前修訂版是5649;
- 那麼合併時SVN實際進行的操作是:diff 5646 5648,然後apply到working copy;diff 5648 5650,然後apply到working copy;
- 這個過程中,svn也會分別diff 5646 5649,diff 5648 5649,如果這兩個diff任何一個與上文的兩個diff中的任何一個恰好改了同一行代碼,則出現衝突,相應的文件中會用標記分別標明這兩種diff差異,同時會生產3個臨時文件,分別是.working、.left_r5646、.right_r5650;
- 一般選擇手工解決衝突,但如果很對,也可以直接保留.right_r5650作爲最終結果,
- 更多內容,詳見svnbook。