Git diff忽略

Git diff忽略,git,autotools,Git,Autotools,在git diff期间是否可能忽略某些文件?我特别感兴趣的是过滤掉Makefile.in、Makefile、configure(以及所有自动生成的垃圾)。您可以尝试将文件列表传递给git diff,它将仅对这些文件执行diff 根据您的代码设置方式,它可以简单到: git diff otherbranchname -- src/ # only give me diffs from src/ 或者像以下那样难看/复杂: git diff otherbranchname -- $( git

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

您可以尝试将文件列表传递给
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文件
替换为
find*
;改为使用
find.
并将
|.git
添加到Perl表达式中


根据您认为合适的情况进行定制,可能使用您知道要区分的目录/文件名,而不是使用
git ls files
find

关于gitignore和autotools集成,您可能对git.mk感兴趣:

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

然后使用以下命令运行它:

git mydiff
请注意,
git diff--name only
git ls files
好,因为它会将较短的文件列表传递给
git diff
,因为只会包含修改过的文件。在使用
git ls文件时,我遇到了在大型项目中超过最大参数数的问题,正如详细介绍的那样,您可以使用
排除
pathspec magic

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

您可以将它们全部添加到
.gitignore
文件中;如果它们是自动生成的,那么将它们存储在源代码管理系统中有意义吗?我没有将它们存储在那里,这就是全部问题所在。如果我愿意,我会把它们拿出来,很简单。这是上游问题。但我需要区分两个不同的上游分支,我得到的只是大量自动生成的垃圾。几乎不可能做任何真正的比较工作。哦,这真是太棒了:-D ThanksUntracked文件不会出现在diff中,但是-我认为
ls文件
总是足够的,除非出于某种原因,你想要一些未跟踪文件的diff。
git diff -- . ':(exclude)Makefile*' ':(exclude)configure'