簡體   English   中英

SVN合並-當分支不共享共同祖先時合並回主干

[英]SVN Merge - Merging back to trunk when branch doesn't share common ancestry

我需要合並回使用svn mkdir而不是svn copy錯誤創建的分支branchA

使用svn merge --ignore-ancestry ^/branches/branchA . 導致許多樹沖突,我只能通過svn resolve --accept working 。盡管我需要的是,接受svn resolve --accept working是接受branchA的更改。 我想對,作為branchA是的超集trunk和沒有發生過任何承諾樹干平行於提交branchA

有什么辦法可以做到嗎?

注意:
我沒有運行svn-admin權限。

簡短的答案:您不能。 您不能這樣做,因為Subversion通常使用所謂的三路合並。 您需要兩個端點(分支的HEAD和主干的HEAD)以及最新的公共祖先 (MRCA)作為合並中的第三點。

MRCA用於確定分支上的更改和中繼上的更改。 假設我們的文件最初看起來像這樣:

one
two
three
four
five
six

在行李箱上,我們有:

one
FOO
three
BAR
five
FUBAR

在分支上,我們有:

one
two
BARFOO
four
five
six

現在,我們希望將分支與主干合並。 如果僅進行比較,就會看到第二行,您行,第四行和第六行是不同的。 但是,第二,第四和第六行在后備箱上進行了更改。 我們不想更改它們以匹配分支上的內容。 相反,分支上唯一更改的行是第3行。 我們將第3行從分支替換為中繼。 沒有其他線被觸及。

現在,Subversion合並要比這復雜得多,但這是三路合並的基本算法:您將要合並的兩個HEAD與它們的MRCA進行比較。 沒有MRCA,您將無法合並-這就是您所處的情況。

即使是--ignore-ancestory標志將無法工作,因為你已經foo.txt主干和foo.txt在你的分支。 在您看來,它們看起來像是同一文件,但根據Subversion來看,它們不是同一文件。 它們是兩個完全不同的文件,它們恰好位於同一目錄中並且具有相同的名稱。

如果您只是想讓樹干看起來像分支,可以嘗試--accept theirs-full標志。 同樣,我不確定100%會成功,因為Subversion可能會拒絕識別文件名。 如果您尚未安裝Subversion 1.8,則可以嘗試--reintegrate選項。

最后,您可以嘗試欺騙Subversion。 在主干的正確分支點進行另一個分支。 簽出新分支。 使用系統的復制命令(而不是通過Subversion)將文件從bad分支復制到該新分支。 現在,提交所有更改(您可能必須添加不存在的文件,並刪除不應該存在的文件)。 提交更改。

您應該有一個看起來與壞分支完全相同的新分支。 但是,由於該分支具有MRCA,因此您應該能夠進行合並。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM