Mercurial 持续集成

Mercurial continuous integration

我有一个反复无常的工作流程问题。如果假设一组开发人员在不同的分支上并行开发不同的功能,他们想在他们的分支上标记 'stable' 点以便它可以集成到下一个构建中,那么最好的前进方式是什么?

在 CVS 的美好岁月里,我们会为此目的使用标签,但它们对 hg 不起作用。因此,我们是否应该维护多个存储库,例如开发和 release_candidate,然后开发人员将他们的稳定分支推送到 rc,自动构建系统会监控此存储库以触发构建?

如果开发分支上的稳定点不是该分支上的最新变更集,开发人员应该记得指定他将推送到哪个变更集,对吗?

那么,这听起来像是一个高效的工作流程吗?

这个问题没有唯一的解决办法,这取决于个人喜好。

首先,也是我推荐的方式:mercurial 知道不同的阶段。因此,可以将它们用于您指示的方式:使用指示为非发布的中央存储库,因此草稿阶段将被保留。然后开发者就可以正常的pull和push了。那些他们认为稳定的变更集由他们明确给出 'public' 阶段,不稳定的变更集保持在 'draft' 阶段。或者,他们将它们保持在阶段 'secret' 专门在他们自己的机器上,因此根本不会将它们推送到中央服务器。 有关详细信息,请参阅 http://www.logilab.org/blogentry/88203 and Phases

当然,他们也可以只明确地推送他们希望看到的变更集——但这种方法注定要早得多地失败。同样,拉和推到不同的 'release' 和 'development' 存储库时更容易出错。

但是我看不出为什么标记对您不起作用 - 但也许书签更接近您从 CVS 中了解到的内容。因此,您也可以以类似的方式使用书签。

此外,独立于以上任何内容并且如果没有专门的发布管理器左右:如果您相信您的开发人员将他们的更改合并到发布分支中,那么他们没有理由不能将自己的分支合并到在他们认为稳定的某个点或从某个点释放分支。