我有两个功能分支:featureA和featureB。
FeatureA已完成,但尚未合并到主干中,因为它未经测试,我们尚未准备好测试它。
我正在开发featureB,并且已经意识到我需要在featureA中实现更改才能继续。
最好的方法是什么?我想我有几个选择:
将featureA合并到featureB分支(或者如果我小心得到我想要的所有内容,可能只是特定的修订版),然后还原所有我需要的更改。
重新实现featureB中的更改(这次它们并不太复杂),并在featureA和featureB合并到同一个地方时解决冲突。
无论哪种方式,这些功能都将合并到一个发布候选分支中,以便进行测试和部署。一旦该RC分支被确认为已测试,它将一次性合并到主干中。
答案 0 :(得分:3)
还有第三种选择:
你可以挑选你想要合并的东西,然后合并。执行从featureA到featureB的合并,但只合并您感兴趣的修订。然后可选择修复任何剩余的问题。
在Eclipse中,例如这可以非常方便地完成,因为合并对话框将允许您选择要合并的版本(或哪个范围)。只需对所需的所有修订范围重复一遍。
答案 1 :(得分:0)
我通过在svn中使用以下结构来解决这些问题:
/prod
/release_20090801
/release_20090901
/staging
/trunk
/sandbox
开发人员在他们的沙箱中开发,然后在添加功能时合并到trunk中。一旦迭代的功能空洞地完成并准备好进行最终QA,就会将trunk复制到staging。
因此,在您的方案中,功能A可以合并到主干,然后复制到沙箱以进行功能b开发。
答案 2 :(得分:0)
好吧,如果这两个功能不涉及对相同源文件的更改,那么在继续开发时将它们分开的最简单方法是创建混合工作副本。检查featureB,并根据需要将各个源文件切换到featureA。 (如果您需要更多信息,请查看svn switch
。)您可以继续在featureB中进行更改并检查它们,而无需实际合并任何featureA代码。 (这将允许本地开发,但如果您使用持续集成,则会破坏服务器上的构建,因为不会出现必要的功能更改。)
当然,如果B依赖于A,那意味着A最终需要在B完成之前进行测试并准备好发布。对我来说,这意味着您应该立即将featureA更改合并到featureB中并在featureB上启动dev。您只需要确保将任何修复程序应用于featureA,它们将合并到featureB中。