我正在通过一个代码库并修复空白怪异并且通常会修正缩进等事情,我想确保我没有无意中进行任何其他更改,所以我正在进行git diff -w
显示所有已更改文件的差异,同时忽略空白差异。问题是这实际上并没有忽略所有空白差异 - 至少我认为仅仅是空白差异。例如,在git diff -w
的以下输出中,
-"Links":
-{
-
- "Thermal":
-
-{
-
+ "Links": {
+ "Thermal": {
你可以看到我只是
This question看起来可能会首先提供答案,但它会处理两个特定文件之间的差异,而不是两个特定提交之间的差异。通过搜索发现的其他一切也是一个死路一条。例如,this question是关于合并,而不是显示差异,this question涉及显示字级差异,等等。
答案 0 :(得分:47)
也许有更好的答案,但到目前为止我找到的最佳解决方案就是这个。
首先,你必须控制" whitespace"的定义。 Git目前正在使用。在项目中创建或编辑.gitconfig
,以包含
[core]
whitespace = -trailing-space,-indent-with-non-tab,-tab-in-indent
接下来,您必须控制所用单词的定义。不要只使用git diff -w
,而是添加--word-diff-regex=[^[:space:]]
:
git diff -w --word-diff-regex=[^[:space:]]
您仍然会看到上下文(在我的情况下,因为我试图确保没有差异除了空白差异)没有帮助。您可以使用-U0
告诉Git为您提供0行上下文,如此,
git diff -w -U0 --word-diff-regex=[^[:space:]]
但是你仍然会得到看起来非常像上下文的输出,但它仍然比仔细和手动查看所有更改以确保它们只是空白更改要好得多。
答案 1 :(得分:27)
使用提交之间的git-diff忽略所有空白更改
这个问题看起来似乎可能首先提供答案,但它处理两个特定文件之间的差异,而不是两个特定提交之间的差异。通过搜索发现的其他一切也是一个死胡同......
我认为你遇到了麻烦,因为Git是这项工作的错误工具。它不会使任务变得容易,并且屈服于适应工具是错误的方法。工具应该适合您而不是反之亦然。
执行第二次克隆,然后签出相关的起始修订版。然后使用当前版本运行常规差异:diff -bur --ignore-all-space <dir1> <dir2>
。
以下是some of the options for diff
-i, --ignore-case
ignore case differences in file contents
-E, --ignore-tab-expansion
ignore changes due to tab expansion
-Z, --ignore-trailing-space
ignore white space at line end
-b, --ignore-space-change
ignore changes in the amount of white space
-w, --ignore-all-space
ignore all white space
-B, --ignore-blank-lines
ignore changes where lines are all blank