如何识别git hook脚本是否真的作为钩子运行

时间:2019-04-11 08:13:16

标签: git

Opensmalltalk项目具有一些git钩子(签出后,提交后,合并后),它们确实通过以下(bash)测试来检查脚本是否真的作为钩子运行了:

is_run_as_hook() {
    test -n "$GIT_DIR"
}

这可能是一个聪明的黑客:运行与安装钩子相同的脚本来安装钩子,请参见

https://github.com/OpenSmalltalk/opensmalltalk-vm/blob/623dee2b6589723173af8b10d73485a23202c44f/scripts/updateSCCSVersions

它以前可以工作到git 2.18 ...
但是不再设置GIT_DIR,正如git邮件列表中所讨论的那样,设置GIT_DIR的事实是无意的副作用... https://public-inbox.org/git/20180826004150.GA31168@sigill.intra.peff.net/t/

因此,我的问题是:还有另一种方法可以识别被钩住,还是我们应该改变整个逻辑?

1 个答案:

答案 0 :(得分:1)

我唯一想到的方法是验证dirname $0.git/hooks。决不要将钩子作为来自.git/hooks的脚本运行。解决方案脆弱,但我怀疑任何解决方案都会脆弱。