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

问题描述 投票:2回答:2

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

enter image description here

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

enter image description here

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

git highlight highlighting git-diff
2个回答
3
投票

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

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

  • color - 仅使用颜色突出显示更改的单词。意味着--color
  • plain - 显示单词[-removed-]{+added+}.如果它们出现在输入中,则不会尝试转义分隔符,因此输出可能不明确。
  • porcelain - 使用专门用于脚本消费的基于行的格式。添加/删除/未更改的运行以通常的统一diff格式打印,从行开头的+/-/` `字符开始,并延伸到行的末尾。输入中的换行符由自己的行上的波浪号~表示。
  • none - 再次禁用字差异。

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


1
投票

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

首先,你需要在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

© www.soinside.com 2019 - 2024. All rights reserved.