Git: 格式化为正确自动着色 %d
Git: format to correctly autocolor %d
我阅读 git-log manpage 的方式:
%C(…): color specification, as described in color.branch.* config option; adding auto,
at the beginning will emit color only when colors are enabled for log output (by color.diff
, color.ui
, or --color
, and respecting the auto settings of the former if we are going to a terminal). auto
alone (i.e. %C(auto)
) will turn on auto coloring on the next placeholders until the color is switched again.
那么以下两种格式之一应该是有条件地请求颜色的正确方法(就像您需要在脚本、别名或命名漂亮格式中做的那样) %d
和 %D
:
--pretty='%C(auto)%d'
--pretty='%C(auto,auto)%d'
然而,第一种格式(%C(auto)%d
)似乎不起作用,用这三个命令进行测试——首先,在没有分页器的情况下生成彩色输出;其次,尝试通过管道传输到 cat
来调用自动颜色抑制;最后,显式抑制颜色(注意,您需要检查一个分支 and/or 标记以查看颜色效果,否则 %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
的正确格式顺序是什么?
您的第一种格式在 colourised/non-colourised 输出方面符合预期(至少对于 v2.11.0)。
TL;DR
然而你错过了重新设置颜色规范,如果在下一个项目的开头(如果没有设置颜色)会导致错误的颜色。
更正的颜色规格:
%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
我阅读 git-log manpage 的方式:
%C(…): color specification, as described in color.branch.* config option; adding
auto,
at the beginning will emit color only when colors are enabled for log output (bycolor.diff
,color.ui
, or--color
, and respecting the auto settings of the former if we are going to a terminal).auto
alone (i.e.%C(auto)
) will turn on auto coloring on the next placeholders until the color is switched again.
那么以下两种格式之一应该是有条件地请求颜色的正确方法(就像您需要在脚本、别名或命名漂亮格式中做的那样) %d
和 %D
:
--pretty='%C(auto)%d'
--pretty='%C(auto,auto)%d'
然而,第一种格式(%C(auto)%d
)似乎不起作用,用这三个命令进行测试——首先,在没有分页器的情况下生成彩色输出;其次,尝试通过管道传输到 cat
来调用自动颜色抑制;最后,显式抑制颜色(注意,您需要检查一个分支 and/or 标记以查看颜色效果,否则 %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
的正确格式顺序是什么?
您的第一种格式在 colourised/non-colourised 输出方面符合预期(至少对于 v2.11.0)。
TL;DR
然而你错过了重新设置颜色规范,如果在下一个项目的开头(如果没有设置颜色)会导致错误的颜色。
更正的颜色规格:
%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