Git diff忽略

时间:2010-08-13 05:54:57

标签: git autotools

在git diff期间是否有可能忽略某些文件?我特别感兴趣的是过滤掉Makefile.in,Makefile,configure(以及所有那些自动生成的垃圾)。

4 个答案:

答案 0 :(得分:5)

您可以尝试将文件列表传递给git diff,它只会对这些文件执行diff。

根据代码的设置方式,它可以像以下一样简单:

git diff otherbranchname -- src/     # only give me diffs from src/

或作为难看/复杂的:

git diff otherbranchname -- $( git ls-files |
    perl -lne'next if /(?:[mM]akefile(?:\.in)?|configure|whateverelse)/;print' )
# diff all files which don't match the pattern

根据您要忽略的文件是否由当前分支中的Git管理,您需要将git ls-files替换为find *;请使用find .并将|.git添加到Perl表达式。

根据您的需要定制,可能使用您知道的目录/文件名,而不是使用git ls-filesfind。< / p>

答案 1 :(得分:2)

另一个类似的解决方案(添加到.git/config):

[alias]
    mydiff = !git diff -- $(git diff --name-only | grep -Ev "([mM]akefile|configure)")

然后用:

运行它
git mydiff

请注意,git diff --name-only优于git ls-files,因为它会将较短的文件列表传递给git diff,因为只包含已修改的文件。我在使用git ls-files时超过大项目中的最大参数数时遇到了麻烦。

答案 2 :(得分:0)

关于gitignore和autotools集成,您可能对git.mk感兴趣:http://mail.gnome.org/archives/desktop-devel-list/2009-April/msg00211.html

答案 3 :(得分:0)

如详细here,您可以使用exclude pathspec magic

git diff -- . ':(exclude)Makefile*' ':(exclude)configure'