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

7vhp5slm  于 2023-01-24  发布在  Git
关注(0)|答案(4)|浏览(271)

git diff的输出针对代码进行了优化,代码倾向于每行一条语句,而文本可能(如果像我这样的作者太懒而不使用换行符)导致diff输出,这非常难以阅读,而且与阅读diff输出相比,更多的是“Wally在哪里?”搜索

而在GitLab或GitHub的Web前端上突出显示则会立即显示差异

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

kuhbmx9i

kuhbmx9i1#

另一个答案中建议的word-diff并不是gitlab/github所做的,为了得到同样的效果,你可以使用diff-highlight脚本distributed with git
1.首先找到diff-highlight脚本的路径。它因系统而异,通常不在$PATH中。您可以使用软件包管理器找到它,例如:
1.费多拉:rpm -ql git | grep diff-highlight

  1. Debian/Ubuntu/Mint:dpkg -L git | grep diff-highlight
  2. Archlinux:pacman -Ql git | grep diff-highlight
    1.现在,执行以下两个命令,这将向~/.gitconfig添加必要的设置:
$ git config --global core.pager 'perl /usr/share/git/diff-highlight/diff-highlight | less'
$ git config --global interactive.difffilter 'perl /usr/share/git/diff-highlight/diff-highlight'

我在这里使用perl,而不是直接调用脚本,因为一些发行版,似乎没有设置脚本上的可执行位。我认为这是一个包错误,应该报告。无论如何,这个答案应该工作,无论如何。
现在,logdiffshow命令应逐字显示差异。

vltsax25

vltsax252#

另外值得一提的是diffr,它是用Rust编写的,使用Myers最长公共子序列算法,与git的diff-highlight相比,它给出了更好的结果,参见:
git的diff-highlight

diffr

安装后,使用它的方法与使用diff-highlight的方法类似,因此,例如,执行以下两个命令将diffr添加到全局配置中:

$ git config --global core.pager 'diffr | less'
$ git config --global interactive.difffilter diffr
5lhxktic

5lhxktic3#

您可以使用--word-diff[=<mode>]选项,以便更容易地查看一行中哪些单词发生了更改。
显示一个单词差异,使用<mode>来分隔更改的单词。默认情况下,单词是用空格分隔的;请参阅下面的--word-diff-regex<mode>默认为普通格式,并且必须是以下内容之一:

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

请注意,不管第一个模式的名称如何,如果启用,则在所有模式中都会使用颜色来加亮更改的零件。

kadbb459

kadbb4594#

Delta是其他答案中后处理工具的现代替代工具。
它具有高度可配置性emulation modes用于diff-highlightdiff-so-fancy),并且包含许多其他工具中没有的features并排视图,语法突出显示,以及合并冲突和**git blame输出**的着色。
Delta文档中还有一个overview of related projects,其中提到了一些可以生成类似输出的其他特别工具。

相关问题