Git:格式正确autocolor%d

问题描述 投票:3回答:1

我读git-log manpage的方式:

%C(...):颜色规范,如color.branch。* config选项中所述;在开始时添加auto,只会在为日志输出启用颜色时发出颜色(通过color.diffcolor.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的正确格式序列是什么?

git colors git-log
1个回答
0
投票

您的第一种格式与色彩/非色彩输出的预期效果相似(至少在v2.11.0中)。

TL;DR

然而,您错过了重置颜色规格,如果在下一个项目的开头(如果没有设置颜色),则会导致错误的颜色。

更正了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
© www.soinside.com 2019 - 2024. All rights reserved.