场景:
建立企业HT系统。开发人员正在开发多个分支,每个开发一个(或多或少)。我们正在松散地遵循这种模式:https://www.mercurial-scm.org/wiki/ControlledPractice。
设计/工作流程限制:回购是超长期(10年以上);回购的开发者数量在10-30范围内。
这将发生 lot ,我们预计。
我可以通过以下几种方式来处理这种情况:
hg transplant
。问题:
还有其他已知方法来处理这种情况吗?
答案 0 :(得分:3)
处理此问题的方法是让DevA对其更改的父变更集更加谨慎。在devA提交错误修正之前,他应该hg update
到最早的版本,在那里可能已经修复了错误(通常是引入错误的变更集)。当Dev A提交时,他会看到一条消息,说明创建了一个新头。然后可以将新头部拉入并合并到任何具有该错误的分支或仓库中,而不会带来任何其他内容。
关键是,当你提取变更集时,你需要在你的仓库中拥有任何变革集,这些变更集是你所提出的变革者的祖先,所以如果你想让某人能够解决你的问题,那么如果没有完成你已完成的所有其他工作,请确保修复程序的父项是他们确定已经拥有的变更集。
这确实需要开发人员稍微考虑一下,但最好是使用不同的节点ID在repo中进行多次相同的更改,正如您所指出的那样是有问题的(而且很难看)。
这些新头是一些人称之为“匿名分支”的东西,并且它们不会像分支一样以扩散方式扩散。
答案 1 :(得分:1)
如果您在同一个仓库中将变更集从一个分支移动到另一个分支,我建议使用transplant
命令。在了解变更集的来源方面,您可以使用--log
命令将一些信息附加到移植的提交消息中。例如:
hg update default
hg transplant revX --log
将使用以下提交消息在default
上创建变更集:
<original commit message of revX>
(transplanted from fa10a36d94385723fc7ecfaacb189365509ee83e)
我不知道使用TortoiseHg v1.1.X添加--log
参数的方法,但您也可以从repo explorer GUI执行移植。