2017-08-10 50 views
2

儘管這裏有幾個類似的問題(例如,SVN - Reintegration Merge error: "must be ancestrally related")和Web上,但我無法弄清楚爲什麼svn mergeinfo <file>在我的所有SVN存儲庫中導致錯誤。與所有其他Q &正如我所發現的那樣,我實際上能夠成功執行svn merge。例如,撤銷先前提交到pom.xml文件:svn mergeinfo - E195016:「必須是祖先相關的」

svn merge -r 17409:17408 pom.xml 
--- Reverse-merging r17409 into 'pom.xml': 
U pom.xml 
--- Recording mergeinfo for reverse merge of r17409 into 'pom.xml': 
U pom.xml 
--- Eliding mergeinfo from 'pom.xml': 
U pom.xml 

然而,當我執行svn mergeinfo,我得到以下錯誤:

svn: E195016: 'https://../trunk/MyProject/[email protected]' must be ancestrally related to 
'https://../trunk/[email protected]' 

在這個例子中,50446是目前的最新版本號對於我試過的每個文件,我都會得到同樣的錯誤。只有當我在頂部目錄本身執行mergeinfo命令時,它才起作用:

svn mergeinfo . 
    youngest common ancestor 
    |   last full merge 
    |   |  tip of branch 
    |   |  |   repository path 
    50446    50446 
    |     |  
    -------| |------------   ../trunk/MyProject 
    \       
     \       
     --| |------------   ../trunk/MyProject 
         |  
         50446 

而且即使是陌生人,我也沒有發現任何mergeinfo屬性集。像svn propget svn:mergeinfo --recursivesvn propget svn:mergeinfo --depth=infinity命令不輸出任何內容,與狀態代碼成功返回0

有沒有人有一個想法,我怎麼能解決我們的文件是「祖先相關的」再次它們位於項目?

回答

1

簡答:svn mergeinfo <file>是錯的。

從SVN文檔(SVN幫助合併信息):

"Summarize the history of merging between SOURCE and TARGET."

"SOURCE and TARGET are the source and target branch URLs, respectively."

"The default TARGET is the current working directory ('.')."

所以,如果您的命令是像svn mergeinfo pom.xml,則如預期的錯誤消息,因爲沒有「祖先關係」文件之間它是目錄。
正確的命令是:svn mergeinfo pom.xml pom.xml,這將比較這兩個文件,並可能是你想要的。

當您運行svn mergeinfo .時,它與運行svn mergeinfo . .相同。所以它的工作,你得到mergeinfo輸出。

您也可以運行svn mergeinfo pom.xml [email protected]來比較特定的版本。


嘗試合併不相關的事情時,也可能會出現此錯誤。
如果您手動創建目錄樹或文件(我的意思是:不使用分支功能),那麼它們不相關,您將得到此錯誤。

請閱讀this question並注意作者手動創建了分支dev,打破了SVN。

在這種情況下,最佳解決方案是正常創建分支,手動將所有文件遷移到此分支(複製粘貼所有內容),然後將其合併回主幹。

+0

遠在歷史中,我看到一個提交(帶有'svn log --verbose --stop-on-copy'),其中有人通過刪除它來移動目錄'D/base/trunk/lib/plugin'並添加它進入另一個主幹'A/tools/trunk/plugin(從/ base/trunk/lib/plugin:16026)'。這是否會解釋我爲什麼會遇到這些錯誤? – dokaspar

+1

@dokaspar我重讀你的問題,並注意到我誤解了你的問題。改進我的答案,正確解決您的問題。請,你能檢查它嗎? – MiguelKVidal

+0

所以再次歸結爲RTFM :) – dokaspar

相關問題