虽然这里有几个类似的问题(例如,SVN - Reintegration Merge error: "must be ancestrally related")并且在网络上,但我无法弄清楚为什么svn mergeinfo <file>
会导致我的所有SVN存储库出错。与我发现的所有其他Q&amp; As相比,我实际上能够成功执行svn merge
。例如,撤消先前对pom.xml
文件的提交:
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/pom.xml@50446' must be ancestrally related to
'https://../trunk/MyProject@50446'
在这个例子中,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 --recursive
或svn propget svn:mergeinfo --depth=infinity
之类的命令不会输出任何内容并成功返回,状态代码为0。
有没有人知道如何修复我们的文件&#34;祖先相关&#34;再次参加他们所在的项目?
答案 0 :(得分:1)
简短回答:svn mergeinfo <file>
错了。
从SVN文档(svn help mergeinfo):
&#34;总结了SOURCE和TARGET之间合并的历史。&#34;
&#34; SOURCE和TARGET分别是源和目标分支URL。&#34;
&#34;默认目标是当前工作目录(&#39;。&#39;)。&#34;
因此,如果您的命令类似svn mergeinfo pom.xml
,那么错误消息就像预期的那样,因为没有&#34;祖先的关系&#34;在该文件和它的目录之间。
正确的命令是:svn mergeinfo pom.xml pom.xml
,它将比较这两个文件,可能就是你想要的。
运行svn mergeinfo .
时,它与运行svn mergeinfo . .
相同。所以它可以工作,你得到mergeinfo输出。
您还可以运行svn mergeinfo pom.xml pom.xml@12345
,以比较特定版本。
在尝试合并不相关的内容时,您也会收到此错误 如果您手动创建了一个或多个目录树(我的意思是:不使用分支功能),那么它们就不相关了,您将收到此错误。
请阅读this question并注意作者手动创建了分支dev
,打破了SVN。
在这种情况下,最好的解决方案是正常创建分支,手动将所有文件迁移到此分支(复制粘贴所有内容),然后将其合并回主干。