git-log中的颜色

当你运行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" 

从git 1.8.3(2013年5月24日)开始,可以使用%C(auto)装饰git log格式string中的%d

从发行说明 :

  * "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.) 

git log --decorate默认会把:

  • 在青色的头
  • 在红色的远程分支
  • 绿色的标签

并可以通过color.decorateconfiguration进行更改。

但是, git log --format不提供专门显示HEAD 遥控器分支的方法:所有三个都通过%d显示,只有一种颜色可能。


如Elad Shahar (upvoted)所述,2013年5月更新,git 1.8.3提供了另一个选项:

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

这个Atlassian博客文章评论说,这个function是其他几个重点格式( git rebasegit count-objects )和颜色( git branch -vv )的一部分,

此外还有1.8.2的auto,reset ,当输出不用于terminal1时,会自动禁用颜色

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

注意:git 2.4+(2015年第二季度)将会更好地重新设置分支名称的颜色。
见Junio C gitstergitster )的 提交5ee8758 :

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

在“ git log --decorate ”中,你会看到这样的提交标题:

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

commit ... ( color.diff.commit中的“ commit ... ( ”), color.diff.commit中的“ HEAD ”, color.decorate.head中的分支名称,然后closures“ ) “in color.diff.commit

如果你想用与正文相同的颜色绘制HEAD和本地分支名称(也许是因为青色和绿色在黑色的terminal上太微弱以至于不能读取),那么你就不会想要说

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

因为你将无法在白底黑字terminal上重复使用相同的configuration。 你会天真地期待

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

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


请注意,git 2.5(Q2 2015)修复了一个bug:

见Junio C gitstergitster )的 提交429ad20 ,2015年5月13日。
(由Junio C gitster合并- gitster -在2015年5月22日提交fd70780 )

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

Git 2.4中的“ log --decorate ”增强function在当前分支的顶端显示提交,例如“ HEAD -> master ”,并不适用于–decorate = full。


Git 2.9.x +(Q3 2016)将修复另一个错误,并为%C(auto)荣誉color=auto


Git 2.10.2(2016年10月)修复其他错误与提交82b83da (2016年9月29日),并提交由RenéScharfe(“)c99ad27( 2016年9月17日) 。
(由Junio C gitster合并- gitster -在承诺76796d4 ,2016年10月28日)

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

我们发出一个转义序列来重置%C(auto)颜色和属性,以确保自动着色按预期显示。
如果输出strbuf为空 ,即在格式化string开始时出现%C(auto) ,那么停止这样做 ,因为这样就不需要复位,我们在输出中保存几个字节。

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

%C(auto)时重置颜色和属性以启用全自动控制; 否则,像以前的%C占位符一样,粗体或反转等属性仍然有效

将它们括起来:

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

所以%C(yellow reverse)会起作用。

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

 git config --global log.decorate full 

一旦完成,你可以使用color.decorate.*来玩颜色