svn mergeinfo - E195016:"必须是祖先相关的"

时间:2017-08-10 21:44:31

标签: svn svn-merge svn-mergeinfo

虽然这里有几个类似的问题(例如,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 --recursivesvn propget svn:mergeinfo --depth=infinity之类的命令不会输出任何内容并成功返回,状态代码为0。

有没有人知道如何修复我们的文件&#34;祖先相关&#34;再次参加他们所在的项目?

1 个答案:

答案 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。

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