首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Git要从其他存储库执行钩子?

为什么Git要从其他存储库执行钩子?
EN

Stack Overflow用户
提问于 2021-04-26 20:29:45
回答 1查看 70关注 0票数 3

使用这个MWE在错误的存储库(A)中执行钩子:

代码语言:javascript
复制
# 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

结果在

代码语言:javascript
复制
Initialized empty Git repository in /home/test/tmp/A/.git/
Cloning into 'Githooks'...
EXECUTED!!!
EXECUTED!!!
EXECUTED!!!
EXECUTED!!!

这是非常奇怪的:我希望git clone/tmp/Githooks/.git/hooks中执行钩子,因为

core.hooksPath

路径可以是绝对的,也可以是相对的。相对路径被视为相对于运行钩子的目录(请参阅githooks5的“描述”部分)。

文档中还有:

在Git调用钩子之前,它将其工作目录更改为裸存储库中的$GIT_DIR或非裸存储库中工作树的根。

这是为什么,这是一个应该报告的问题吗?

EN

回答 1

Stack Overflow用户

发布于 2021-04-27 02:20:19

我觉得这是个窃听器。

git clone命令是一种特例,因为它创建了一个新的Git存储库。随后的操作应该发生在这个新的存储库中。相对路径应该相对于新的存储库。但是,除非模板提供钩子,否则不应该有钩子。

(我不清楚模板是否可以是Git存储库:模板应该是本地文件树。)

作为一般规则,运行任何没有机会先被验证的钩子是不明智的。

这是会引起争论的案例之一。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67273420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档