【问题标题】:git for-each-ref with a coloured format string带有彩色格式字符串的 git for-each-ref
【发布时间】:2013-08-06 20:59:50
【问题描述】:

我使用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 config 错误。我还尝试用双引号替换单引号,并转义方括号,但没有骰子。

想法?

【问题讨论】:

  • 根据docs for git for-each-ref,您可以使用%xx,其中xx是一个十六进制数字,在格式字符串中,以便它由宿主语言评估(在这种情况下是Bash? )。我一直在尝试,不知道它是否有效。
  • git branch -vv 给你的分支机构信息不一样吗?
  • @R0MANARMY /facepalm 谢谢,这正是我试图模仿的——应该更仔细地阅读 git 分支手册页。
  • @akhaku 你可能也对这个问题感兴趣:how do I get git to show me which branches are tracking what?
  • 注意:这个来了!见my answer below

标签: git


【解决方案1】:

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 年第四季度),您将能够打开或关闭这些颜色。

Jeff King (peff)commit 0c88bf5(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.

但对于git-for-each-refgit-tag,其他用户 ref-filter,除了调整“color.ui”配置设置之外,您别无选择。让我们为这两个命令提供常用的颜色命令行选项。

这是一种更明显的覆盖配置的方法。它还让我们为“always”变化的行为做好了准备(这样当我们的输出转到非终端时,我们仍然可以使用强制颜色)。

【讨论】:

    【解决方案2】:

    我在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)' "
    

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

    【讨论】:

    • 最后一个格式字符串似乎有多余的方括号。我尝试了'%1B[0;31m%(refname:short)%1B[m %(subject)',这似乎有效。但是在整个别名周围加上双引号似乎是最重要的部分,否则我会得到原始发布者得到的“错误配置”消息。
    • 谢谢 - 我也必须删除多余的方括号,但这完全回答了我的问题。就在我以为我终于开始 grok git...
    猜你喜欢
    • 2015-08-09
    • 1970-01-01
    • 2019-10-31
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多