如何使用git --word-diff显示空格差异?

9
为了说明问题,请参见差异
这段话的唯一差异在于空格(某些地方插入/删除换行符);
当运行git diff时,它显示前面的段落为红色,后面的段落也为红色,很难发现差异;
当运行git diff --word-diff时,它显示后面的段落为灰色,并且不显示空格更改;
当运行git diff --word-diff-regex=.时,它显示空格更改(很棒!),但是[编辑]它按字符差异比较,这通常很难阅读,因为它混合了来自不同单词的字母以最小化差异,例如: git show --word-diff-regex=. 4a720394bba39ce1e67d518b909cbb1c25f63d09 [- * patch compile-]r [-so `isM-]a[-inModule`-] [-is true when -d:isMainModuleIsAlwaysTr-]{+m+}u[-e-] [- T-]{+c+}h[-at'll give speedup-] be[-nefi-]t[-, and we don'-]t[- hav-]e{+r+} [-to p-]{+w+}a[-tch stdlib files-]{+y+}. ]# 我想要的是在运行--word-diff(或--word-diff-regex)时显示空格差异的选项,例如通过{+ +}[- -];注意:--word-diff=color也可以显示这些内容,例如通过{+ +}[- -],否则这些内容将消失。
注意:我在我的gitconfig中使用颜色。
注意:这个无法帮助,因为空格差异不会显示在git diff --word-diff=porcelain输出中。

你说字符差异“往往不是我们想要的”。你能更具体地说明或举个例子,说明你不想要什么吗?你的意思是根本不想显示非空格更改吗?也就是说,你只想看到空格更改,同时隐藏任何其他更改? - Silveri
请注意,以下是程序相关的内容。字符差异忽略单词边界,因此会从不同单词中获取字母以最小化差异;如果某些文本完全重写,则结果将完全无法阅读。 - timotheecour
2个回答

7
"--word-diff-regex"命令允许您指定一个正则表达式来自定义"--word-diff"的行为。常见的例子是使用句点(.),因为句点正则表达式匹配任何字符,所以将给出逐字逐句的匹配。当未指定正则表达式时,默认值取决于文件类型,但通常会忽略空格更改,同时将其用作单词边界。
您可以使用一个正则表达式来将行分成单词以及空白区域,例如:
git diff --word-diff-regex="[ ]+|[^ ]+"

通过稍微修改你提供的例子,可以看到使用 git diff --word-diff-regex=. 的问题:enter image description here。而使用 git diff --word-diff-regex="[ ]+|[^ ]+" 则会得到这样的结果:enter image description here

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接