如何解决为什么 Git 执行来自其他存储库的钩子?
使用此 MWE Git 在错误的存储库 (A
) 中执行钩子:
# Make simple repo
git init "/tmp/A" && cd "/tmp/A" || exit 1
# Make hook to demonstrate the problem
mkdir -p ".git/hooks" &&
echo "echo 'EXECUTED!!!'" >.git/hooks/reference-transaction &&
chmod +x ".git/hooks/reference-transaction" &&
git clone -c core.hooksPath=".git/hooks" --template= "https://github.com/gabyx/Githooks.git" /tmp/Githooks
结果
Initialized empty Git repository in /home/test/tmp/A/.git/
Cloning into 'Githooks'...
EXECUTED!!!
EXECUTED!!!
EXECUTED!!!
EXECUTED!!!
这很奇怪:我希望 git clone
执行 /tmp/Githooks/.git/hooks
中的钩子,因为来自
路径可以是绝对的,也可以是相对的。相对路径是相对于运行钩子的目录而言的(参见 githooks[5] 的“描述”部分)。
以及在 Doc 中进一步:
在 Git 调用钩子之前,它会将其工作目录更改为裸仓库中的 $GIT_DIR 或非裸仓库中工作树的根目录。
这是为什么,这是一个应该报告的错误吗?
解决方法
我认为这是一个错误。
git clone
命令是一种特殊情况,因为它创建一个新的 Git 存储库。后续操作应该在这个新存储库中进行。相对路径可能应该是相对于 新存储库的。但是,除非模板提供,否则那里不应该有钩子。
(我不清楚模板可以是 Git 存储库:模板应该是本地文件树。)
作为一般规则,运行任何没有机会首先被验证的钩子是不明智的。
这是会产生参数的情况之一。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。