git pre-commit钩子中的git diff导致“不是git存储库”的错误。

4
我正在尝试在git中构建一个pre-commit脚本。在该脚本中,如果某个特定文件夹已更改,我打算运行任务。为了测试,在我的脚本中,我有以下代码:
git diff --cached | grep -q "^my/folder"

这将导致...
Not a git repository
To compare two paths outside a working tree:
usage: git diff [--no-index] <path> <path>

pwd 命令显示我在正确的目录中,$GIT_DIR.git。我曾经认为 --cached 是让钩子起作用的特殊方法。有没有办法做到这一点?

2个回答

2
即使设置了GIT_DIR,我仍会尝试执行以下操作:
git --git-dir=/full/path/to/repo/.git --work-tree=/full/path/to/rpeo diff --cached |grep -q "^my/folder" 

那样的话,您可以确保钩子在应该执行的地方被执行。

我尝试过了,但没有改变。最后强制取消设置GIT_DIR解决了这个问题。 - Hounshell
@Hounshell 你确定传递了 --work-tree 选项吗? --git-dir 可以工作,但你还需要传递 --work-tree - John Szakmeister
我刚刚注意到你以不同的顺序排列了。我已经按照那个顺序进行了更改,看起来工作得很好。实际上这还引发了另一个问题。我的脚本调用了许多其他脚本,它们都需要目录参数,这太麻烦了。所以最终你的答案是正确的,但是我不打算使用它(笑)。 - Hounshell

1

unset GIT_DIR 清除了它。我很失望 --git-dir 没有起作用。


1
我最终坚持采用这种方法,因为子脚本也需要这样做。由于脚本在子shell中运行,我对此感到满意。 - Hounshell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接