如何在git diff中自定义diff头的颜色?

Tim*_*imK 14 git

当我运行时git diff,每个差异的标题部分以白色文本显示.因为我使用的是浅色背景,所以很难阅读,所以我想改变它.

我发现我可以改变diff输出中的其他颜色,如下所示(in .gitconfig):

[color "diff"]
    old = green
    new = red
Run Code Online (Sandbox Code Playgroud)

但是我无法弄清楚要把标题颜色放在那里.更好的是,是否存在记录所有默认git config设置的位置?

'diff header'是指这样的行:

diff --git a/README.md b/README.md
index f102026..c5e3428 100644
--- a/README.md
+++ b/README.md
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 24

尝试设置color.diff.meta,例如

git config --global color.diff.meta blue
Run Code Online (Sandbox Code Playgroud)

或者通过手动编辑配置文件

[color "diff"]
    meta = blue
Run Code Online (Sandbox Code Playgroud)

您可以查看参考中的各种color.设置git-config获取更多可能的设置.该color.diff.meta设置列于此处:

color.diff.<slot>
使用自定义颜色进行差异着色.<slot>指定补丁的哪个部分使用指定的颜色,并且是plain(上下文文本),meta(元信息),frag(hunk header),func(hunk header中的函数),old(删除的行),new(添加的行),commit(commit headers)之一),或whitespace(突出显示空白错误).这些变量的值可以指定为color.branch.<slot>.


Gab*_*les 8

一个谷歌搜索“git的差异改变颜色”显示这个问题作为最高命中,所以让我加我来到这里寻找的信息,现在我已经想通了,知道别人在这里也将登陆寻找同样的信息.

基本git diff颜色选项:

  1. meta = 标题信息(默认为白色),如下所示:

     diff --git a/home/.bashrc b/home/.bashrc
     index 148212d..a0d16d8 100644
     --- a/home/.bashrc
     +++ b/home/.bashrc
    
    Run Code Online (Sandbox Code Playgroud)
  2. old = 删除的行(默认为红色)

  3. new = 添加的行(默认为绿色)

~/.gitconfig中的全局 gitconfig 文件中更改这些颜色,如下所示:

git config --global color.diff.meta blue
git config --global color.diff.old blue
git config --global color.diff.new blue
Run Code Online (Sandbox Code Playgroud)

或者直接编辑 ~/.gitconfig 并添加以下行:

[color "diff"]
    meta = blue
    old = blue
    new = blue
Run Code Online (Sandbox Code Playgroud)

有关更多颜色设置或您可以更改的“插槽”,请查看手册页:

man git config
Run Code Online (Sandbox Code Playgroud)

在此处在线查看,然后搜索color.diff.<slot>.

我可以使用哪些颜色?

从或在线查看颜色部分man git confighttps : //git-scm.com/docs/git-config#Documentation/git-config.txt-color

颜色

接受颜色的变量的值是一个颜色列表(最多两种,一种用于前景,一种用于背景)和属性(任意数量),以空格分隔。

接受基本的颜色normalblackredgreenyellowbluemagentacyanwhite。给出的第一种颜色是前景;二是背景。除了normal有一个明亮的变体外,所有的基本颜色都可以通过在颜色前加上 来指定bright,比如brightred

颜色也可以是 0 到 255 之间的数字;这些使用 ANSI 256 色模式(但请注意,并非所有终端都支持此模式)。如果您的终端支持它,您还可以将 24 位 RGB 值指定为十六进制,例如#ff0ab3.

接受的属性是bolddimulblinkreverseitalicstrike(用于划线或“删除线”字母)。任何属性相对于颜色的位置(之前、之后或中间)都无关紧要。可以通过在它们前面加上nono-(例如noreverseno-ul, 等)来关闭特定的属性。

空颜色字符串根本不会产生颜色效果。这可用于避免在不完全禁用颜色的情况下为特定元素着色。

对于 git 的预定义颜色槽,属性旨在在彩色输出中的每个项目的开头重置。因此,设置color.decorate.branchblack会将分支名称绘制为一个普通的black,即使同一输出行上的前一个内容(例如,log --decorate输出中分支名称列表之前的左括号)设置为使用bold或 某些其他属性绘制。但是,自定义日志格式可能会做更复杂和分层的着色,而否定形式在那里可能很有用。

具有前景、背景和文本属性(粗体、斜体删除线)的更复杂示例:

这是一个更复杂的例子。第一个颜色是前景色,第二个颜色是背景色,后面的词都是属性。有关man详细信息,请参阅上面引用的ual 页面。

运行这些命令:

git config --global color.diff.meta "blue"
git config --global color.diff.old "black red strike"
git config --global color.diff.new "black green italic"
git config --global color.diff.context "yellow bold"
Run Code Online (Sandbox Code Playgroud)

或将以下内容复制/粘贴到~/.gitconfig文件的底部:

[color "diff"]
    meta = blue
    old = black red strike
    new = black green italic
    context = yellow bold # context (ie: unchanged lines) text
Run Code Online (Sandbox Code Playgroud)

这是具有这些设置的git diffngit diff带有行号)的一些示例输出。请注意已删除行的红色删除线文本。很酷。直到今天我才知道这是可能的(虽然不是因为我喜欢这些颜色——我认为默认是最好的 :))。

另请注意,冒号没有着色或样式化以匹配左右周围的文本。这是有意和设计的行为,用作左侧添加的行号和git diff右侧的原始输出之间的视觉分隔符。

在此处输入图片说明

  • 如果您想避免更改全局配置(即您只想一次性更改颜色),您可以通过“-c”传递参数,例如:“git -c color.diff.new=cyan diff &lt;file1&gt;” &lt;file2&gt;` 以青色显示所有添加内容 (4认同)
  • @jasonleonhard是的,我还忘记添加复杂的说明符,你只需要添加引号。例如,对于粗体青色: `git -c color.diff.new="cyan Hundred" diff &lt;file1&gt; &lt;file2&gt;` (2认同)