我读git-log manpage的方式:
%C(...):颜色规范,如color.branch。* config选项中所述;在开始时添加
auto,
只会在为日志输出启用颜色时发出颜色(通过color.diff
,color.ui
或--color
,并且如果我们要去终端则尊重前者的自动设置)。单独的auto
(即%C(auto)
)将在下一个占位符上打开自动着色,直到再次切换颜色。
然后,对于%d
和%D
,以下两种格式之一应该是有条件地请求颜色的正确方法(正如您需要在脚本,别名或命名的漂亮格式中那样):
--pretty='%C(auto)%d'
--pretty='%C(auto,auto)%d'
但是,第一种格式(%C(auto)%d
)似乎不起作用,使用这三个命令进行测试 - 首先,生成没有寻呼机的颜色输出;第二,试图通过管道到cat
来调用自动颜色抑制;最后,明确地抑制颜色(注意,你需要检查分支和/或标签以查看颜色效果,否则%d
不输出任何内容):
git --no-pager log -5 --pretty='%C(auto)%d %C(auto,blue)%s'
# correctly shows %d dynamically colored and %s blue
git --no-pager log -5 --pretty='%C(auto)%d %C(auto,blue)%s' | cat
# still colored %d, but %s uncolored
git --no-pager log --color=never -5 --pretty='%C(auto) %d %C(auto,blue)%s'
# same: still colored %d, but %s uncolored
尝试第二种格式(%C(auto,auto)%d
)也不起作用:
git --no-pager log -5 --pretty='%C(auto,auto) %d %C(auto,blue)%s'
error: invalid color value: auto
fatal: unable to parse --pretty format
git --no-pager log -5 --pretty='%C(auto,auto) %d %C(auto,blue)%s' | cat
# correct, no colors
git --no-pager log --color=never -5 --pretty='%C(auto,auto) %d %C(auto,blue)%s'
# correct, no colors
我不确定我做错了什么。当且仅当输出通常被着色时,打印彩色%d
和%D
的正确格式序列是什么?
您的第一种格式与色彩/非色彩输出的预期效果相似(至少在v2.11.0中)。
然而,您错过了重置颜色规格,如果在下一个项目的开头(如果没有设置颜色),则会导致错误的颜色。
更正了colourspec:
%h %C(auto)%d %C(auto,blue)%s%C(auto,reset)
测试:
git config pretty.test "%h %C(auto)%d %C(auto,blue)%s%C(auto,reset)"
echo; git --no-pager log -5 --pretty=test
echo; git --no-pager log -5 --pretty=test | cat
echo; git --no-pager log -5 --pretty=test --color=never