Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial:挂钩将拉力限制在一个分支上_Mercurial_Hook_Pull - Fatal编程技术网

Mercurial:挂钩将拉力限制在一个分支上

Mercurial:挂钩将拉力限制在一个分支上,mercurial,hook,pull,Mercurial,Hook,Pull,我很难确保部署存储库只更新中央Mercurial服务器的特定分支 具体地说,我需要确保任何对部署存储库进行更改的人都在做与 hg pull -b deployment <central-repo-url> 而不是 hg pull <central-repo-url> 我假设我需要使用预拉钩子,但我不确定如何做到这一点。最简单的事情可能是在存储库的hgrc中定义一个,将拉定义为拉-b部署。然后,任何拉动的尝试都会达到你想要的效果。然而,很容易把这个问题搞砸,这样做会试图

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

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

hg pull -b deployment <central-repo-url>
而不是

hg pull <central-repo-url>

我假设我需要使用预拉钩子,但我不确定如何做到这一点。

最简单的事情可能是在存储库的hgrc中定义一个,将拉定义为拉-b部署。然后,任何拉动的尝试都会达到你想要的效果。然而,很容易把这个问题搞砸,这样做会试图拉一个无限循环

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

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

最简单的事情可能是在存储库的hgrc中定义一个将pull定义为pull-b部署的。然后,任何拉动的尝试都会达到你想要的效果。然而,很容易把这个问题搞砸,这样做会试图拉一个无限循环

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

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

另外,同样的技术,但更人性化的方式


,其中您为您的工作流定义[acl.deny.branchs]和[acl.allow.branchs]

此外,使用相同的技术,但更方便用户


,其中您为您的工作流定义了[acl.deny.branchs]和[acl.allow.branchs]

Tom的回答非常有用;但是ACL扩展似乎是最简单的解决方案。谢谢。哦,是的,我一点也没想到。我认为ACL是用来控制推送到存储库的东西,但当然,没有什么能阻止它被用于拉。汤姆的回答非常有帮助;但是ACL扩展似乎是最简单的解决方案。谢谢。哦,是的,我一点也没想到。我认为ACL是用来控制推送到存储库的东西,但当然,没有什么能阻止它被用于拉。干净且可配置。