停止推动者打破我的中央水银库

我正在运行中央储存库,并且我知道,如果远程用户试图强制多个“头部”到我的中央存储库,正常的“push”命令将会停止。 意图是远程用户应该先尝试再次推送和合并。

不过,使用hg push --force会覆盖这个。 我想阻止这种行为。

我目前使用hgwebdir.cgi加上一些apache-auth的东西来限制用户拉和推的能力。

编辑:pretxnchangegroup钩解决了这个问题。 胡克工作:

 #!/bin/bash # force-one-head # add the following to <repository>/.hg/hgrc : # [hooks] # pretxnchangegroup.forceonehead = /path/to/force-one-head if [[ `hg heads -q | wc -l` -gt 1 ]]; then echo "There are multiple heads." echo "Please 'hg pull' and get your repository up to date first." echo "Also, don't 'hg push --force' because that won't work either." exit 1 fi 

这不是一个Apache的变化,但你必须将其设置在Mercurial存储库本身。

您可以设置运行脚本的钩子,然后接受推送到您的存储库。 在由pretxncommitpretxnchangegroup钩子触发的脚本中,您可以检查这些更改是否会创build一个新的头并拒绝他们。

有关更多详细信息,请参阅Hg Book中的钩子章节 。

没有提供的钩子会产生这种行为。 你需要自己写。

考虑将存储库放在一个访问控制的服务器上,然后实现mercurial-server (以前称为hg-admin-tools)。 用户通过SSH(从Windows或Linux)推送,并受到您的访问控制。

有两个权限文件,可以让你精确地控制谁可以阅读和推送。 可以在一个pipe理系统下设置多个存储库,所以您不必一次又一次地安装它。