使用带有彩色格式字符串的git for-each-ref

11

我正在使用 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 配置错误。我尝试用双引号替换单引号,以及转义方括号,但是都没有成功。

有什么建议吗?


根据git for-each-ref文档,您可以在格式字符串中使用%xx,其中xx是十六进制数字,以便由主机语言(在这种情况下为Bash?)进行评估。我一直在尝试它,不确定它是否有效。 - user456814
git branch -vv 不是提供了关于分支的相同信息吗? - Roman
@R0MANARMY /facepalm 谢谢,这正是我想要模拟的 - 应该更仔细地阅读 git 分支手册。 - akhaku
@akhaku 你可能对这个问题也感兴趣: 如何让Git显示哪些分支正在追踪哪些分支? - Roman
1
注意:这即将到来!请查看我的回答 - VonC
相关链接:https://dev59.com/kI7da4cB1Zd3GeqP7wu9 - jub0bs
2个回答

28

Git 1.9/2.0 (2014年第一季度)将为git for-each-ref引入颜色格式。
请参见Ramkumar Ramachandra (artagnon)commit fddb74c

for-each-ref: 引入%(color:...)用于颜色

增强'git for-each-ref'的颜色格式选项。
您现在可以在for-each-ref中使用以下格式:

%(color:green)%(refname:short)%(color:reset)

其中颜色名称在color.branch.*中描述。

从 Git 2.15 开始(2017年第四季度),您可以打开或关闭这些颜色。

请参阅commit 0c88bf5(由Jeff King (peff)于 2017 年 10 月 3 日提交)
(合并于 2017 年 10 月 4 日)

为所有ref-filter用户提供“--color”选项
当ref-filter在11b087a中了解到want_color()(ref-filter:在发出颜色之前请参考want_color(),2017-07-13)后,能够关闭和打开特定命令的颜色变得非常有用。对于git-branch,您可以使用--color/--no-color来实现。
但是对于ref-filter的其他用户git-for-each-ref和git-tag,除了调整“color.ui”配置设置外,您没有其他选择。让我们给这两个命令都加上通常的颜色命令行选项。
这是一个更明显的覆盖配置的方法。它还为“always”更改的行为做好了准备(因此我们仍然有一种在输出转到非终端时强制使用颜色的方法)。

6

我在 for-each-ref 的手册中没有看到任何支持反斜杠转义序列(如 \033)的内容。如果你用一个字面上的转义字符替换 \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)' "

这个也在我的系统上正常工作。

最后一个格式字符串似乎有额外的方括号。我尝试使用'%1B[0;31m%(refname:short)%1B[m %(subject)',它似乎有效。但是在整个别名周围放置双引号似乎是最重要的部分,否则我会得到原始帖子中提到的“坏配置”消息。 - user456814
谢谢 - 我还得删除多余的方括号,但这正好回答了我的问题。就在我以为我终于开始理解git的时候... - akhaku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接