【发布时间】:2021-04-26 20:29:45
【问题描述】:
使用此 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 或非裸存储库中工作树的根目录。
这是为什么,这是一个应该报告的错误吗?
【问题讨论】:
-
您将此命令的“挂钩路径”覆盖到您创建的目录。对?你告诉它不要使用正常位置。
-
是的,我就是这么做的。此外,这种覆盖在几乎所有用例中都不常见(在我的情况下不是),它会导致一些错误的行为 IMO
-
那有什么问题呢?它完全按照您的指示去做。为什么你认为这是一个错误?
-
我为什么使用这个:我想克隆一个 repo 并且
core.hooksPath可能是全局设置的,我不能使用,我也不想填充模板--template=.core.hooksPath=.git/hooks确保 GIT LFS 安装它的钩子,这就是我使用它的原因。 -
嗯.. 不完全是:当我将
git clone更改为cd "$(pwd)/.." && git clone ...时,它将执行/tmp/Githooks/.git/hooks中的钩子......