Opensmalltalk项目具有一些git钩子(签出后,提交后,合并后),它们确实通过以下(bash)测试来检查脚本是否真的作为钩子运行了:
is_run_as_hook() {
test -n "$GIT_DIR"
}
这可能是一个聪明的黑客:运行与安装钩子相同的脚本来安装钩子,请参见
它以前可以工作到git 2.18 ...
但是不再设置GIT_DIR,正如git邮件列表中所讨论的那样,设置GIT_DIR的事实是无意的副作用...
https://public-inbox.org/git/20180826004150.GA31168@sigill.intra.peff.net/t/
因此,我的问题是:还有另一种方法可以识别被钩住,还是我们应该改变整个逻辑?
答案 0 :(得分:1)
我唯一想到的方法是验证dirname $0
是.git/hooks
。决不要将钩子作为来自.git/hooks
的脚本运行。解决方案脆弱,但我怀疑任何解决方案都会脆弱。