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

也不错

Opensmalltalk 项目有一些 git 钩子(post-checkout、post-commit、post-merge),它们确实检查了脚本是否真的作为这个(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/[email protected]/t/

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

博士

我能想到的唯一方法是验证dirname $0.git/hooks. 并且永远不要将钩子作为脚本从.git/hooks. 脆弱的解决方案,但我怀疑任何解决方案都是脆弱的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从预推git hook运行.exe?

如何识别脚本是否在tty上运行?

如何检查脚本是否从正确的 git 根文件夹运行?

如何将git hook重新加载到模板hook

是否有任何git hook可以拉?

如何知道是否从终端/命令行中未调用git hook

Git Hook - core.hookspath 没有选择本地钩子

如何检测python脚本是否正在作为后台进程运行

如何永久提交并推送git hook文件?

如何在Gitolite中启用git multimail hook

如何从 git hook 中获取提交用户?

如何添加git hook以将提交消息作为注释发送到关键跟踪器故事中?

如何使用pre-push git hook检查本地和远程分支之间的某些文件或目录是否不同?

运行node.js git hook时出现致命错误

git precommit-hook:检查行内容是否已更改

如何使用 git for Windows 在 Windows 上的 Git Hook 中获取 Python 退出代码

是否可以在push之前运行git hook并修改最后一次提交?

如何检查我的脚本是否在crontab中成功运行

如何检查脚本是否在Node.js下运行?

如何检测脚本是否在虚拟机上运行?

如何查找脚本是否以nohup的身份运行完成?

如何检测Ruby脚本是否通过外壳管道运行?

如何检测脚本是否正在使用npm或yarn运行?

如何确定脚本是否在Linux或OSX中运行

如何检查 PowerShell 脚本是否在 Azure 中运行

git-rebase如何识别“别名”提交?

如何识别GitHub中使用的Git版本?

如何识别Git中的强制推送?

如何删除git钩子