2

虽然这里有几个类似的问题(例如,SVN - Reintegration Merge error: "must be ancestrally related")和网络上,但我无法弄清楚为什么svn mergeinfo <file>会在我的所有 SVN 存储库中导致错误。与我发现的所有其他问答相比,我实际上能够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 --recursivesvn propget svn:mergeinfo --depth=infinity不输出任何内容并成功返回状态码 0。

有谁知道如何将我们的文件修复为与它们所在的项目再次“祖先相关”?

4

1 回答 1

1

简短的回答:svn mergeinfo <file>是错误的。

从 SVN 文档(svn help mergeinfo):

“总结一下 SOURCE 和 TARGET 合并的历史。”

“SOURCE 和 TARGET 分别是源分支 URL 和目标分支 URL。”

“默认目标是当前工作目录 ('.')。”

因此,如果您的命令类似于svn mergeinfo pom.xml,则错误消息与预期的一样,因为该文件与其目录之间没有“祖先关系”。
正确的命令是: svn mergeinfo pom.xml pom.xml,它将比较这两个文件,并且可能是您想要的。

当你跑步时svn mergeinfo .,它和跑步一样svn mergeinfo . .。所以它起作用了,你得到了 mergeinfo 输出。

你也可以运行svn mergeinfo pom.xml pom.xml@12345, 来比较一个特定的版本。


尝试合并不相关的内容时,您也可能会收到此错误。
如果您手动创建了目录树或文件(我的意思是:不使用分支功能),那么它们是不相关的,您将收到此错误。

请阅读this question并注意作者dev手动创建了分支,破坏了SVN。

在这种情况下,最好的解决方案是正常创建分支,手动将所有文件迁移到该分支(复制粘贴所有内容),然后将其合并回主干。

于 2017-10-03T18:42:35.903 回答