【问题标题】:Can Subversion record a merge without mergeinfo?Subversion 可以在没有合并信息的情况下记录合并吗?
【发布时间】:2016-10-06 11:56:50
【问题描述】:

我正在我们的一个存储库中搜索一组特别粗糙的旧版本,试图弄清楚几个所谓的合并发生了什么。

当我查看目标分支中的一个修订时,它显示的内容与源分支上的修订完全相同(相信我,我也检查了差异):

$ svn --log --verbose --use-merge-history --revision 100 ^/target
------------------------------------------------------------------------
r100 | <author> | <date> | 1 line
Changed paths:
   A /path/to/new/file
------------------------------------------------------------------------

但是,有些东西不见了。任何地方都没有记录 mergeinfo 属性更改,对吧?所以它不可能是合并,据我所知。也许是作者手工编辑了文件?

我仔细检查了 Subversion 认为符合条件的修订:

$ svn mergeinfo --show-revs eligible ^/source ^/target | grep 100

没什么!尽管缺少合并信息,Subversion 仍认为修订已被合并。

$ svn mergeinfo --show-revs merged ^/source ^/target | grep 100
r100

这可能吗?怎么样?


我在缺少合并信息时阅读了CollabNet articleSvn Book section

  • 合并不相关的源:不是这样的,正如我所说,我可以在源分支中看到确切的内容/差异。
  • 从外部存储库合并:同上。
  • 使用--ignore-ancestry:这是可能的(我不知道作者调用了什么命令),但是这个修订版不会出现在符合合并条件的列表中吗?
  • 从目标的自然历史中应用反向合并:从历史中可以明显看出这不是反向合并。

【问题讨论】:

    标签: svn svn-merge


    【解决方案1】:

    糟糕,据我所知,实际上 svn:mergeinfo 属性。我不记得svn log 是否打印仅属性更改(它必须),尝试运行svn log --verbose 或针对^/target 运行svn propget svn:mergeinfo --verbose


    阅读SVNBook | Merges Without Mergeinfo

    顺便说一句,不要忘记在 Subversion 1.5 中引入了 mergeinfo。因此,如果合并发生在较旧的 Subversion 版本中,则有可能这就是缺少 svn:mergeinfo 属性的原因。

    是的,提交作者出于无知可以手动编辑文件以使提交看起来像合并。

    【讨论】:

    • 我更新了我的问题。可能是忽略祖先选项,但这不会将源修订留在符合合并条件的列表中吗?
    • 我原来的日志语句很冗长。我想这是可能有人修改该属性作为另一个修订的一部分?
    • @AnthonyMastrean 是的,可以删除该属性,但该属性是版本化的,您应该能够找到调整或删除它的修订版。 --show-revs 显示 r100 已合并,mergeinfo 必须到位。检查根目录。
    • 在这种情况下,我怀疑有人添加了 对 mergeinfo 属性的修订。同样,有问题的修订版中没有记录合并信息,但mergeinfo --show-revs merged 显示了修订版。
    • 不过,似乎没有列出/查询属性历史记录的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2015-02-03
    • 2012-09-16
    • 2011-06-06
    • 2015-04-05
    相关资源
    最近更新 更多