2015-06-19 101 views
0

使用svn 1.8,我無法弄清楚什麼是最佳的方式來重新合併櫻桃採摘(即我不想合併所有修訂回到主幹)。一切進展順利,只要我合併所有的修改,如:如何做顛覆合併櫻桃採摘沒有衝突

svn merge ^/branches/mybranch 

現在我有一個版本,在我的分支,它不應該被合併到主幹,比方說我的svn「歷史」是這樣的:

rev 20: reintegrated branch => trunk 
rev 21: added 'donotmergetotrunk.txt' to branch 'mybranch' 
rev 22: added 'monkey.txt' to trunk 
rev 23: added 'dog.txt' to branch 'mybranch' 
rev 24: merged trunk => mybranch, monkey.txt added to branch 

現在我想從mybranch到主幹重返一切,但修訂21,但無論我嘗試,我不斷收到衝突

Tree conflict on 'monkey.txt' 
    local file obstruction, incoming file add upon merge 

我曾嘗試喜歡的東西:

svn merge -r 21:24 ^/branches/mybranch 
svn merge -r 1:20 -r 21:24 ^/branches/mybranch 

當然的衝突可以手動解決,但在現實生活中,我得到了許多衝突這樣的,解決這些問題變得相當繁瑣。

如何在不發生衝突的情況下執行此合併?

回答

1

在你容易出現的情況你必須合併-r 23:24

更常見的情況下,你可以在形式上-rN:M使用最小所需範圍SRC和使用的變更的反向合併排除這裏面範圍不需要修訂:-c -R

+0

非常感謝您的回答。 'svn merge -r 23:24'只會將版本24(前向合併)合併回主幹。我得到了同樣的樹衝突。 'svn merge -r 20:24 -c -21'也給出樹衝突。似乎每當我使用一個範圍,我得到一個樹衝突。使用svn 1.8.13 btw。 – Moolie

+0

現在我注意到,使用反向合併'svn merge -r 20:24 -c -21'實際上會產生正確的結果(在簡單地將樹衝突標記爲已解決之後)。 dog.txt被添加,合併信息包含'/ branches/mybranch:3-19,22-24'。儘管如此,仍然無法解釋樹衝突......我不敢大聲說出來......一個錯誤可能是什麼? :) – Moolie

1

當您將分支合併到主幹時,應該跳過先前的同步從主幹合併到分支。

否則,Subversion會嘗試將它們合併到主幹,這造成衝突:

monkey.txt加入樹幹rev.22列入分支爲REV
rev.22。 24
然後當你嘗試合併分支到樹幹時,Subversion嘗試在主幹上應用rev.24並添加monkey.txt。但它已被添加!衝突。

你也可以嘗試玩http://svnbook.red-bean.com/en/1.7/svn.branchmerge.advanced.html#svn.branchmerge.advanced.blockchanges阻止一些修改合併到主幹。但在這種情況下,當你阻止所有不必要的修訂和執行主幹

svn merge ^/branches/mybranch 

Subversion可以威脅復興合併(適用所有差異)。我不確定Subversion 1.8是如何決定這是否會同步或重新合​​並,最好玩。

+0

AFAIK,跳過從主幹到分支的同步合併是不明智的。假設您在同步合併中修復了一些「常規」衝突。如果在重新合併合併時跳過同步合併,svn無法知道您已經解決了衝突,並且會再次給您帶來同樣的衝突。請記住,如果您只是像'svn merge ^/branches/mybranch'那樣重新整合所有內容,甚至沒有包含同步合併,您都不會遇到任何奇怪的問題。我會閱讀你提供的鏈接(希望他們發佈了紅色書的更新版本1.8)。謝謝。 – Moolie

+0

「請記住,如果您只是像svn merge ^/branches/mybranch那樣重新整合所有內容,甚至不包括同步合併,您都不會遇到任何奇怪的問題。」這是因爲Subversion 1.8猜測這應該是「重新合併」合併(並且<1.8需要選項 - 重新合併)。重新合併合併顯着不同於同步合併,恕我直言,不能引發衝突 –