共享单个文件的hg变化(不是整个变更集)

时间:2011-04-27 16:50:58

标签: mercurial workflow

场景:

建立企业HT系统。开发人员正在开发多个分支,每个开发一个(或多或少)。我们正在松散地遵循这种模式:https://www.mercurial-scm.org/wiki/ControlledPractice

设计/工作流程限制:回购是超长期(10年以上);回购的开发者数量在10-30范围内。

  • DevA修复了1个文件中的错误。
  • DevB需要固定文件,但显然不希望DevA的其余部分工作。

这将发生 lot ,我们预计。

我可以通过以下几种方式来处理这种情况:

  1. Bugfix位于单个变更集中,从DevA的分支到DevB的分支(或共享代码分支)获取hg transplant
  2. 从DevB的开始提交中生成修复的命名分支,以便可以干净地合并。
  3. 问题:

    1. 重复更改集可能会导致混淆某个特定功能的实现位置(但可能不是?)。
    2. 在此代码库上工作几年后,分支机构大量涌现=不可接受。
    3. 还有其他已知方法来处理这种情况吗?

2 个答案:

答案 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执行移植。