【问题标题】:Git pretty format colorsGit 漂亮的格式颜色
【发布时间】:2013-03-05 16:36:57
【问题描述】:

我正在尝试为 Git 设置漂亮的格式颜色。据我所知,1.6.0 版只能识别红色、绿色和蓝色。

$ git log --pretty=format:"%Credred%Creset %Cgreengreen%Creset %Cyellowyellow%Creset %Cblueblue%Creset %Cmagentamagenta%Creset %Ccyancyan%Creset %Cwhitewhite%Creset"
red green %Cyellowyellow%Creset blue %Cmagentamagenta %Ccyancyan %Cwhitewhite

此外,所有颜色均不适用于带括号的颜色格式。

有没有办法列出 Git 可用的漂亮格式颜色?

不幸的是,这是在旧的 SCO OpenServer 5.0.7 机器上,SCO Skunkworks 发布的最后一个 Git 版本是 1.6.0.3。

【问题讨论】:

  • 如果你的平台已经过时,为什么不从 git-scm.com 下载最新的 git 1.8.x 并自己编译呢?然后它将支持所有最新的功能。
  • @mvp 好吧,正如您所说,该平台已经过时 - 意味着缺少 GNU 构建环境。我正在准备迁移到 Linux 的现有应用程序源代码。
  • 请注意,Git 2.3.0(2015 年 2 月)将允许 24 位颜色值,以及更好地管理颜色属性(粗体、下划线等)。见my answer below
  • Git 2.26(2020 年第一季度)将添加属性“bright”以支持明亮的 aixterm 颜色。见my edited answer below

标签: git


【解决方案1】:

我没有旧版本的git 来验证是否支持redbluegreen 以外的颜色。

虽然,即使使用最新版本的git(比如我使用的 1.7.10),我注意到的一件事是 redgreenblue 以外的颜色需要在括号内 () .对于redgreenblue,括号是可选的。

所以试试这个:

git log --pretty=format:"%Credred%Creset %Cgreengreen%Creset %C(Yellow)yellow%Creset %Cblueblue%Creset %C(magenta)magenta%Creset %C(cyan)cyan%Creset %C(white)white%Creset"

我知道的list of colors至少是:

normal
black
red
green
yellow
blue
magenta
cyan
white

它可以与以下属性之一结合使用:

bold
dim
ul
blink
reverse
italic
strike
bright  # (Git 2.26, Q1 2020, example: brightred)

如果您尝试使用.gitconfig 更改颜色,您应该能够指定两种颜色 - foregroundbackground,您可以将其与属性结合使用。

【讨论】:

  • 我相信你是对的,因为只支持原色。带括号的颜色格式在这个版本(1.6.0.3)中根本不起作用。
  • 用空格分隔前景、背景和属性,如 %C(红绿粗体)
  • 至少还有两个其他属性:italicstrike,正如这里git-scm.com/docs/git-config 的手册中所写,出于完整性原因。
  • @onemorequestion 没问题。我已经相应地编辑了答案。顺便说一句,我真的很喜欢你的另一个答案 (stackoverflow.com/a/61487052/6309)。
【解决方案2】:

分享我的 git 日志格式:

$ git log --graph --pretty=format:'%C(magenta)%h%Creset -%C(red)%d%Creset %s %C(dim green)(%cr) %C(cyan)<%an>%Creset' --abbrev-commit

你也可以在~/.gitconfig中添加别名:

[alias]
    logs  = log --graph --pretty=format:'%C(magenta)%h%Creset -%C(red)%d%Creset %s %C(dim green)(%cr) %C(cyan)<%an>%Creset' --abbrev-commit

然后您可以使用您在~/.gitconfig 中定义的别名。

$ git logs

【讨论】:

  • 问题是问如何找出git的漂亮格式颜色。
【解决方案3】:

Git 2.3.0(2015 年 2 月)将允许(感谢 Jeff Kink (peff)):


parse_color:支持 24 位 RGB 值

某些终端(如 XTerm)允许使用常规 ANSI 颜色方案的扩展来实现完整的 24 位 RGB 颜色规范。
让我们允许用户指定十六进制 RGB 颜色,启用最重要的粉红色参考装饰功能

git log --format="%h%C(#ff69b4)%d%C(reset) %s"

  • 更好地管理颜色属性:

parse_color:识别“no$foo”清除$foo属性

您可以通过在颜色规范中添加“reverse”来启用“reverse”等 ANSI 文本属性。但是,您不能要求关闭倒车功能。

对于常见情况,这无关紧要。您可以在彩色部分的开头打开“反转”,然后使用“重置”清除所有属性。

但是,您可能希望打开某些属性,然后选择性地禁用其他属性。例如:

git log --format="%C(bold ul yellow)%h%C(noul) %s"

仅对哈希进行下划线,但无需重新指定其余属性。

这也可以帮助第三方程序,例如 contrib/diff-highlight,它们希望在不破坏现有颜色的情况下打开/关闭某些属性。

请注意,某些属性规范可能是无意义的(例如,“bold nobold”)。我们不费心去标记这样的结构,而是让终端对其进行分类。


在 Git 2.26(2020 年第一季度)中,基本的 7 种颜色学习了更亮的对应颜色(例如“brightred”)

