112

当您运行时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"
4

5 回答 5

98

从git %C(auto)1.8.3 (2013 年 5 月 24 日)开始,您可以使用.%dgit 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.)
于 2013-05-30T19:26:46.497 回答
60

git log --decorate默认放置:

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

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

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


2013 年 5 月更新,正如Elad Shahar(upvoted)在下面提到的,git 1.8.3 提供了另一种选择

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

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

这是auto,reset1.8.2的补充,当输出不用于终端时,它会自动禁用颜色1

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

注意:git 2.4+(2015 年第二季度)会更好地重置分支名称周围的颜色。
请参阅Junio C Hamano ( )提交 5ee8758gitster

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

在 " git log --decorate" 中,你会看到这样的提交标头:

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

其中“ commit ... (”画在color.diff.commit,“ HEAD”中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 年第二季度)修复了一个错误:

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

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

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


Git 2.9.x+(2016 年第三季度)将修复另一个错误color=auto%C(auto)


Git 2.10.2(2016 年 10 月)通过提交 82b83da(2016 年 9 月 29 日)和René Scharfe (``)提交的 c99ad27(2016 年 9 月 17 日)修复了其他错误。(由Junio C Hamano 合并 -- --提交 76796d4中,2016 年 10 月 28 日)
gitster

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

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

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

重置颜色和属性%C(auto)启用对它们的全自动控制;否则,诸如粗体或反向之类的属性仍可能对以前的%C占位符有效。

于 2011-05-05T04:08:55.717 回答
9

将它们括起来:

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

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

于 2011-05-04T23:02:06.807 回答
8

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

git config --global log.decorate full

完成后,您可以color.decorate.*用来玩颜色

于 2012-03-23T17:51:23.137 回答
5

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

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

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

常规 ANSI 颜色应该可以使用https://en.wikipedia.org/wiki/ANSI_escape_code

  • 黑色的
  • 红色的
  • 绿色
  • 黄色的
  • 蓝色的
  • 品红
  • 青色
  • 白色的
于 2019-01-07T10:09:05.910 回答