我正在检查一个代码库,修复空格的奇怪之处,并通常纠正缩进之类的东西,我想确保我没有无意中做任何其他更改,所以我使用git diff -w
来显示所有更改文件中的差异,同时忽略空白差异。问题是这实际上并没有忽略 * 所有 * 空白差异-至少 * I*例如,在以下来自git diff -w
的输出中,
-"Links":
-{
-
- "Thermal":
-
-{
-
+ "Links": {
+ "Thermal": {
你可以看到我只
1.删除多余的空行,
1.在打开其值的键所在行的末尾加上花括号,并且
1.缩进以适应上下文
This question一开始看起来可能会提供答案,但它处理的是两个特定 * 文件 * 之间的差异,而不是两个特定 * 提交 * 之间的差异。搜索找到的其他内容也是死胡同。例如,this question是关于合并的,而不是显示差异,this question处理的是显示单词级别的差异,等等。
3条答案
按热度按时间rslzwgfq1#
也许有一个更好的答案,但到目前为止我找到的最好的解决方案是这样的。
首先,您必须控制Git当前使用的“空白”的定义。
接下来,您必须控制所使用的单词的定义。除了使用
git diff -w
之外,还需要添加--word-diff-regex='[^[:space:]]'
:你仍然会看到上下文,这是没有帮助的(在我的例子中,因为我试图确保除了空格之外没有任何差异)。你可以使用
-U0
告诉Git给予你0行上下文,就像这样,但是你仍然会得到看起来很像上下文的输出,但是这仍然比仔细地手动查看所有更改以确保它们只是空白更改要好得多。
您也可以在一个命令中完成以上所有操作。
-c
标志只为一个命令更改git配置。n6lpvg4x2#
在提交之间使用git-diff忽略 * 所有 * 空格更改
这个问题一开始看起来可能会提供一个答案,但它处理的是两个特定文件之间的差异,而不是两个特定提交之间的差异。其他搜索结果也是一个死胡同。
我认为你遇到了麻烦,因为Git是一个错误的工具。它不会让任务变得容易,而屈服于工具是错误的方法。工具应该为你工作,而不是相反。
执行第二次克隆,然后 checkout 有问题的起始修订版。然后使用当前修订版对它们运行常规diff:
diff -bur --ignore-all-space <dir1> <dir2>
。some of the options for
diff
uxh89sit3#
经典
diff
的工具描述为 “Compare FILESline by line"。git diff
也遵循这一原则,尽管它显然具有增强的功能。但行的概念似乎仍然是该工具的基础。我还没有看到解决这一问题的方法。而且通常不值得尝试和违背该工具的本质的麻烦。在问题中描述的情况下,需要对文件的编辑前和编辑后修订的文本进行标记化和规范化,以便最终获得比较diff的方便单位,传统上是行,然后在这些规范化版本上运行您选择的
diff
工具。