【问题标题】:How can I merge two SubVersion branches to one working copy without committing?如何在不提交的情况下将两个 SubVersion 分支合并到一个工作副本?
【发布时间】:2012-10-23 21:02:19
【问题描述】:

我目前的 SubVersion 工作流程是这样的:

  1. 主干用于对主要源代码进行小的内容更改和错误修复。
  2. 分支用于添加/编辑增强功能和项目。

因此,主干更改的制作、测试、提交和部署都非常迅速。而增强功能和项目需要额外的用户测试和批准。

当时,我有两个分支机构需要同时进行测试和批准。在更改完全测试和批准之前,我不想合并到主干并提交。

我需要做的是将两个分支合并到一个工作副本而不进行任何提交。

我正在使用 Tortoise SVN,当我尝试合并第二个分支时,我收到一条错误消息:

无法合并到具有本地修改的工作副本中

有没有一种方法可以在不提交合并的情况下做到这一点?

【问题讨论】:

  • 看起来错误消息正在生成,因为您没有将更改提交到分支,与合并本身无关。
  • 在终端中,svn 有一个 --force 参数来解决这个问题。 Tortoise SVN 不支持吗?
  • 我决定在这里放眼望去,彻底重新考虑我们的测试/部署程序,以防止出现此类问题。

标签: version-control svn


【解决方案1】:

您目前有主干和 2 个分支 A 和 B(它们都是主干的分支)。我建议您创建另一个名为 AB 的分支,如下所示:

  1. 将您的工作文件夹切换到主干(如果还没有的话)
  2. 更新最新版本并确保您没有本地修改。如果你这样做了,要么提交它们(到主干),要么在适当的时候恢复它们。
  3. 从主干对您的工作文件夹进行最后一次更新。记下您更新到的版本号(称为版本 R)。
  4. 在 repo 中,将主干的修订版 R 复制到名为“AB”的新分支(不要不要将您的工作文件夹切换到 AB)
  5. 将您的工作文件夹与 A 合并。
  6. 将您的工作文件夹切换到 AB。
  7. 提交您的工作文件夹(到 AB)并更新(从 AB)。
  8. 将您的工作文件夹切换到主干。
  9. 将您的工作文件夹与 B. 合并。
  10. 将您的工作文件夹切换到 AB。
  11. 将您的工作文件夹提交给 AB。
  12. 测试并向 AB 提交任何修复。
  13. 当它正常工作并且您准备好将所有内容合并到主干时,请执行最终提交(到 AB),然后更新您的工作文件夹(从 AB)。
  14. 将您的工作文件夹切换到主干。
  15. 将您的工作文件夹与 AB 合并
  16. 测试和修复
  17. 当它工作时,将工作文件夹提交到主干。
  18. 出去喝啤酒

【讨论】:

    【解决方案2】:

    我们曾经有过类似的工作流程。我最终找到的解决方案是保留多个本地副本,基本上每个分支一个。有时使用共享数据库有点冒险,但总的来说它非常成功。

    【讨论】:

      【解决方案3】:

      您可以在本地驱动器上的不同位置签出要合并到的分支的另一个副本,合并到其中然后提交。然后删除整个第二个工作副本并返回您当前的任务。

      但是您似乎确实在尝试颠覆自己的工作实践-除非您只想将 2 个分支合并在一起以同时提交所有工作并删除 2 个旧分支...但是,是什么阻止您提交在这种情况下正常合并?

      【讨论】:

        【解决方案4】:

        每个合并操作都在您的本地沙箱中完成。在您提交一些垃圾代码之前,您不必担心。

        我不知道您执行的整个部署过程,但您可以做的是:

        1. 切换到分支 A
        2. 将分支 A 与分支 B 合并
        3. 构建应用、部署和测试它

        如果一切正常,您可以提交所有更改(您在分支 A)。然后你可以切换到主干并与分支 A 合并。所有冲突解决后,你可以在主干上提交,仅此而已。

        【讨论】:

        • 我认为这行不通...您不能“将分支 A 与分支 B 合并”,因为 B 不是 A 的分支...而是 B 是树干
        • 这不起作用,因为我可能想一次只部署一个更改。
        【解决方案5】:

        Eric,“我可能想一次只部署一个更改...”和“将两个分支合并到一个工作副本而不提交”是不兼容的要求:或者您将在一个分支后测试一个分支或混合两个分支一大堆。

        版本 A 无论如何 - 您可以在 repo-tree 中将任何节点与任何节点合并,而不仅仅是 somebranch 与主干。即,共同点,@JoelFan 工作流程很好,但是 - 需要较少的操作

        1. 将主干的 HEAD 复制到 AB
        2. AB 与 A 合并
        3. 提交合并集、测试等...
        4. 将 AB 与 B 合并
        5. 测试合并结果
        6. 合并到主干并删除临时AB-branch

        版本 B 是 2-URL 合并。 svn help merge,“2-URL 合并示例”部分作为开​​始。您可以在一个命令中将 2 个独立的分支合并为第三个 merge BRANCHA[@N] BRANCHB[@M] [TRUNK_WCPATH]

        【讨论】:

        • 我的意思是,我可能想同时测试两个分支以确保它们兼容,但不提交它们,因为它们是兼容的,但我只想在本周部署一个,以及从现在开始的另外两周。
        • @EricBelair - 结帐 (2) 主干的附加 WC,在 WC1 中合并 branchA,在 WC2 中合并 branchB ?!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-23
        • 2020-07-06
        • 1970-01-01
        • 2016-08-25
        • 1970-01-01
        • 2016-08-15
        • 1970-01-01
        相关资源
        最近更新 更多