【发布时间】:2017-05-13 03:14:02
【问题描述】:
我有一个执行 linting 的 git 预提交钩子。当它被调用时,它会遍历暂存文件并在它们上运行 linter。这很好用。
但是,当您运行 git commit -am 'Foo' 时,它运行时没有任何暂存文件。如何判断它是使用 -a 还是 --all 标志调用的?有没有更简单的方法来获取将存储在 git 中的文件?
【问题讨论】:
-
您所描述的情况并非如此。无论您调用
commit,预提交都会使用设置为即将提交的索引和HEAD设置适当的索引来执行,以便您可以git diff --cached --name-only或您需要做的任何其他事情。 -
我正在使用
pygit2。当我使用未暂存的文件调用repo.status().items()时,我得到如下信息:[('config/git_hooks/pre-commit', 256), ('bin/run_flake8', 256)]。256是 GIT_STATUS_WT_MODIFIED 的标志。 -
我没有看过 pygit2(我在 git 1.[567]、python 2.[345] 时代写了我自己的 Python Git 东西,但那是几个工作之前的事了,可能长期丢弃)但值得注意的是
git status有两个 diff,一个用于index-vs-HEAD,一个用于worktree-vs-index。 Pygit2 可能会尝试做同样的事情,但如果是这样,它就会出错,如果你是在 pre-commit 钩子中执行此操作并运行git commit -a。
标签: git githooks git-commit pre-commit-hook