【问题标题】:git diff during pre-commit hook results in Not a git repository预提交挂钩期间的 git diff 导致不是 git 存储库
【发布时间】:2013-12-24 11:52:12
【问题描述】:

我正在尝试在 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>

pwd 表示我在正确的目录中,$GIT_DIR.git。我被引导相信--cached 是让这个工作陷入困境的特殊调味料。有没有办法做到这一点?

【问题讨论】:

    标签: git bash githooks


    【解决方案1】:

    即使设置了 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 您确定通过了--work-tree 选项吗? --git-dir 可以,但您还需要通过 --work-tree
    • 我刚刚注意到你的顺序不同。我改变了这个顺序,它似乎工作正常。但它实际上提出了另一个问题。我的脚本调用了许多其他脚本,它们都需要目录参数,这太痛苦了。所以最终你的答案是正确的,但我不会使用它;-)
    【解决方案2】:

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

    【讨论】:

    • 我最终坚持使用这种方法,因为子脚本也需要这样做。因为脚本在子 shell 中运行,所以我对此很满意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2019-12-25
    • 2021-09-10
    • 2018-12-01
    • 2012-05-17
    • 2015-09-10
    相关资源
    最近更新 更多