我很难确保部署存储库仅更新中央 Mercurial 服务器的特定分支。
具体来说,我需要确保任何将更改拉到部署存储库的人都在做相当于
hg pull -b deployment <central-repo-url>
而不是
hg pull <central-repo-url>
我想我需要使用pre-pull
钩子,但我不知道该怎么做。
此外,相同的技术,但更用户友好的方式;
ACL 扩展,您可以在其中为您的工作流定义 [acl.deny.branches] 和 [acl.allow.branches]
最简单的事情可能是在该存储库的 hgrc 中定义一个别名pull
,该别名定义为pull -b deployment
. 然后,任何拉动的尝试都会做你想做的事。但是,很容易将其搞砸,从而使任何尝试拉出无限循环。
我会建议一个pretxnchangegroup
钩子。这使您可以检查正在导入的变更集,如果您不喜欢它们,则拒绝它们。我怀疑您要强制执行的规则是提示应始终位于部署分支上(更改组可能会从已合并到部署中的其他分支中拖入变更集,但提示应始终来自部署)。那将是一个像这样的钩子:
[hooks]
pretxncommit.deployment = hg log -r tip --template '{branch}\n' | grep '^deployment$'