用 Git-log 染色

当您运行 git log --decorate --pretty=oneline时,输出将包含像 (HEAD, refs/published/master, master)这样带有着色的条目。

I also have the following in my gitconfig:

[color "branch"]
current = yellow reverse
local = yellow
remote = green

在执行下面这样的自定义格式时,如何复制这些颜色?

git log --decorate --stat --graph --pretty=format:"%d %Cgreen%h%Creset (%ar - %Cred%an%Creset), %s%n"
48706 次浏览

用括号括起来:

%C(...): color specification, as described in color.branch.* config option

所以 %C(yellow reverse)可以用。

git log --decorate将默认写入:

  • 青色的头
  • 红色的遥远的树枝
  • 绿色的标签

并且可以通过 color.decorate配置进行更改。

但是,git log --format没有提供一种方式来显示具体的 HEAD 或者远程 或者分支: 所有三个都通过 %d显示,一种颜色可能。


Update May 2013, as 下面提到 by Elad Shahar (upvoted), git 1.8.3 offers one more option:

git log –format现在拥有一个 %C(auto)令牌,它告诉 Git 在解析 %d(装饰)、 %h(短提交对象名称)等终端输出时使用颜色。

This Atlassian 的博客文章 comments that this feature is part of several others focused on format (git rebase, git count-objects) and colors (git branch -vv)

This comes in addition of the previous auto,reset为1.8.2, which automatically disables colors when the output is not used for a terminal1

%C(auto,blue)Hello%C(auto,reset)

注意: git 2.4 + (2015年第二季度)可以更好地重置分支名称周围的颜色。
提交5ee8758 by 滨野俊男(gitster):

log --decorate: 不要泄漏“提交”颜色到下一个项目

在“ git log --decorate”中,您将看到如下提交头:

commit ... (HEAD, jc/decorate-leaky-separator-color)

其中“ commit ... (”画在 color.diff.commit,“ HEAD”画在 color.decorate.head,“ ,”画在 color.diff.commit,分行名称在 然后在 color.diff.commit中关闭“ )”。

如果您希望将 HEAD 和本地分支名称绘制为与正文文本相同的颜色(可能是因为青色和绿色在黑白终端上太过模糊,以至于无法读取) ,那么您不需要说

[color "decorate"]
head = black
branch = black

因为你不能在一个黑白终端上重复使用相同的配置

[color "decorate"]
head = normal
branch = normal

工作,但不幸的是,它没有。
它将字符串“ HEAD”和分支名称绘制为与装饰元素之间的开头括号或逗号相同的颜色。
这是因为代码在以自己的颜色打印“前缀”之后忘记重置颜色。


注意,git 2.5(2015年第二季度)修复了一个 bug:

See commit 429ad20 by 滨野俊男(gitster), 13 May 2015.
(由 朱尼奥 · C · 哈马诺 gitster于2015年5月22日在 commit fd70780合并)

log: do not shorten decoration names too early

Git 2.4中的“ log --decorate”增强在当前分支的末端显示了提交,例如“ HEAD -> master”,这种增强不适用于—— decate = full。


Git 2.9.x+ (Q3 2016) will fix another bug and 为 ABC1向 color=auto致敬


Git 2.10.2 (Oct. 2016) fixes other bugs with 承认82b83da (29 Sep 2016), and 提交 c99ad27 (17 Sep 2016) by René Scharfe (“).
(Merged by 朱尼奥 · C · 哈马诺 gitster in 提交76796d4, 28 Oct 2016)

pretty: 如果输出为空,则避免为 %C(auto)添加重置

我们发出一个转义序列,用于重置 %C(auto)的颜色和属性,以确保自动着色按预期显示。
如果输出 strbuf 为空 ,即当 %C(auto)出现在格式字符串的开头时,停止执行此操作,因为这样就不需要重置,并且我们在输出中节省了几个字节。

pretty: let %C(auto) reset all attributes

%C(auto)上重置颜色 和属性以启用全自动 控制它们; < strong > 否则,属性(比如粗体或反向)可能 仍然是有效的从以前的 %C占位符 。

The config option log.decorate can enable/disable default decorations in logs.

git config --global log.decorate full

一旦这样做,你可以使用 color.decorate.*的颜色发挥

从 git 1.8.3(2013年5月24日)开始,您可以使用 %C(auto)%d装饰成 git log的格式字符串。

来自 释放通知书:

 * "git log --format" specifier learned %C(auto) token that tells Git
to use color when interpolating %d (decoration), %h (short commit
object name), etc. for terminal output.)

有些人可能想使用这个: %C(colorname) 这不需要改变颜色配置。

示例: 将作者姓名涂成黄色

--pretty=format:"%C(yellow)%an%Creset"

规则的 ANSI 颜色应该工作 https://en.wikipedia.org/wiki/ANSI_escape_code

  • 黑色
  • 红色
  • 绿色
  • 黄色
  • 蓝色
  • 洋红色
  • 青色
  • 白色