首页 > 解决方案 > 预提交钩子中的 git clone 导致钩子失败

问题描述

我有一个预提交挂钩,需要对所有提交的文件运行自定义的内部扫描程序。这个扫描器也在它自己的 git repo 中维护。所以在钩子文件中我运行git clone ...以确保正在使用最新版本。我遇到的问题是git克隆后的所有命令都在克隆的 repo 上工作,而不是在运行钩子的那个。结果,我无法获得更新文件的列表。此外,钩子总是失败:

错误:无效对象...
错误:构建树时出错

列出的无效对象来自克隆的存储库。

我确保我正在克隆到一个完全不同的目录。我还在提交之前设置了GIT_TRACEGIT_TRACE_SETUP环境变量。我可以看到 git_dir、worktree 和 cwd 值都符合我的预期。它们最初设置为第一个 repo,然后在克隆过程中设置为克隆的 repo,然后在克隆完成后返回到第一个 repo。

一旦我卸下git clone钩子,就会顺利运行。

我正在运行 2.11.0 版的 git。

为什么克隆会造成如此严重的破坏,我该如何防止呢?

标签: git

解决方案


推荐阅读