预提交钩子期间的git diff不会导致git存储库
我正在尝试用git构建一个预提交脚本。在该脚本中,如果某个文件夹已更改,我计划运行任务。为了测试,在我的脚本中预提交钩子期间的git diff不会导致git存储库,git,bash,githooks,Git,Bash,Githooks,我正在尝试用git构建一个预提交脚本。在该脚本中,如果某个文件夹已更改,我计划运行任务。为了测试,在我的脚本中 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> 不是git存储库 要比较工作树外的两条路径,请执行以
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>
不是git存储库
要比较工作树外的两条路径,请执行以下操作:
用法:git diff[--无索引]
pwd
说我在正确的目录中,$GIT\u DIR
是.GIT
。我被引导相信,--cached
是让这个在钩子中工作的特殊调味品。有办法做到这一点吗?即使设置了GIT_DIR,我还是会尝试:
git --git-dir=/full/path/to/repo/.git --work-tree=/full/path/to/rpeo diff --cached |grep -q "^my/folder"
这样,您就可以确定钩子是在它应该执行的地方执行的。
unset GIT\u DIR
清除了它。我很失望,--git dir
没有。我试过了。没有变化。最后,强制取消设置GIT_DIR
修复了它。@Hounshell您确定要通过--工作树
选项吗--git dir
可以工作,但是您还需要传递--work tree
。我刚刚注意到您的顺序不同。我改了那个顺序,看起来效果不错。但这实际上引发了另一个问题。我的脚本调用了许多其他脚本,它们都需要目录参数,这太痛苦了。所以最终你的答案是对的,但我不会用它;-)我最终坚持使用这种方法,因为子脚本也需要这样做。因为脚本是在子shell中运行的,所以我对此很满意。