git diff
的输出针对代码进行了优化,代码往往是每行一个语句而文本可以(如果像我这样的作者懒得使用换行符)会导致难以阅读的差异输出等等一个“哪里的沃利?”搜索比读取差异输出
而在GitLab或GitHub的网络前端上进行的突出显示会立即显示差异
我知道我正在比较HTML和纯文本(苹果和橙子),但是应该可以通过使用不同的颜色或在更改周围添加标记字符来改进git diff
输出(JUnit使用[]
围绕插入不太好阅读,但是我的意思是一个例子),这将是第一次有一些东西,我期望在git中可用的东西实际上不是。
答案 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
:
diffr
:
安装后,其使用方法与diff-highlight
类似,即编辑〜/ .gitconfig,并添加到以下的[pager]
部分:
[pager]
log = diffr | less
show = diffr | less
diff = diffr | less
答案 2 :(得分:1)
另一个答案中建议的word-diff
并不是gitlab / github所做的。为了获得相同的效果,可以使用distributed with git的diff-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
现在log
,diff
,show
命令应逐字显示差异。截图: