阻止推送者破坏我的中央 Mercurial 存储库

阻止推送者破坏我的中央 Mercurial 存储库

我正在运行中央 mercurial 存储库,我知道如果远程用户尝试将多个“head”强制推送到我的中央存储库,则正常的“推送”命令将停止。目的是远程用户应先拉取并合并,然后再尝试再次推送。

但是,使用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

答案1

这不是 Apache 更改,但您必须在 Mercurial 存储库本身中进行设置。

pretxncommit您可以设置钩子,在接受推送到存储库之前运行脚本。在由或钩子触发的脚本中,pretxnchangegroup您可以检查这些更改是否创建新的 head,如果是,则拒绝它们。

Hg Book 中关于钩子的章节更多细节。

答案2

没有提供可以创建此行为的钩子。您需要自己编写它。

答案3

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

有两个权限文件可让您精细控制谁可以读取和推送。可以在一个管理系统下设置多个存储库,因此您不必反复安装它。

相关内容