使用这个MWE在错误的存储库(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中执行钩子,因为
路径可以是绝对的,也可以是相对的。相对路径被视为相对于运行钩子的目录(请参阅githooks5的“描述”部分)。
在文档中还有:
在Git调用钩子之前,它将其工作目录更改为裸存储库中的$GIT_DIR或非裸存储库中工作树的根。
这是为什么,这是一个应该报告的问题吗?
发布于 2021-04-27 02:20:19
我觉得这是个窃听器。
git clone命令是一种特例,因为它创建了一个新的Git存储库。随后的操作应该发生在这个新的存储库中。相对路径应该相对于新的存储库。但是,除非模板提供钩子,否则不应该有钩子。
(我不清楚模板是否可以是Git存储库:模板应该是本地文件树。)
作为一般规则,运行任何没有机会先被验证的钩子是不明智的。
这是会引起争论的案例之一。
https://stackoverflow.com/questions/67273420
复制相似问题