2012-03-12 63 views
3

我从后备箱,都涉及大码重组在不同的模块,功能A和功能-B得到的两个功能分支之间精挑细选修订。两者都与主干保持同步;干线要求稳定。如何合并特性分支和主干

通过在Feature-B上工作的一半,我意识到最近在Feature-A上实现的对共享库的更改将大大有利于Feature-B。我不想将此更改置于主干中,并且我无法完全合并分支,因为Feature-A上的其他代码不稳定。

所以做分支,樱桃采摘版本之间的合并从A到B,只合并该功能:

SVN合并-r 1786:1795^/凸出/分支机构/功能-A。

我想不出我是否会遇到麻烦后,当我重新整合分支机构。我期望Feature-B比Feature-A更早完成。那时我们的正常程序是重新将B功能集成到主干中,然后将主干合并到功能A中以保持它们同步。我很难事先搞清楚这是否会造成冲突,看到一个被合并到B,而现在这些变化也越来越重合并回,但以一种迂回的方式,经由主线。

svn书中提到,如果我想再次在分支上工作,只需在将分支重新集成到主干后再进行--record-only的合并。我怀疑在这种情况下我可能需要类似的东西,但是如果有必要的话我无法解决。

回答

0

我个人不会使用具有长期功能分支的--reintegrate

在你的情况,你可以合并功能-B分支回主干normaly,然后,你合并功能-B回主干之前,做--record-only有问题的修订:

假设命令:

svn merge -r 1786:1795 ^/proj/branches/Feature-A . 

创建了修订2000(在分支特征-B)。

然后,合并功能-B回之前干路,你必须做到:

svn merge -c2000 --record-only ^/proj/branches/Feature-B . 

最后一步是做功能-B分支的完全合并到主干:

svn merge -r <begin>:<end> ^/proj/branches/Feature-B . 
+0

考虑到我一直在从trunk到Feature-B进行定期合并,这样做是否真的没有 - 重新集成?我的理解是,如果我试图在没有重新合并的情况下进行合并,则会因为已复制到分支的干线更改而导致大量冲突。 – myrosia 2012-04-10 10:58:33

0

这将的确会造成你的问题。

如果您从A合并到B的更改包含其他文件,那么当您重新集成B时,这些文件将被添加到主干中。不过,如果你尝试从主干合并到一个(你将需要之前重返A到做),那么合并会尝试将这些文件重新添加到其已经在一个存在,导致树冲突。

A -record-only合并用于阻止特定修订的重新合并,以便在重新集成后使特征分支保持活动状态。所以,如果你重返B装入行李箱创建修订100,那么你--record只合并树干修订版100回B,这意味着,当你做一个同步B中从主干合并(SVN合并^/PROJECT1 /行李箱)修订版100将被跳过,而不是重新合并回B.这就避免了潜在的冲突,并启用该功能分支继续使用,并重返社会后行李箱重新同步。

不幸的是,我不认为只有合并的记录可以帮助您避免在您的情况下发生冲突,因为重新合并合并不会检查要合并的分支中的各个修订版本,它只是执行差异分支和中继线的当前状态,并将其应用于中继线工作副本。

+0

谢谢,这是一个非常有用的说明,我看到了树会发生冲突的地方。 – myrosia 2012-04-10 10:59:19