如何重新合并从SubVersion中的主干版本重新创建的分支?

时间:2014-06-17 14:14:43

标签: svn version-control merge tortoisesvn revert

我的SVN存储库中有以下架构:

/trunk
/branches/TESTING
/branches/STAGING
/branches/PRODUCTION

以下是我的正常版本控制工作流程:

  1. 从主干创建功能分支。
  2. 提交对功能分支的更改。
  3. 测试完成后,将功能分支合并回主干。
  4. 删除功能分支,因为它们已合并/提交到主干。
  5. 准备好部署后,将主干合并到/ branches / PRODUCTION。
  6. 将/ branches / PRODUCTION中的更改部署到生产系统。
  7. 这个工作流程99%的时间都很有效。然而,昨天出现了一种情况,我在找工作时遇到了一些麻烦。

    自上次生产部署以来,我修复了一些错误,并处理了几个功能,所有功能都经过测试,然后合并并提交到主干。其中一个功能(由客户端)要求在6月17日上午部署。由于其他功能和错误并不重要,我等到6月17日将它们全部部署在一起。然后在6月17日下午,客户决定他们想要退出更改并等到以后的日期。

    以下是我采取的步骤:

    1. 恢复合并功能分支的主干版本(使用Tortoise SVN“从此版本恢复更改”选项)。
    2. 将反向合并的修订提交给主干。
    3. 将主干合并到/ branches / PRODUCTION。
    4. 将/ branches / PRODUCTION中的更改部署到生产系统。
    5. 这很好用,很容易退出更改。

      为了准备将来部署这些更改,我从合并功能分支的主干版本创建了一个分支。

      但是,当我尝试将这个新分支合并回主干时,没有合并任何文件更改 - 唯一的更新是更新主干属性。

      这似乎是版本控制的基本功能 - 退出更改并在将来能够重新合并它们 - 但我无法让它正常工作。还有其他方法可以使用SubVersion / TortoiseSVN吗?

2 个答案:

答案 0 :(得分:1)

你创建了一个分支,根本没有做任何更改,然后尝试将该分支合并回来。这应该总是导致没有变化!如果分支复活了以后在主干上被删除的旧代码,它将导致各种问题,没有人会使用分支。

正如Lazy Badger在评论中建议的那样,恢复功能的最简单方法就是简单地恢复首先删除分支更改的修订版。

如果您想继续使用当前的工作流程,我建议您恢复旧的已删除分支,其中首先进行了更改。然后再将该分支合并到主干中。或者,您可以分支当前的主干,并在该分支中,还原删除功能更改的更改。然后你应该能够将你的新分支合并到主干。

答案 1 :(得分:-1)

我在您的工作流程中看到了一些错误,错误和误用

  • 您删除了合并分支。为什么?现有的不再触及分支并不需要更多的空间,比在repo的最后修订中占用更多空间并且删除分支不会减少回购的一面。如果你想要/branches节点下的紧凑易读空间,你可以使用散列树而不是平面空间(类似/branches/YEAR/MONTH/BRANCHNAME
  • 从合并功能分支的主干版本创建分支(此分支中没有后续更改)几乎是0值操作:
    • 如果后续行李的更改与此版本中的代码状态发生冲突,则无论如何都必须手动解决冲突
    • 当您在SVN中合并两个树时,从分支点两个树中的更改会考虑到(真实图片更复杂,但这是一个有效且正确的简化 ),不是合并树中最新修订版的状态。你的"只需复制"分支内部没有变化,它没有为merge-result带来任何结果
    • 您可以再次重新合并已删除分支的HEAD(可能需要解决冲突,但我想,在任何情况下您都会拥有它,重新合并旧分支会让您只需更多金额
  • 具有撤销功能的主干状态的分支是没用的,毕竟:如果你想要返回修订,你可以通过反向合并修订撤消,你可以随时(有或必须)这样做通过反向合并修订,将修订与特征反向合并(并重复此反向合并最后反向合并任何时间的过程)