我正在检查代码库并修复空白问题并通常更正缩进和类似的东西,我想确保我没有无意中做出任何其他更改,所以我正在做
git diff -w
以显示所有更改的差异文件同时忽略空格差异。问题是这实际上并没有忽略all 空白差异——至少I 认为仅仅是空白差异。例如,在 git diff -w
的以下输出中,
-"Links":
-{
-
- "Thermal":
-
-{
-
+ "Links": {
+ "Thermal": {
你可以看到我只有
This question 起初看起来可能会提供答案,但它处理的是两个特定 files 之间的差异,而不是两个特定 commits 之间的差异。通过搜索出现的其他所有内容也都是死胡同。例如,本题是关于合并,不显示差异,本题涉及显示词级差异等。
也许有更好的答案,但到目前为止我找到的最好的解决方案是这个。
首先,你必须控制Git当前使用的“空白”的定义。
git config 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:]]'
你仍然会看到上下文,这(在我的例子中,因为我试图确保没有差异 except 空白差异)没有帮助。你可以使用
-U0
告诉 Git 给你 0 行上下文,就像这样,
git diff -w -U0 --word-diff-regex='[^[:space:]]'
但是你仍然会得到看起来非常像上下文的输出,但它仍然比仔细和手动查看所有更改以确保它们只是空白更改要好得多。
您也可以在一个命令中完成上述所有操作。
-c
标志仅针对一个命令更改 git 配置。
git -c core.whitespace=-trailing-space,-indent-with-non-tab,-tab-in-indent diff -U0 --word-diff-regex='[^[:space:]]'
忽略 all 提交之间的 git-diff 空格变化
这个问题起初看起来可能会提供答案,但它处理的是两个特定文件之间的差异,而不是两个特定提交之间的差异。通过搜索出现的其他所有内容也是死胡同......
我认为你遇到了麻烦,因为 Git 是这项工作的错误工具。它不会使任务变得容易,让步以适应该工具是错误的方法。工具应该为你工作而不是反之亦然.
执行第二个克隆,然后检查有问题的起始修订。然后使用您当前的版本对它们运行常规差异:
diff -bur --ignore-all-space <dir1> <dir2>
.
这里有一些选项
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
经典
diff
的工具描述是“Compare FILES line by line.”
git diff
也遵循该原则,尽管显然具有增强的功能。但是直线的概念似乎仍然是该工具的基础。我还没有找到解决这个问题的方法。而且通常不值得尝试违背工具的性质来工作。
在问题中描述的情况下,需要对文件的编辑前和编辑后修订的文本进行标记化和规范化,以便最终得到方便的 diff 比较单位,传统上是行,然后在这些规范化版本上运行您选择的
diff
工具。