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

时间:2014-11-15 00:36:26

标签: git

当我运行git diff时,每个差异的标题部分都以白色文字显示。由于我使用浅色背景,因此很难阅读,所以我想改变它。

我发现我可以改变diff输出中的其他颜色(在.gitconfig中):

[color "diff"]
    old = green
    new = red

但我无法弄清楚要用于标题颜色的内容。更好的是,是否存在记录所有默认git config设置的位置?

由' diff header'我的意思是这样的行:

diff --git a/README.md b/README.md
index f102026..c5e3428 100644
--- a/README.md
+++ b/README.md

4 个答案:

答案 0 :(得分:18)

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

git config --global color.diff.meta blue

或手动编辑配置文件

[color "diff"]
    meta = blue

您可以查看各种color.设置in the git-config reference以了解更多可能的设置。此处列出color.diff.meta设置:

  

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

答案 1 :(得分:3)

Google search for "git diff change colors"将该问题显示为热门问题,因此,现在我已经弄清楚了,知道其他人也会在这里寻找相同的信息,因此让我添加我来这里寻找的信息。

基本的git diff颜色选项:

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

     diff --git a/home/.bashrc b/home/.bashrc
     index 148212d..a0d16d8 100644
     --- a/home/.bashrc
     +++ b/home/.bashrc
    
  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

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

[color "diff"]
    meta = blue
    old = blue
    new = blue

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

man git config

或查看online here,然后搜索color.diff.<slot>

我可以使用什么颜色?

请参见man git config中的颜色部分,或在线此处:https://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.branch设置为black会将分支名称绘制为普通的black,即使同一输出行上的前一个内容(例如,在{{ 1}}输出)设置为使用log --decorate或其他一些属性进行绘制。但是,自定义日志格式可能会进行更复杂和分层的着色,否定形式可能会有用。

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

这是一个更复杂的示例。第一种颜色是前景颜色,第二种颜色是背景颜色,其后的任何单词都是属性。有关详细信息,请参见上面引用的bold手册页。

运行以下命令:

man

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

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"

以下是使用这些设置的git diffn (git diff with line numbers)的一些示例输出。注意已删除行的红色删除线文本。很酷我直到今天才知道这是不可能的(虽然我不是喜欢这些颜色-我认为默认颜色是最好的:))。

还请注意,冒号没有进行着色或样式化以匹配左右两侧的周围文本。这是有意行为,它是设计好的行为,可以用作在左侧添加的行号和在右侧添加的原始[color "diff"] meta = blue old = black red strike new = black green italic context = yellow bold # context (ie: unchanged lines) text 输出之间的可视分隔符。

enter image description here

答案 2 :(得分:1)

绝对推荐:diff-so-fancy

答案 3 :(得分:0)

如果您在 Windows 环境中尝试此操作,您可能会在“C:\Users\username\.gitconfig”中找到全局 .gitconfig。

git config --global 有效,但如果你像我一样多次运行它,你最终会在 .gitconfig 中得到重复的条目。那么您可能只想手动编辑它。