在git diff期间是否有可能忽略某些文件?我特别感兴趣的是过滤掉Makefile.in,Makefile,configure(以及所有那些自动生成的垃圾)。
答案 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-files
或find
。< / 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'