我有一个预提交挂钩,需要对所有提交的文件运行自定义内部扫描器。这个扫描器也是在它自己的git回购中维护的。因此,在钩子文件中,我运行git clone ...
以确保使用的是最新版本。我遇到的问题是,克隆之后的所有git
命令都是在克隆的回购上工作,而不是运行钩子的那个。因此,我无法获得更新文件的列表。此外,钩子总是失败的:
错误:无效对象..。 错误:生成树错误
其中,列出的无效对象来自克隆的回购。
我已经确保克隆到一个完全不同的目录中。在提交之前,我还设置了GIT_TRACE
和GIT_TRACE_SETUP
环境变量。我可以看到,git_dir、工作树和cwd的值都与我所期望的一样。它们最初设置为第一个回购,然后在克隆过程中设置为克隆回购,然后在克隆完成后返回到第一个回购。
一旦我移除git clone
,钩子就会顺利运行。
我正在运行git的2.11.0版本。
为什么克隆人会造成这么大的破坏,我怎么才能阻止呢?
发布于 2022-05-10 15:27:35
事实证明,这与GIT_INDEX_FILE
环境变量有关,在提交代码时,git
会设置这些变量,然后被可能正在克隆repos的预提交钩子所捕获。我的钩子调用bash脚本,所以在包含任何git clone
命令的bash脚本中,我在脚本开头添加了unset GIT_INDEX_FILE
。这减轻了我的错误。
https://stackoverflow.com/questions/53485637
复制相似问题