如何确定svn:mergeinfo是否已损坏以及如何解决?

时间:2010-05-07 17:37:42

标签: svn merge branch agile-processes

我怀疑我有腐败的mergeinfo,但我不确定。有谁知道我如何做出决定以及有哪些资源来帮助解决问题?

这是问题所在。我的团队最近转向敏捷并使用功能分支(真正的故事分支),其中不同的团队同时处理相同的源。随着故事达到高度准备状态,团队合并到主干。由于缺少更改,意外更改和冲突,合并需要数天或数周。我们谈论的是5-10人的团队,努力/流失似乎很高。

人们使用这种合并模式 a)PULL - 合并trunk-to-branch,解析,测试,提交 b)PUSH - 合并分支到中继,解析,测试,提交 c)重新创建分支(或者通常创建新的故事分支,并在完成后丢弃旧分支)

在此结束时,分支和主干应该对齐。

我们看到的问题:

  1. 在后续分支到主干
  2. 中显示的主干到分支合并期间未报告的更改
  3. 合并期间对svn:mergeinfo属性的冲突
  4. 文件丢失,但在分支中添加新文件的本地编辑并推送到主干
  5. 传入+本地删除(在主干和分支上删除的文件显示为冲突)
  6. (1)不应该发生。从分支到主干的拉动应使两者同步,以便在主干上进行所有更改。分支到中继合并的变化是主干上发生的变化。因此,在第一次合并时,它们应该传播到分支但不会。这指向mergeinfo数据中的损坏,这将“隐藏”主干更改。

    (2)不应该发生。 SVN应该管理合并跟踪中的更改。这也指出了mergeinfo数据中的损坏

    (3)不应该发生。这是在分支上添加新文件的情况。它应该显示为添加到trunk的新文件。这也表明合并信息数据存在损坏。

    (4)我认为这是一个SVN错误,我们无法解决这个问题。如果这是我们唯一的问题,我会很高兴

    我们目前在svn 1.5.x服务器上,客户端使用svn 1.6.x和svn + ssh进行连接。我们计划推出最新最好的SVN,因为一些修复可能会影响我们的问题。

    但是,看起来我们的mergeinfo数据确实是错误的。

    • 不报告所有更改的合并
    • 合并mergeinfo属性时的冲突

    任何好的地方让我开始寻找?

2 个答案:

答案 0 :(得分:3)

由于类似的情况,我们遇到了类似的问题,并且很大程度上解决了这些问题。

主要的是:

如果你在分支创建后从trunk合并到你的分支,你需要用分支提交标记trunk(使用svn merge --record-only),否则当你尝试重新集成回trunk时它会尝试合并将树干提交回分支机构。

这显然最终会在后来的trunk->分支提交之后恢复对trunk的更改,往往会导致大量冲突(特别是如果你在trunk中创建了一个新的文件或目录,则会发生树冲突),等等。

所以我们的过程是在创建分支后永远不会将trunk同步到分支中(对于短期分支很好),或者执行以下操作:

  • 来自主干的分支b
  • 提交到主干和分支
  • 将trunk重新集成到分支并提交(解决冲突,但不进行任何更改,甚至编译)
  • 立即执行svn merge - 仅记录到trunk-to-branch提交修订版
  • 解决分支机构的任何其他问题并继续开发
  • 完成后从分支重新集成到主干。

我发现:http://www.collab.net/community/subversion/articles/merge-info.html在解决我们做错的事情时很有帮助。

答案 1 :(得分:2)

我做了一些SVN分支/合并的实验,我发现在某些情况下合并不起作用 - 例如,来自trunk的更改会被覆盖。因此,如果您继续使用SVN进行功能分支,那么您将陷入痛苦的世界。

我用git进行了类似的实验,但我还没有找到一种方法来获得不正确的合并。如果团队/管理人员可以接受转移到git,我强烈建议您使用它。