【问题标题】:How does merging a branch actually work (under the hood)?合并分支实际上是如何工作的(在引擎盖下)?
【发布时间】:2009-01-08 08:52:17
【问题描述】:

这可能是一个幼稚的问题,但是,正如对象中所问的,版本控制软件在不生成损坏代码的情况下将分支合并回主干的实际方法是什么?

这里有一个简单的例子:我为程序“Hello World Power edition”从主干创建一个分支。我添加了对克林贡语的支持。这是一个彻底的改变,它改变了函数 printHelloWorld() 的工作方式。

同时,由于错误 #749 导致“Hello World”被写成“Helo World”,主干中的函数 printHelloWorld() 已更改。

现在,我在这里看到的问题是:当我通过分支合并回主干时,我在 sayHello.py 文件中的函数 printHelloWorld() 中尝试了冲突

VCS 程序如何知道如何从我的分支添加克林贡语支持将错误修复保留在主干中?有哪些人为驱动或软件驱动的策略可以避免这种情况?

提前致谢。

【问题讨论】:

    标签: merge versioning theory


    【解决方案1】:

    VCS 程序如何知道如何添加 我的分支机构的克林贡语支持和 将错误修复保留在主干中?

    VCS 对源代码的语义一无所知,它将源代码视为一堆文本/二进制文件。 VCS 系统使用diff / merge 算法来检测您和当前文件版本之间的冲突。解决此类冲突是您的责任,因为只有您知道这些更改的语义。一些像 SVN 这样的 VCS 会要求您在允许您提交更改之前使用主干中的最新更改更新您的工作副本,以确保不会丢失任何内容。

    为了确保您没有破坏任何东西并且之前的所有错误修复都没有破坏,您应该使用code reviewsunit tests 和其他做法。 Continuous integration 是保持软件健康的好方法。

    【讨论】:

      【解决方案2】:

      在这种情况下版本控制系统无法自动合并,您必须手动进行合并。良好的单元测试将帮助您确保不会丢失任何功能。

      【讨论】:

        【解决方案3】:

        在您将分支合并回主干之前,版本控制系统将使用您分支后主干中的更改更新您的工作副本。它只是不允许您在没有此更新的情况下合并。这可确保您在下一次提交时获得主干中的所有错误修复。

        在分支上工作的一个好策略是定期将主干中的更改移植到您的分支中。这可确保您不会偏离主干太远,导致您最终合并回主干时遇到问题。

        【讨论】:

        • 哦,好的,但是怎么做?。 “更新我的工作副本”可能会导致同样的问题.. 反过来!或者,推送 printHelloWorld() 会将修复添加到分支中,但会牺牲对克林贡语的支持!
        猜你喜欢
        • 1970-01-01
        • 2016-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多