【问题标题】:how to show whitespace differences with git --word-diff?如何使用 git --word-diff 显示空格差异?
【发布时间】:2018-08-31 23:30:45
【问题描述】:

为了说明问题:见diff

本段中唯一的差异(以A macro that needs 开头的是空格差异(在某些地方插入/删除了换行符);

  • 在运行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 中使用颜色。

注意:this 无济于事,因为git diff --word-diff=porcelain 的输出中未显示空格差异

【问题讨论】:

  • 您说字符差异“通常不是我们想要的”。你能更具体一点,或者举一个你不想要的例子吗?您的意思是您根本不希望显示非空白更改吗? IE。您只想在隐藏任何其他更改的同时查看空白更改?
  • 查看解释这一点的编辑。字符差异忽略单词边界,因此会从不同单词中抓取字母以最小化差异;如果某些文本被完全重写,结果将完全不可读。

标签: git diff whitespace word-diff


【解决方案1】:

--word-diff-regex 命令允许您指定一个正则表达式来自定义--word-diff 行为。使用句号 (.) 的常见示例将给出逐个字符的匹配,因为句号正则表达式匹配任何字符。当未指定正则表达式时,默认值因文件类型而异,但通常会忽略空格更改,同时也将它们用作单词边界。

您可以使用正则表达式,通过以下方式将行划分为单词和空白区域:

git diff --word-diff-regex="[ ]+|[^ ]+"

通过对链接示例的略微调整版本,可以看出git diff --word-diff-regex=. 的问题:

虽然git diff --word-diff-regex="[ ]+|[^ ]+" 会给你:

【讨论】:

    【解决方案2】:

    https://github.com/so-fancy/diff-so-fancyhttps://coderwall.com/p/nl-bdg/more-readable-git-word-diff-on-osx 实际上可能是一种更好的方法,显示类似于 github 的差异,其中显示了更多上下文,但也突出显示了实际更改的部分。

    【讨论】:

      猜你喜欢
      • 2014-10-22
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 2014-09-29
      相关资源
      最近更新 更多