1

我很难确保部署存储库仅更新中央 Mercurial 服务器的特定分支。

具体来说,我需要确保任何将更改拉到部署存储库的人都在做相当于

hg pull -b deployment <central-repo-url>

而不是

hg pull <central-repo-url>

我想我需要使用pre-pull钩子,但我不知道该怎么做。

4

2 回答 2

3

此外,相同的技术,但更用户友好的方式;

ACL 扩展,您可以在其中为您的工作流定义 [acl.deny.branches] 和 [acl.allow.branches]

于 2011-11-01T03:57:14.540 回答
2

最简单的事情可能是在该存储库的 hgrc 中定义一个别名pull,该别名定义为pull -b deployment. 然后,任何拉动的尝试都会做你想做的事。但是,很容易将其搞砸,从而使任何尝试拉出无限循环。

我会建议一个pretxnchangegroup钩子。这使您可以检查正在导入的变更集,如果您不喜欢它们,则拒绝它们。我怀疑您要强制执行的规则是提示应始终位于部署分支上(更改组可能会从已合并到部署中的其他分支中拖入变更集,但提示应始终来自部署)。那将是一个像这样的钩子:

[hooks]
pretxncommit.deployment = hg log -r tip --template '{branch}\n' | grep '^deployment$'
于 2011-10-31T22:25:14.070 回答