【问题标题】:Color in git-loggit-log 中的颜色
【发布时间】:2011-08-18 21:26:26
【问题描述】:

当您运行 git log --decorate --pretty=oneline 时,输出将包含像 (HEAD, refs/published/master, master) 这样带有颜色的条目。

我的 gitconfig 中还有以下内容:

[color "branch"]
    current = yellow reverse
    local = yellow
    remote = green

在执行如下自定义格式时,如何复制这些颜色?

git log --decorate --stat --graph --pretty=format:"%d %Cgreen%h%Creset (%ar - %Cred%an%Creset), %s%n"

【问题讨论】:

    标签: git git-log


    【解决方案1】:

    从 git 1.8.3(2013 年 5 月 24 日)开始,您可以使用%C(auto)git log 的格式字符串装饰%d

    来自release notes

     * "git log --format" specifier learned %C(auto) token that tells Git
       to use color when interpolating %d (decoration), %h (short commit
       object name), etc. for terminal output.)
    

    【讨论】:

      【解决方案2】:

      git log --decorate 将默认放置:

      • 青色的 HEAD
      • 红色的远程分支
      • 绿色标签

      并且可以通过color.decorate配置进行更改。

      但是git log --format 不提供专门显示HEAD or 远程or 分支的方法:所有三个都通过%d 显示,与一种颜色。


      2013 年 5 月更新,mentioned below Elad Shahar (upvoted),git 1.8.3 提供了另一种选择:

      Atlassian blog post 表示此功能是其他几个专注于格式(git rebasegit count-objects)和颜色(git branch -vv)的功能的一部分

      这是对前面auto,reset of 1.8.2 的补充,当输出不用于终端1 时会自动禁用颜色

      %C(auto,blue)Hello%C(auto,reset)
      

      注意:git 2.4+(2015 年第二季度)会更好地重置分支名称周围的颜色。
      commit 5ee8758Junio C Hamano (gitster)

      log --decorate:不要将“提交”颜色泄漏到下一项中

      在“git log --decorate”中,您会看到如下提交标头:

      commit ... (HEAD, jc/decorate-leaky-separator-color)
      

      其中“commit ... (”在color.diff.commit中绘制,“HEAD”在color.decorate.head中,“,”在color.diff.commit中,分支名称在 color.decorate.branch,然后在 color.diff.commit 中关闭“)”。

      如果您想将 HEAD 和本地分支名称绘制为与正文文本相同的颜色(可能是因为青色和绿色在黑白终端上太暗而无法阅读),您不会想要说

      [color "decorate"]
          head = black
          branch = black
      

      因为您将无法在黑白终端上重复使用相同的配置。你会天真地期待

      [color "decorate"]
          head = normal
      branch = normal
      

      工作,但不幸的是它没有。
      它以与装饰元素之间的左括号或逗号相同的颜色绘制字符串“HEAD”和分支名称。
      这是因为代码在以自己的颜色打印“前缀”后忘记重置颜色。


      请注意,git 2.5(2015 年第二季度)修复了一个错误:

      参见commit 429ad20Junio C Hamano (gitster),2015 年 5 月 13 日。
      (由 Junio C Hamano -- gitster -- 合并,commit fd70780,2015 年 5 月 22 日)

      log: 不要过早地缩短装饰名称

      Git 2.4 中的“log --decorate”增强功能显示了当前分支顶端的提交,例如“HEAD -> master”,不适用于 --decorate=full。


      Git 2.9.x+(2016 年第三季度)将修复另一个错误和honor color=auto for %C(auto)


      Git 2.10.2(2016 年 10 月)通过 commit 82b83da(2016 年 9 月 29 日)和 commit c99ad27(2016 年 9 月 17 日)通过 René Scharfe (``) 修复了其他错误。
      (由 @987654336 合并@in commit 76796d4,2016 年 10 月 28 日)

      pretty:如果输出为空,请避免为 %C(auto) 添加重置

      我们发出一个转义序列来重置%C(auto) 的颜色和属性,以确保自动着色按预期显示。
      如果输出 strbuf 为空,即当@ 987654379@ 出现在格式字符串的开头,因为这样就不需要重置,我们在输出中保存了几个字节。

      pretty:让%C(auto)重置所有属性

      %C(auto) 上重置颜色和属性以启用全自动 控制它们; 否则像粗体或反转这样的属性可以 从以前的%C 占位符仍然有效

      【讨论】:

      • 有没有办法使用--decorate和--pretty="...stuff"?
      • @NorthlsUp:--decorate 似乎有自己的实现和配置,而--pretty 通过%d 提供相同的信息作为一个块,这意味着您不能拥有相同的细粒度级别--pretty 的颜色配置比 --decorate 的颜色配置。
      • 我在“git log”之后添加“--decorate”时看到的唯一区别是repos以“refs/heads/...”或“refs/remotes...”开头.颜色以任何一种方式显示。知道什么会导致这种情况吗?我问的原因是我的 .gitconfig 没有显示任何颜色属性。我想知道在哪里可以找到我的“color.decorate”属性。我在 .gitconfig 文件中没有看到它。
      • @JWoodchuck 试试git config --show-origin -l:你会看到所有你的配置。然后你可以用 grep 搜索“颜色”。
      • 是的,当我用 grep 搜索颜色时什么都没有显示,这使得设置显示的位置如此神秘。
      【解决方案3】:

      用括号括起来:

      %C(...): color specification, as described in color.branch.* config option

      所以%C(yellow reverse) 可以工作。

      【讨论】:

      • 不完全是,%d 是所有分支,所以它可能看起来像(HEAD, master),在这种情况下,头部应该是蓝色,主应该是绿色(我相信这些是默认颜色)。其中%C(yellow)%d%Creset 将使其颜色相同。
      • 哦,给各个装饰品上色。我认为这是不可能的。渲染日志条目的代码基本上实现了两次。
      • 太糟糕了,这是不可能的......我很想做git log --decorate --oneline --date=...
      【解决方案4】:

      配置选项log.decorate 可以启用/禁用日志中的默认装饰。

      git config --global log.decorate full
      

      完成后,您可以使用color.decorate.* 来玩颜色

      【讨论】:

      • log.decorate=full 导致打印引用名称及其前缀(refs/heads/ 等);我发现log.decorate=short 更有用。
      • 非常有用的设置,虽然我也更喜欢short而不是full
      【解决方案5】:

      有些人可能想使用这个:%C(colorname) 这不需要更改颜色配置。

      示例:将作者姓名涂成黄色

      --pretty=format:"%C(yellow)%an%Creset"
      

      常规 ANSI 颜色应该可以工作 https://en.wikipedia.org/wiki/ANSI_escape_code

      • 黑色
      • 红色
      • 绿色
      • 黄色
      • 蓝色
      • 洋红色
      • 青色
      • 白色

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-05
        • 1970-01-01
        • 1970-01-01
        • 2018-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多