我现在对控制台中 git-diff 的默认配色方案中各种颜色的含义有点迷失。我似乎找不到任何关于它们的文档。我在 Manjaro/XFCE 中使用 xfce4-terminal。
看起来 git-diff 的默认配色方案是“斑马纹”。我的 diff 中有八个导入语句,以七种不同的颜色表示。我觉得这有点疯狂。
谢谢。
您可能已经diff.colorMoved在 Git 配置中进行了设置(运行git config --get diff.colorMoved;要查看是谁设置的,请使用git config --list --show-origin)。如果请求此模式,则默认为确实zebra,这显然会让您想起它对我所做的相同的事情:愤怒的水果沙拉。
回到昏暗的时代,没有颜色。我们非常感谢 Glass TTY 取代了我们的旧打印机。Plaindiff被发明了,它提到了三件事:
a;表示d;表示 和c。例如:
$ cat old
$ cat old
line one
line two
line three
line four
line five
$ cat new
line one
inserted
line two
line four
line 5
$ diff old new
1a2
> inserted
3d3
< line three
5c5
< line five
---
> line 5
Run Code Online (Sandbox Code Playgroud)
后来,上下文差异被发明作为一种更有用的方式来显示这一点:
$ diff -c old new
*** old 2021-09-13 16:11:48.145950000 -0700
--- new 2021-09-13 16:11:56.597068000 -0700
***************
*** 1,5 ****
line one
line two
- line three
line four
! line five
--- 1,5 ----
line one
+ inserted
line two
line four
! line 5
Run Code Online (Sandbox Code Playgroud)
标记字母a、d、 和分别c替换为行前标记+、-、 和!。
当然,“改变”只是指“删除和添加”。在统一模式下,plaindiff使用这些来代替,所以不再有!:
$ diff -u old new
--- old 2021-09-13 16:11:48.145950000 -0700
+++ new 2021-09-13 16:11:56.597068000 -0700
@@ -1,5 +1,5 @@
line one
+inserted
line two
-line three
line four
-line five
+line 5
Run Code Online (Sandbox Code Playgroud)
我将跳过“上下文”和“统一”差异之间的精确区别,因为它不是那么有趣,但两者都提供了上下文。“统一”通常会使输出更小,更容易人类阅读,但代价是机器解析稍微困难一些。
最终,我们的黑白显示被彩色、窗口和所有其他奇特的东西所取代。自然地,有人为差异输出添加了颜色:红色表示删除的文本,绿色表示添加的文本,这很常见。毫无疑问,之所以选择这个,是因为最常见的色盲是红绿色盲。因此,随之而来的是git diff,它使用这些颜色来放弃左列(“装订线”)插入,以消除空格和+标记-......哦,等等,它没有:
$ git diff old new
diff --git a/old b/new
index 9864d22..8e331db 100644
--- a/old
+++ b/new
@@ -1,5 +1,5 @@
line one
+inserted
line two
-line three
line four
-line five
+line 5
Run Code Online (Sandbox Code Playgroud)
这解决了色盲问题,对吗?
(它不会以纯文本形式显示在 StackOverflow 上,但@@大块标题为青色,线条+inserted为绿色,依此类推。)
人们对此并不满意,人类视觉系统确实非常擅长发现某些色差(以常见色盲问题为模:它影响大约 8% 的男性和 0.5% 的女性;请参阅https://例如, www.colourblindawareness.org/colour -blindness/;许多人甚至不知道他们有它!)。因此人们开发了更多的过滤器和模式。一些网站(特别是 GitHub)采用基本的红色/绿色,并对其进行一些标记以显示一行中各个已更改的字符,这有时非常有用。
Git 已经获得了事后检测移动行的能力。1 为了帮助区分移动的行和删除并添加的行,Git 可以对这些行进行不同的颜色。
启用“移动行”检测的开关diff.colorMoved位于您的.git/config或其他 Git 配置文件中,由、 和命令行选项$HOME/.gitconfig操作。它们采用可选值,它是要使用的配色方案的名称。git config--color-moved
如果您在配置中启用了 color-moved,则可以使用 一次git diff调用禁用它--no-color-moved。如果您尚未在配置中启用它,则可以使用或为每次git diff调用测试它。有很多值;有关详细信息,请参阅文档。--color-moved--color-moved=modemodegit diff
有关运行 的信息,请参阅文档git config,git config包括如何确定某些系统提供的配置可能来自何处 ( --list --show-origin)。
1有一些 diff 引擎会在 diff过程中检测到这一点,但 Git 仍然主要使用那些不会检测到这一点的引擎(尽管git blame这里有所不同)。相反,Git 以各种尝试对 diff 输出进行后处理,使其更符合人类的期望,例如,在空行上同步比在右大括号或其他什么上同步更多。这包括当前的移动线检测,它仅在每个“差异块”中查找。