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 rebase , git count-objects )和颜色( git branch -vv )的一部分,
此外还有1.8.2的auto,reset ,当输出不用于terminal1时,会自动禁用颜色
%C(auto,blue)Hello%C(auto,reset)
注意:git 2.4+(2015年第二季度)将会更好地重新设置分支名称的颜色。
见Junio C gitster ( gitster )的 提交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“)“incolor.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 gitster ( gitster )的 提交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.*来玩颜色