我想从Git diff中排除文件(db/irrelevant.php
)。我试图把文件放在db
的子目录.gitattributes
与行irrelevant.php -diff
我也试过创建一个名为.git/info/attributes
包含db/irrelevant.php
的文件。想要从“git diff”中排除文件
在所有情况下,db/irrelevant.php
文件都作为Git二进制补丁包含在diff中。我想要的是该文件的更改被diff命令忽略。我究竟做错了什么?
我想从Git diff中排除文件(db/irrelevant.php
)。我试图把文件放在db
的子目录.gitattributes
与行irrelevant.php -diff
我也试过创建一个名为.git/info/attributes
包含db/irrelevant.php
的文件。想要从“git diff”中排除文件
在所有情况下,db/irrelevant.php
文件都作为Git二进制补丁包含在diff中。我想要的是该文件的更改被diff命令忽略。我究竟做错了什么?
OMG,司机并awk排除糟糕的文件?由于git 1.9 something您可以:
git diff -- . ':(exclude)db/irrelevant.php'
啊,优雅!请参阅引用的答案和详细信息this answer by @torek
您还可以使用patchutils程序集合的filterdiff程序来排除某些差异的某些部分。例如:
git diff | filterdiff -p 1 -x db/irrelevant.php
请注意,来自手册页(1)的'-p'是“-p n,--strip-match = n匹配时,忽略路径名的前n个组件。”我花了一段时间才发现'-p 1'正在从OP的路径中删除'db'部分。如果你只是想指定一个文件名并忽略所有路径/目录的可能性,你可以使用'-p 99'。 –
您可以使用no op命令设置自定义diff驱动程序,并将其分配给那些应该忽略的文件。
使用此命令
git config diff.nodiff.command /bin/true
或所有回购与--global
创建一个存储库的具体差异驱动。
(如果/bin/true
在MacOS中不存在,替代品将使用/usr/bin/true
或echo
)。
然后,将新的差异驱动程序分配给您要在.git/info/attributes
文件中忽略的文件。
irrelevant.php diff=nodiff
如果这种状态应该与您可以使用.gitattributes
代替.git/info/attributes
并分享与您同行的git config
命令(通过一个文档文件或东西),其他开发人员共享。
这正是我一直在寻找 - 在http://kerneltrap.org/mailarchive/git/2008/10/17/3711254描述我编辑 〜/的.gitconfig 补充说: '[DIFF “nodiff”]' '命令=/bin中/ TRUE' 然后我创建了一个名为git的/ info文件/属性到了我说: 'irrelevant.php差异= nodiff' – Michael
这个答案的工作更好对我来说:http://stackoverflow.com/questions/1016798/excluding-files-from-git-diff –
有趣的是,这种方法不适用'git diff --stat'。在这种情况下,可以使用'git diff ... |作为一种解决方法,diffstat'。 – ddkilzer
这一个在线解决方案不需要其他utils的/下载:
git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`
哪里file/to/exclude.txt
是你想排除当然,文件的名称。
编辑:信用ksenzee修复删除的文件打破差异。
我正在尝试将你的一个班轮调整为'git diff --stat master'而没有太大的成功 - 你能帮忙吗? –
类似Ben Roux's的解决方案,但无论如何分享:
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
此方法比可接受的anwer更短。
git diff 987200fbfb 878cee40ba --stat -- ':!*.cs'
有关不同的包含/排除的可能性更多信息,请阅读this other post
如果你想这样做,只是目测检查差异,视觉差异的工具(如Meld)将让你做到这一点一个简单的命令,很容易记住。
首先,建立一个diff工具,如果你还没有。
$ git config --global diff.tool = meld
然后,你可以运行一个目录diff。
$ git difftool --dir-diff
您将能够浏览Meld(或您选择的工具)中的差异(通过文件)。只是不要打开你想忽略的文件。
如果我需要排除多个文件,该怎么办? – itsashis4u
@ itsashis4u'git diff - 。 ':(exclude)db/irrelevant.php'':(排除)db/another_irrelevant.php'' – tokland
注意:如果你想排除一个特定的文件名,你必须以星号作为前缀,与'.gitignore'文件不同句法。例如。 ':!* shrinkwrap.yaml'而不是':!shrinkwrap.yaml'。 – vaughan