5

我正在使用 git pre-commit 钩子来检查提交。预提交脚本基本上做了一件事:

exec git diff-index --check --cached HEAD --

它也做一些其他的事情,但它们与这个讨论无关。

问题是,我在存储库中有各种各样的文件,并非所有文件都必须遵守“ git diff-index --check”强制执行的检查。

所以我的问题是:如何排除/忽略这些文件?也就是说,我确实在 git 中跟踪它们,但我只想在提交前检查中忽略它们。

例如,某个补丁包含 *.c、*.h、*ini 和 *.xyz 文件。我希望“ git diff-index --check”仅适用于 .c 和 .h 文件。

4

2 回答 2

8

手册页说:

当存在 <path> 参数时,仅比较匹配这些模式的路径。否则将比较所有跟踪的文件。

换句话说,“路径”参数实际上是全局样式的模式,而不仅仅是特定的路径。您可以添加'*.c' '*.h'到您的命令。

于 2013-10-08T20:43:14.487 回答
2

接受的答案正确处理了文件扩展名的排除。要排除驻留在目录中的文件,您可以使用以下命令。

git diff-index --check --cached HEAD -- ':!directory'
于 2021-05-12T12:14:04.857 回答