commit c444f03commit 1751b09commit 4a28eb0(2020 年 1 月 21 日)Eyal Soha (``)
(由Junio C Hamano -- gitster -- 合并,commit 87f17d7,2020 年 2 月 25 日)

color.c: 支持明亮的 aixterm 颜色

签字人:Eyal Soha

这些颜色是 3 位颜色的明亮变体。

它们分别位于 90-97 和 100-107 范围内,而不是前景的 30-37 范围和背景的 40-47 范围。

git config documentation 现在包括:

接受的基本颜色为normalblackredgreenyellowbluemagentacyanwhite
给出的第一个颜色是前景;第二个是背景。

normal 之外的所有基本颜色都有一个明亮的变体,可以通过在颜色前面加上bright 来指定,例如brightred


在 Git 2.35(2022 年第一季度)中,“default”和“reset”颜色已添加到我们的调色板中。

参见commit de65851(2021 年 10 月 26 日)和 commit 05f1f41commit aeefc18(2021 年 10 月 25 日)Robert Estelle (rwe)
(由 Junio C Hamano -- gitster -- 合并于 commit 15209c8,12 月 15 日2021)

color: 允许颜色以“reset”为前缀

签字人:罗伯特·埃斯特尔

“reset”以前被视为代表\e[m的独立特殊颜色名称。
现在,它可以应用于其他颜色属性,无需隐式属性继承即可实现精确规范。

例如,“重置绿色”现在呈现 \e[;32m,这被解释为“重置所有内容;然后将前景设置为绿色”。
这意味着背景和其他属性也将重置为默认值。

以前,这是不可能用单一颜色来表示的:“reset”可以单独指定,也可以是带有属性的颜色,但是像清除背景颜色这样的事情是不可能的。

有一个单独的更改引入了“默认”颜色名称来帮助实现这一点,但即便如此,上述内容也只能通过显式禁用每个属性来表示: 绿色 默认 no-bold no-dim no-italic no-ul no-blink no-reverse no-strike

config 现在包含在其man page 中:

伪属性reset重置之前的所有颜色和属性 应用指定的颜色。例如,reset green 将导致 在没有任何活动的绿色前景和默认背景中 属性。

【讨论】:

  • 另见stackoverflow.com/a/12798205/6309:git 2.9.1 支持两个新属性:italic 和strike。
  • 你知道如何在 git 别名中包含 RGB 颜色吗? #ff69b4 在命令行上工作,但不能在别名中工作,因为# 开始注释
  • @TimMalone 我还没有测试它,但配置手册页显示“名称 = 后的前导空格,第一个注释字符 #; 之后的行的其余部分, 并且行尾的空格被丢弃除非它们用双引号括起来。"
  • @TimMalone 将整个别名放在"-quotes 中,然后# 就不会特别了。
  • @VonC,当我将那些 git log 命令输出通过管道传输到文本或剪辑时,我得到了奇怪的字符。当颜色和属性与--format 一起使用时,似乎会发生这种情况。知道为什么或解决这个问题吗?
【解决方案4】:

我使用的是 Ubuntu 18.04,我可以使用韩晓飞的建议。

对于尝试完成此操作的初学者,我通过编辑 .gitconfig 获得了最好的运气。

nano ~/.gitconfig

在现有文本下方粘贴 [alias] 块

CTRL + O(写出)+ CTRL + X(关闭nano)

完成此操作后,要查看可以使用的漂亮颜色

git logs

使用

'git log' 会让你看到没有颜色的视图,

'git logs --oneline' 也一样,除了一个会在侧面显示繁茂

谢谢,希望对大家有帮助

【讨论】:

    【解决方案5】:

    这是我在了解使用自定义十六进制颜色值的语法后编写的两个别名,如@VonC 的答案所示。

    有四个版本,唯一的区别是 --graph 指令,'f' 版本还会显示添加、删除或修改的文件:

    [alias]
        lg = log --graph --pretty=format:"%C(#cd9a00)%h\\%C(#0080ff)\\ <%an>\\ %C(#17b062)(%cr)\\ %d\\%C(#c0d6de)%s"    
        l1 = log --pretty=format:"%C(#cd9a00)%h\\%C(#0080ff)\\ <%an>\\ %C(#17b062)(%cr)\\ %d\\%C(#c0d6de)%s"    
        lgf = log --name-status --graph --pretty=format:"%C(#cd9a00)%h\\%C(#0080ff)\\ <%an>\\ %C(#17b062)(%cr)\\ %d\\%C(#c0d6de)%s" 
        l1f = log --name-status --pretty=format:"%C(#cd9a00)%h\\%C(#0080ff)\\ <%an>\\ %C(#17b062)(%cr)\\ %d\\%C(#c0d6de)%s"
    

    我使用这个网站来选择我想要的确切颜色,然后从中复制十六进制值:

    https://www.colorhexa.com/

    对于 Windows,打开位于“C:\Users\YourUserName”文件夹中的 .gitconfig 文件并添加一个别名部分,如上所示。

    希望你喜欢它们。

    【讨论】:

      猜你喜欢
      • 2017-06-30
      • 2019-07-16
      • 1970-01-01
      • 2021-03-30
      • 1970-01-01
      • 2019-04-02
      • 2021-02-28
      • 2018-10-23
      • 2011-05-06
      相关资源
      最近更新 更多