0

每当客户端推送或拉取并获得“未找到更改”时,是否有破解或出路在服务器上运行挂钩。无论存储库是否已更改,我都希望能够在客户端的 pull 上运行脚本。

目前,在所有情况下都可以轻松使用标准挂钩(pretxnchangegroupchangegroup等),但在没有更改时不会触发它们。

4

1 回答 1

0

钩子将无法完成您正在寻找的事情。在服务器端运行的钩子都是由事物(变更集或按钮)的到来触发的。没有服务器端的钩子用于空无到达或从不发送东西的命令(incoming,outgoing等)。

我试过的一个远射没有用是用post-serve钩子。当客户端通过 ssh 连接到远程存储库时,它确实hg serve在该客户端上运行,所以我希望post-serve钩子会在 ssh 会话结束时执行,但没有这样的运气(实际上该钩子可能根本不存在) .

幸运的是,除了钩子之外,还有一些其他的黑客选项。对于您通过 ssh 访问的存储库,您可以更改.ssh/authorized-keys文件以强制执行某些命令:

command="/home/me/hg_and_somethingelse.sh" ssh-rsa AAAA....

那么/home/me/hg_and_something_else.sh你会有:

#!/bin/bash
hg $@
echo ANY COMMAND FROM HERE ONWARD IS RUN FOR EVERY PUSH, PULL, CLONE, etc.

与 http 服务的存储库类似,您只需在您正在使用的 wsgi 文件末尾添加任何您想要的内容。

需要注意的是,有很多工具(例如 IDE)经常检查更改,因此您的脚本将比您想象的更频繁地运行。

于 2013-01-27T15:43:06.720 回答