版本控制:围绕功能开发移动bug修复/代码增强

jba*_*ros 6 version-control workflow mercurial dvcs

我有一个与Mercurial相关的工作流程问题(可能适用于其他DVCS).

使用典型的默认/稳定设置设置repo.

您的任务是构建一个新功能,并期望它需要一些时间(月+).在处理此功能时,您会遇到一个错误,您认为应该修复并尽快应用于生产.或者,您可能会注意到一些可以更好地记录的代码.

我的假设是您在默认情况下进行修复,然后切换到稳定并再次进行修复(手动或应用补丁).这是正确的还是应该立即切换到稳定,在那里进行更改然后将stable合并为默认值?

使用补丁似乎对我更有意义.您可以专门针对错误修复进行提交,并在方便时应用该修补程序.我的意思是如果虫子不是太讨厌,就没有必要紧迫和打破你的流量.对?

那么,你如何处理这种情况呢?

谢谢

Wim*_*nen 6

您可以返回分支点(修订版B),修复那里的错误(修订版X),然后将修复程序合并到两个分支(M1M2)中:

-----B--o----o---M1----o---> stable
     |          /
     |---------X   bugfix
     |          \
     \--o---o----M2----o-----> feature
Run Code Online (Sandbox Code Playgroud)

这样,您可以通过正常hg merge操作在每个分支中获得修复; 无需修补,移植或MQ'ing.

将相同的想法更进一步:您可以改为首先回到引入错误的修订版.通过使用此作为修复的基础,您将确保可以将修复合并到包含该错误的任何分支中.

  • Huzzah,对于了解"你在哪里"做出改变的人来说,与改变本身一样重要. (2认同)
  • @jbarreiros:这是一个有争议的话题.一方面,有些人喜欢像你说的那样保持他们的历史"好看和线性",并且他们会大量使用像"rebase"这样的东西来实现它.另一方面,有些人主张[在稳定基线的特征分支上进行所有更改](http://codicesoftware.blogspot.com/2010/11/linus-on-branching.html). (2认同)