Answers:
天哪,驱动程序和awk排除了糟糕的文件?从git 1.9开始,您可以:
git diff -- . ':(exclude)db/irrelevant.php' ':(exclude)db/irrelevant2.php'
啊,优雅!见引用答案和细节这个答案由@torek
git diff -- . ':(exclude)*.min.js' ':(exclude)*.min.css'
git diff -- . ":(exclude)db/irrelevant.php"
双引号代替单引号)
git diff -- . :(exclude)db/irrelevant.php
您可以使用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
命令。
[diff "nodiff"]
`command = / bin / true`,然后创建了一个名为我在其中添加的.git / info / attributes: irrelevant.php diff=nodiff
git diff --stat
。在这种情况下,可以将其git diff ... | diffstat
用作解决方法。
--no-ext-diff
您还可以使用patchutils程序集合的filterdiff程序来排除diff的某些部分。例如:
git diff | filterdiff -p 1 -x db/irrelevant.php
-p
,在联机帮助页(1)中,“-pn,--strip-match = n匹配时,请忽略路径名的前n个组成部分”。我花了一段时间才发现-p 1
正在db
从OP的路径中删除该零件。如果您只想指定文件名而忽略所有路径/目录,则可以使用-p 99
。
这一单线解决方案不需要其他工具/下载:
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
不成功-您能帮上忙吗?
对于我需要做的事情,KurzedMetal确实提供了很好的答案,即能够查看文件已更改,但不能生成差异(对于我而言,这可能是巨大的)。
但是我的一位同事建议的方法更加简单,并且为我工作:
.gitattributes
在要忽略的文件所在的目录中添加文件git diff
的内容如下:
file-not-to-diff.bin -diff
git status
如果文件已更改,仍然可以“查看”。git diff
也会“看到”文件已更改,但不会生成diff
。
这.bin
扩展了该示例中的文件是经过深思熟虑的。我确实意识到这是git对于二进制文件的默认行为,并且不需要使用进行特殊处理.gitattributes
。但是在我的情况下,这些文件被git和“ file”实用程序识别为文本文件,并且达到了目的。
git diff
接受可选的排除
git diff -- ":(exclude)thingToExclude"
git diff -- ":(exclude)*/thingToExclude/*"
git diff -- ":(exclude)*/$1/*.png"
.bash_profile
或.zshrc
gde() {
# git diff exclude files or folders
# usage:
# gde fileOrFolderNameToExclude
git diff -- ":(exclude)*/$1/*"
}
git diff --staged
希望对您有帮助。
非常简单,您可以使用标准的unix命令排除所需的内容,即使在Windows环境下,这些命令也可以在git bash下使用。下面的示例显示了如何排除pom.xml文件的diff,首先检查diff仅对文件名进行区分,然后使用'grep -v'排除不需要的文件,然后再次运行preprepred列表对diff进行掌握:
git diff master `git diff --name-only master | grep -v pom.xml`
与Ben Roux的解决方案相似,但仍然可以共享:
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
.gitignore
文件语法不同。例如,:!*shrinkwrap.yaml
而不是:!shrinkwrap.yaml
。