我使用git for-each-ref
作为git别名来显示分支名称和该分支上最后一次提交的主题。也就是说,很难分辨出分支名称的结束位置以及提交消息主题的开始,所以我试图将分支名称着色,以便更容易地分辨出两者之间的区别。下面是没有颜色的工作别名:
[alias]
logbranch = for-each-ref --sort=-committerdate refs/heads/ --format='%(refname:short) %(subject)'
为了添加颜色,我尝试使用shell颜色转义(我正在使用bash),如下所示:
[alias]
logbranch = for-each-ref --sort=-committerdate refs/heads/ --format='[\033[0;31m]%(refname:short)[\e[m] %(subject)'
这给了我一个git配置错误。我也尝试用双引号替换单引号,并转出方括号,但没有骰子。
想法?
答案 0 :(得分:21)
Git 1.9 / 2.0(2014年第一季度)将为git for-each-ref
引入颜色格式
请参阅commit fddb74c中的Ramkumar Ramachandra (artagnon):
for-each-ref
:介绍%(color:...)
颜色使用颜色格式选项增强“
git for-each-ref
” 您现在可以在for-each-ref中使用以下格式:
%(color:green)%(refname:short)%(color:reset)
其中颜色名称在
color.branch.*
中描述。
使用Git 2.15(2017年第4季度),您可以打开或关闭这些颜色。
commit 0c88bf5见Jeff King (peff
)(2017年10月3日)
(2017年10月4日合并)
为所有ref-filter用户提供
--color
选项在11b087a中了解了关于want_color()的ref-filter (
ref-filter
:在发出颜色之前咨询want_color(), 2017-07-13),能够关闭颜色变得有用 并为特定命令。对于git-branch
,您可以这样做 使用--color
/--no-color
。但对于
git-for-each-ref
和git-tag
,其他用户 ref-filter,除了调整“color.ui
”配置设置外别无选择。让我们给这两个命令提供常用的颜色命令行选项。作为覆盖配置的方法,这一点更为明显。它还使我们为“
always
”的行为做好准备(这样当我们的输出转到非终端时,我们仍然会有一种强制颜色的方式)。
答案 1 :(得分:5)
我在for-each-ref
手册页中没有看到任何暗示它支持像\033
这样的反斜杠转义序列的内容。如果您使用 literal 转义字符替换\033
(和\e
),它似乎工作正常。
Cupcake说for-each-ref
还支持%xx
十六进制转义序列,如下所示:
[alias]
logbranch = "for-each-ref --sort=-committerdate refs/heads/ --format='[%1B[0;31m]%(refname:short)[%1B[m] %(subject)' "
这在我的系统上也可以正常工作。