有没有办法用git diff显示*仅*空格差异?

有没有办法用git diff显示*仅*空格差异?,git,whitespace,Git,Whitespace,我想在自己的commit中提交我所有的空白更正,以保持所有其他内容都不受空白更改的影响 使用类似这样的东西,使用git diffgit diff很容易过滤掉空白差异 git diff --ignore-all-space --ignore-space-change --ignore-space-at-eol --ignore-blank-lines 但是我如何得到一个只包含空格差异的列表呢 (获取只有空格差异的文件列表也很有用,因此我可以将它们全部添加到中,而无需使用git add-p检查它们

我想在自己的commit中提交我所有的空白更正,以保持所有其他内容都不受空白更改的影响

使用类似这样的东西,使用git diff
git diff
很容易过滤掉空白差异

git diff --ignore-all-space --ignore-space-change --ignore-space-at-eol --ignore-blank-lines
但是我如何得到一个只包含空格差异的列表呢


(获取只有空格差异的文件列表也很有用,因此我可以将它们全部添加到
中,而无需使用
git add-p
检查它们以找出空格差异。但我认为这是次要的。)

有一种方法可以做到这一点:

  • 从一个干净的工作目录开始(例如,
    git reset--hard

  • 用于清除所有空白错误。有修复或忽略各种问题的选项,但默认设置可能很好:

      find . -name "*.whatever_extension_you_need" -exec wtf -v -i {} \;
    
  • git diff
    现在将只显示空格更改

  • 暂存并提交仅空白的更改

(FWIW,我写了
wtf
;如果这看起来像是无耻的自我推销,我很抱歉,但我确实是专门为这样一种情况写的,即存储库反复受到空格问题的污染,从而破坏了您的提交。)

您还可以使用
wtf
简单地检查空白错误,而不是就地修复它们;这不会影响您的文件,但它会向stderr打印一条关于它发现的问题的消息(希望有帮助)

>查找-名称“*.您需要的任何扩展”-exec wtf-v{}\>/dev/null
Dreamnary.txt第8行:警告:行首空白处的空格后跟制表符
噩梦.txt:
带尾随空格的截断1行
在EOF处截断0个空白行
在EOF添加了换行符
更改了与第一行的crlf不匹配的1行结尾
警告1行中有制表符/空格混合

您可以临时将非空白差异应用于原件或副本。然后可以在还原之前使用diff或git diff进行比较

在存储库中,您可以根据您要区分的内容执行类似于建议的操作。比如:

git diff -U0 -w -b --ignore-blank-lines --no-color | git apply --ignore-whitespace --unidiff-zero -
git diff

当我想对非git文件执行此操作时,我使用了我编写的一个小程序来对临时文件执行相同的操作。

diff-u在我看来,无耻的自我宣传没有错!谢谢你的写作,谢谢你的回答。我会在有机会的时候测试它。有史以来最好的起源故事:)如果我理解正确,这个答案将隔离空格错误的差异(比如只有一个提交混合了制表符和空格,或者在一行末尾留下空格),但不会隔离非错误的空格差异(例如,如果代码块在一个分支上进一步缩进,或者是由于不同的编辑器设置,或者是由于代码中的附加嵌套级别)。