4

如果某个条件成立,我试图禁止推送到 Mercurial 存储库。但是,重要的是,如果用户使用push --force,则推送无论如何都会通过。

我知道在进行推送的机器上使用pre-push钩子很容易做到这一点,钩子将命令行参数传递给钩子。然而,由于钩子没有被传播,我不得不以某种方式将钩子分发给存储库的每个用户,并依赖他们不会弄乱它。

因此,我认为要走的路是prechangegroup在存储库服务器上有一个钩子,它检查条件并在必要时中止推送,但我无法找到一种方法来获取用户在推送时使用的命令行参数这个钩子。有没有办法仅通过在存储库服务器上使用挂钩来完成此操作?

我知道pretxnchangegroup如果最新变更集的提交消息遵循某种模式,则可能的解决方法是使用钩子并允许推送。但是,--force从存储库用户的角度来看,该选项似乎要容易得多,因为它不会强迫他们潜在地进行虚拟提交以获取正确的消息。

4

1 回答 1

3

抱歉,--force命令行选项永远不会在线发送,因此它在服务器端根本不可用。你需要想出一些方法来表示“我是认真的!” 带外,可能是特殊的用户名、特殊的提交消息等。

考虑只拥有一个没有禁止钩子的第二个服务器端存储库,并且只有在他们真正想要的时候才让推送者使用它。就像是:

hg push http://your-server/repo
.. rejected due to hook failure
hg push http://your-server/repo-and-I-really-mean-it

在服务器端,repo-and-I-really-mean-it repo 没有钩子并自动推送到普通 repo。

于 2012-06-07T14:12:13.697 回答