git-log中的颜色


106

运行时git log --decorate --pretty=oneline,输出中将包含(HEAD, refs/published/master, master)带有颜色的条目。

我的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"

Answers:


91

从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.)

60

git log --decorate会将默认:

  • 青色的HEAD
  • 红色的偏远分支
  • 绿色标签

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

但是,git log --format没有提供一种专门显示,HEAD 遥控器分支的方法:所有这三种都通过来显示%d,并且可能使用一种颜色。


如2013年5月更新,如以下Elad Shahar提到的(已投票),git 1.8.3提供了另一个选项:

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

这个 Atlassian博客文章评论说,此功能是其他一些功能的一部分,这些功能专注于格式(git rebasegit count-objects)和颜色(git branch -vv

这是先前的补充 auto,reset对1.8.2的在不将输出用于终端时自动禁用颜色1。

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

注意:git 2.4+(2015年第二季度)将更好地重置分支名称周围的颜色。
参见commit 5ee8758通过JUNIOÇ滨野(gitster

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

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

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

其中“ commit ... (”是画中color.diff.commitHEAD”中color.decorate.head, ”在color.diff.commit,分支的名称在 color.decorate.branch然后)在“ ” 被关闭color.diff.commit

如果您想用与正文相同的颜色来绘制HEAD和本地分支名称(也许是因为在黑白终端上青色和绿色太微弱以致于无法读取),您不必说

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

因为您将无法在黑底白字终端上重复使用相同的配置。你会天真地期待

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

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


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

看看提交429ad20通过JUNIOÇ滨野(gitster,2015年5月13日
(通过合并JUNIOÇ滨野- gitster-提交fd70780 2015,5月22日)

log:不要过早缩短装饰名称

log --decorateGit 2.4中的“ ”增强功能在当前分支的最顶端显示了提交,例如“ HEAD -> master”,在--decorate = full下不起作用。


Git的2.9.x +(Q3 2016)将解决另一个bug和荣誉color=auto%C(auto)


GIT中2.10.2(10月2016)修正其他错误与提交82b83da(2016年9月29日),并提交c99ad27由(2016年9月17日)勒Scharfe(``)
(由Junio C gitsterHamano合并--76796d4号提交中,2016年10月28日)

pretty:避免%C(auto)在输出为空时添加复位

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

pretty:让 %C(auto)所有属性重置

复位颜色和属性%C(auto),以使他们在全自动控制; 否则,诸如粗体或反向之类的属性仍可从先前的%C占位符中生效


3
没有办法使用--decorate和--pretty =“ ... stuff”?
2011年

8
@NorthlsUp:--decorate似乎有它自己的实现和配置,同时--pretty提供通过相同的信息%d作为一个块,这意味着你不能有颜色配置相同细粒度水平--pretty比你有--decorate
VonC

我在“ git log”之后添加“ --decorate”时看到的唯一区别是存储库以“ refs / heads / ...”或“ refs / remotes ...”开头。颜色以任何一种方式显示。知道会导致什么吗?我问的原因是我的.gitconfig没有显示任何颜色属性。我想知道在哪里可以找到我的“ color.decorate”属性。我的.gitconfig文件中没有看到它。
J土拨鼠'18

@JWoodchuck尝试git config --show-origin -l:您将看到所有配置。然后,您可以grep表示“颜色”。
VonC

是的,当我使用grep进行颜色显示时,什么都不会显示,这使显示设置的地方变得如此神秘。
J土拨鼠'18

9

给它们加上括号:

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

所以%C(yellow reverse)会工作。


1
不完全%d是所有分支,所以它看起来像(HEAD, master),在这种情况下,标题应该是蓝色,而主色应该是绿色(我相信这些是默认颜色)。哪里%C(yellow)%d%Creset会使它们都具有相同的颜色。
2011年

2
哦,给单个装饰上色。我认为这是不可能的。呈现日志条目的代码实际上实现了两次。
Josh Lee,

1
太糟糕了,这是不可能的...我很想做git log --decorate --oneline --date=...
mgalgs 2012年

8

config选项log.decorate可以启用/禁用日志中的默认装饰。

git config --global log.decorate full

完成后,您就可以使用color.decorate.*颜色了


3
log.decorate=full使引用名称带有前缀(refs/heads/等)打印;我发现log.decorate=short更有用。
musiphil 2014年

1
非常有用的设置,虽然我也喜欢short,而不是full
托马斯Levesque的

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.