合并分支实际上如何工作(引擎盖下)?

时间:2009-01-08 08:52:18

标签: merge versioning theory

这可能是一个天真的问题,但是,正如对象中所要求的那样,版本化软件将分支合并回主干而不会产生破坏代码的实际方式是什么?

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

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

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

VCS程序如何知道如何从我的分支中添加Klingon支持将错误修复保留在主干中?什么是人为驱动或软件驱动的策略来避免这种情况?

提前致谢。

3 个答案:

答案 0 :(得分:3)

  

VCS程序如何知道如何添加   来自我的分支机构的克林贡语支持   将bug修复在主干中?

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

在分支机构上工作的一个好策略是将trunk中的更改定期移植到您的分支中。这样可以确保您不会偏离行李箱,导致您在最终合并回行李箱时遇到问题。