如何改善git的差异突出显示?

时间:2018-03-14 13:06:43

标签: git highlight highlighting git-diff

git diff的输出针对代码进行了优化,代码往往是每行一个语句而文本可以(如果像我这样的作者懒得使用换行符)会导致难以阅读的差异输出等等一个“哪里的沃利?”搜索比读取差异输出

enter image description here

而在GitLab或GitHub的网络前端上进行的突出显示会立即显示差异

enter image description here

我知道我正在比较HTML和纯文本(苹果和橙子),但是应该可以通过使用不同的颜色或在更改周围添加标记字符来改进git diff输出(JUnit使用[]围绕插入不太好阅读,但是我的意思是一个例子),这将是第一次有一些东西,我期望在git中可用的东西实际上不是。

3 个答案:

答案 0 :(得分:3)

您可以使用--word-diff[=<mode>]选项,以便更容易查看哪一行在一行中发生了变化。这在手册页中描述为

  

显示单词diff,使用<mode>分隔更改的单词。默认情况下,单词由空格分隔;请参阅下面的--word-diff-regex。   <mode>默认为plain,必须是以下之一:

     
      
  • color - 仅使用颜色突出显示更改的字词。意为--color

  •   
  • plain - 将单词显示为[-removed-]{+added+}.如果分隔符出现在输入中,则不会尝试转义分隔符,因此输出可能不明确。

  •   
  • porcelain - 使用专门用于脚本消费的基于行的格式。添加/删除/未更改的运行以通常的统一diff格式打印,从行开头的+/-/` `字符开始并延伸到行尾。输入中的换行符由自己的行上的波浪号~表示。

  •   
  • none - 再次停用字差异。

  •   
     

请注意,尽管有第一个模式的名称,但如果启用了颜色,则使用颜色突出显示所有模式中已更改的部分。

答案 1 :(得分:3)

值得一提的是diffr。它是用Rust编写的,并使用Myers最长的通用子序列算法。与git的diff-highlight相比,它提供了更好的结果,请参见:

git的diff-highlight

diff-highlight

diffr

diffr

安装后,其使用方法与diff-highlight类似,即编辑〜/ .gitconfig,并添加到以下的[pager]部分:

[pager]
    log  = diffr | less
    show = diffr | less
    diff = diffr | less

答案 2 :(得分:1)

另一个答案中建议的word-diff并不是gitlab / github所做的。为了获得相同的效果,可以使用distributed with gitdiff-highlight脚本。

首先,您必须在git安装中列出文件,并找到diff-highlight的路径。它因系统而异,通常不在$ PATH中。例如。在我的Archlinux上是/usr/share/git/diff-highlight/diff-highlight,但是在Fedora it's /usr/share/git-core/contrib/diff-highlight上。

然后您编辑〜/ .gitconfig,并添加到以下的[pager]部分:

[pager]
    # diff-highlight is script provided by git that shows word-by-word diff
    log  = /usr/share/git/diff-highlight/diff-highlight | less
    show = /usr/share/git/diff-highlight/diff-highlight | less
    diff = /usr/share/git/diff-highlight/diff-highlight | less

现在logdiffshow命令应逐字显示差异。截图:

git log -1 -p