有没有办法用git diff显示*只*空白差异?

时间:2014-06-26 23:55:52

标签: git whitespace

我想在他们自己的提交中提交我的所有空白更正,以保持其他一切不受空白更改的影响。

使用类似这样的内容轻松过滤 out git diff的空白差异

git diff --ignore-all-space --ignore-space-change --ignore-space-at-eol --ignore-blank-lines

但是如何获得空白区别的列表?

(获取具有空格差异的文件列表也很有用,因此我可以add将它们全部git add -p,而无需通过{{1}}来查看它们挑选出空白差异。但我认为这是次要的。)

2 个答案:

答案 0 :(得分:4)

这是你可以做到的一种方式:

  • 从干净的工作目录开始(例如git reset --hard
  • 使用Whitespace Total Fixer清除所有空白错误。有修复或忽略各种问题的选项,但默认可能没问题:

    find . -name "*.whatever_extension_you_need" -exec wtf.py -v -i {} \;
    
  • git diff现在只会显示空白变化

  • 分阶段并提交仅限空白的更改。

(FWIW,我写了wtf.py;我很抱歉,如果它看起来像是无耻的自我推销,但我确实专门针对这样的情况编写了这样的情况,其中存储库反复被白色空间问题污染搞砸了你的提交。)

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

> find . -name "*.whatever_extension_you_need" -exec wtf.py -v {} \; > /dev/null

nightmare.txt LINE 8: WARNING: spaces followed by tabs in whitespace at beginning of line
nightmare.txt:
    CHOPPED 1 lines with trailing space
    CHOPPED 0 blank lines at EOF
    ADDED newline at EOF
    CHANGED 1 line endings which didn't match crlf from first line
    WARNED ABOUT 1 lines with tabs/spaces mix

答案 1 :(得分:0)

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

在存储库中,可以完全根据您的差异来执行类似于Add only non-whitespace changes中的建议的操作。像这样:

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

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