要从“git diff”中排除文件
我想从一个Git diff中排除一个文件( db/irrelevant.php )。 我试图把一个文件放在名为.gitattributes的db子目录中,用irrelevant.php -diff .gitattributes这一行,我也尝试创build一个名为.git/info/attributes的文件,其中包含db/irrelevant.php 。
在所有情况下, db/irrelevant.php文件作为Git二进制补丁包含在diff中。 我想要的是该文件的更改被diff命令忽略。 我究竟做错了什么?
Omg,驱动程序和awk排除糟糕的文件? 因为git 1.9的东西你可以:
git diff -- . ':(exclude)db/irrelevant.php'
啊,优雅! 请参阅引用的答案和@torek的答案
您可以使用no op命令设置自定义diff驱动程序,并将其分配给应忽略的文件。
使用此命令创build一个存储库特定的diff驱动程序
git config diff.nodiff.command /bin/true
或者--global所有的回购。
(如果MacOS中不存在/bin/true则可以使用/usr/bin/true或echo )。
然后,将新的diff驱动程序分配给要在.git/info/attributes文件中忽略的文件。
irrelevant.php diff=nodiff
如果这个状态应该与其他开发者共享,你可以使用.gitattributes而不是.git/info/attributes并与你的同行共享git config命令(通过文档文件或者其他)。
您也可以使用patchutils程序集的filterdiff程序来排除diff的某些部分。 例如:
git diff | filterdiff -p 1 -x db/irrelevant.php
这种单线解决scheme不需要其他的使用/下载:
git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`
其中file/to/exclude.txt是您想要排除的文件的名称,当然。
编辑:信用ksenzee修复删除的文件打破差异。
类似于Ben Roux的解决scheme,但无论如何共享:
git status --porcelain | grep -v $PATTERN_TO_EXCLUDE | awk '{print $2}' | xargs git diff
或者,如果更改已经在本地提交:
git diff --name-only origin/master | grep -v $PATTERN_TO_EXCLUDE | xargs git diff origin/master
例子:
git status --porcelain | grep -v docs | awk '{print $2}' | xargs git diff origin/master git diff --name-only origin/master | grep -v docs | xargs git diff origin/master