Opensmalltalk 项目有一些 git 钩子(post-checkout、post-commit、post-merge),它们确实检查了脚本是否真的作为这个(bash)测试的钩子运行:
is_run_as_hook() {
test -n "$GIT_DIR"
}
这可能太聪明了:运行相同的脚本来安装钩子而不是运行钩子,见
它曾经可以工作到 git 2.18 ......
但是 GIT_DIR 不再设置,并且正如 git 邮件列表中所讨论的那样,设置 GIT_DIR 的事实是一个无意的副作用...... https://public-inbox .org/git/[email protected]/t/
因此我的问题是:是否有另一种方法可以识别被运行为钩子,还是我们应该改变整个逻辑?
我能想到的唯一方法是验证dirname $0
是.git/hooks
. 并且永远不要将钩子作为脚本从.git/hooks
. 脆弱的解决方案,但我怀疑任何解决方案都是脆弱的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句