【问题标题】:svn mergeinfo - E195016: "must be ancestrally related"svn mergeinfo - E195016:“必须与祖先相关”
【发布时间】:2018-01-19 07:17:52
【问题描述】:

虽然这里(例如,SVN - Reintegration Merge error: "must be ancestrally related")和网络上有几个类似的问题,但我无法弄清楚为什么svn mergeinfo <file> 会在我的所有 SVN 存储库中导致错误。与我发现的所有其他问答相比,我实际上能够成功执行svn merge。例如,撤消对pom.xmlfile 的先前提交:

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。

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

【问题讨论】:

    标签: svn svn-merge svn-mergeinfo


    【解决方案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。

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

    【讨论】:

    • 在历史上我看到一个提交(svn log --verbose --stop-on-copy),有人通过删除目录D /base/trunk/lib/plugin 并将其添加到另一个主干A /tools/trunk/plugin (from /base/trunk/lib/plugin:16026) 来移动目录。这可以解释为什么我会收到这些错误吗?
    • @dokaspar 我重读了你的问题,发现我误解了你的问题。改进了我的答案以正确解决您的问题。请问,你能检查一下吗?
    • 所以这一切都归结为 RTFM :)
    • @dokaspar 我不会那样说,但是是的:信息在手册中。而且我也误解了您的问题,并在第一次尝试时给了您错误的答案。但很高兴它帮助您解决了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    相关资源
    最近更新 更多