Mercurial:钩子将限制仅限于一个分支

时间:2011-10-31 22:09:29

标签: mercurial hook pull

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

具体来说,我需要确保任何对部署存储库进行更改的人都在做等同于

的操作
hg pull -b deployment <central-repo-url>

而不是

hg pull <central-repo-url>

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

最简单的方法是在该存储库的hgrc中定义alias,将pull定义为pull -b deployment。然后,任何拉动的尝试都会做你想要的。但是,以这种方式将其搞砸是非常容易的,这种方式会导致无限循环。

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

[hooks]
pretxncommit.deployment = hg log -r tip --template '{branch}\n' | grep '^deployment$'