【问题标题】:how svn merge behaves during merging from branch to branch with different code basesvn merge 在使用不同的代码库从一个分支合并到另一个分支时如何表现
【发布时间】:2014-08-29 13:37:32
【问题描述】:

我们在 SVN 中有不同的分支,并在分支之间进行 svn 合并。每个分支几乎都相互关联,因为我们的代码是增量的。假设如果一次大约有 5 个分支(分支 1 、分支 2 等....),并且分支 X 在某个时间线合并到分支 Y 中,并且两个分支也都有自己的代码开发:

  • 分支 1 = 代码库 A(来自以前的生产分支)
  • 分支 2 = 代码库 A + 它自己对代码库 A 的更改

现在,如果分支 3 也具有分支 1 的代码库并具有自己的更改,即(代码库 A + 分支 1 更改 + 分支 3 更改)。 分支 4(从分支 1 创建并且也有自己的更改)

  • A) 现在如何将分支 2 合并到分支 3 以避免代码冗余和合并问题。**
  • B) 另外,我想将分支 3 合并到分支 4 中,同时保留分支 3 的更改。

现在我特别面临删除代码和在同一文件中重复代码的问题。

面临的问题

有时一个不处于冲突状态的文件会在文件中获得两次代码内容。并且

分支3和分支4的案例

在分支 3 中删除的代码在分支 4 中以某种方式再次可见 虽然合并是通过正向方法完成的 (branch1 --> branch2--> branch3 --> branch4)

我们尝试每次都保持相同的基础,但仍然遇到上述问题。 我想了解在上述情况下应该如何进行合并。请提出您的意见。任何具有 svn merge 实践知识的人都会非常有帮助。

PS:我已经研究过合并最佳实践,但现在有了清晰的方法。我知道合并的基本方法,但从来没有在这样的复杂场景中合并

【问题讨论】:

    标签: svn merge mergeinfo


    【解决方案1】:

    您需要考虑分支策略。好像有点复杂。四个分支代表什么?它们是您要添加的特定功能吗?为什么要周期性合并?

    让我们指定一个分支(分支 1)作为您的集成流。这是所有工作的地方。这是释放的地方。分支 2、分支 3 和分支 4 将是功能分支。添加功能的分支。在这种情况下,所有合并都将在分支 1 和其他分支之间进行。您不会在任何其他分支之间合并代码。

    有人将分公司比作生孩子。如果你有一个,你最好准备好照顾它。你必须观察它并维护它。

    这是我尽量减少分支的原因之一。我们所有的工作都是在主干上完成的,我在发布时间附近进行分支,以允许一些开发人员完成即将发布的版本,而其他开发人员则致力于未来的修订。发布完成后,我们对该分支说“au revoir”(除非我们需要修补)。

    偶尔,我会做一个功能分支。这比较棘手,因为我们必须使该功能分支与主干保持同步。这并不难,但开发人员必须记住定期这样做。否则,我们都在主干上工作。

    其他站点一直使用功能分支,但必须记住将其集成分支(或主干)合并到这些分支中(以保持功能分支最新),并小心将功能分支合并回主干(使用不同的合并算法)。

    【讨论】:

    • 首先它被称为Unstable Trunk。 Pristine Trunk 是指直到最后一分钟才有人对树干做出承诺。 Unstable Trunk 迫使开发人员一起工作。最重要的是,它迫使团队在开始工作之前就开发做出决策。功能分支允许团队将重要决策推迟到发布之前。 1/2 的功能分支通常最终被放弃。另一个在发布前几天疯狂合并。 QA 从来没有足够的时间进行测试。
    • 通过使用不稳定的主干,您可以强制决定发布中的内容以及包含的顺序。 QA 可以测试间歇性版本,因为错误修复和功能以恒定速率添加,而不是在最后一分钟合并。开发人员已经学会接受小型开发项目,这意味着他们进行更改、测试、进行更改、测试,从而更容易定位错误。我们有 100 多人毫无问题地进行开发。
    • NO !!! 我说的正是我想要的 - “Pristine trunk” = 始终正常运行,完全覆盖 CI(有很多官僚作风,进展缓慢),而你描述了“洪水期间妓院的火灾”工作流程,badass-startup-style
    【解决方案2】:
    1. 您尝试实施“每个任务的分支”工作流。没关系,但选择了工具 - 不行
    2. Subversion 中的所有分支都拥有平等的权利 - 您可以将任意分支与任意方向的任意分支合并(如果真的需要的话)
    3. SVN 1.8+ 将为您带来一些好处
    4. 对于长期分支、密集分支和主动使用跨分支合并(头痛最小),您选择了相当糟糕的 SCM - 任何将合并作为“一等公民”的 VCS 将是更好和更有用的选择:拥有 SVN-背景似乎是 Mercurial

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多