要从“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