git-log中的颜色

Nor*_*sUp 102 git git-log

当您运行git log --decorate --pretty=oneline输出时,将具有(HEAD, refs/published/master, master)与着色一样的条目.

我的gitconfig中也有以下内容:

[color "branch"]
    current = yellow reverse
    local = yellow
    remote = green
Run Code Online (Sandbox Code Playgroud)

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

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

小智 83

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

发行说明:

 * "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.)
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 58

git log --decorate会默认地说:

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

并可以通过color.decorate配置更改 .

但是git log --format没有提供专门显示HEAD 遥控器分支的方式:所有三个都通过显示%d,一种颜色可能.


更新2013年5月,为下文提到埃拉德·沙哈尔(upvoted),git的1.8.3提供多一个选择:

git log –format现在运行一个%C(auto)令牌,告诉Git在解析%d(装饰),%h(短提交对象名称)等时使用颜色进行终端输出.

这篇Atlassian博客文章评论说,这个功能是其他几个专注于格式(git rebase,git count-objects)和颜色(git branch -vv)的功能的一部分

这是auto,reset1.8.2之前补充,当输出不用于终端1时,它会自动禁用颜色

%C(auto,blue)Hello%C(auto,reset)
Run Code Online (Sandbox Code Playgroud)

注意:git 2.4 +(2015年第2季度)可以更好地重置分支名称周围的颜色.
提交5ee8758通过JUNIOÇ滨野(gitster):

log --decorate:不要将"提交"颜色泄漏到下一个项目中

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

commit ... (HEAD, jc/decorate-leaky-separator-color)
Run Code Online (Sandbox Code Playgroud)

其中" commit ... ("被画入color.diff.commit," HEAD"in color.decorate.head," ,"in color.diff.commit,分支名称中 color.decorate.branch,然后关闭" )" color.diff.commit.

如果你想用与正文文本相同的颜色绘制HEAD和本地分支名称(可能因为青色和绿色在黑白终端上太微弱而无法读取),你不想说

[color "decorate"]
    head = black
    branch = black
Run Code Online (Sandbox Code Playgroud)

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

[color "decorate"]
    head = normal
branch = normal
Run Code Online (Sandbox Code Playgroud)

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


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

看看提交429ad20通过JUNIOÇ滨野(gitster),2015年5月13日
(通过合并JUNIOÇ滨野- gitster-提交fd70780 2015,5月22日)

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

log --decorateGit 2.4中的" "增强功能显示当前分支的提示,例如" HEAD -> master",但是--decorate = full不起作用.


Git的2.9.x +(Q3 2016)将解决另一个bug和荣誉color=auto%C(auto)


Git 2.10.2(2016年10月)使用提交82b83da(2016年9月29 日)修复了其他错误,并通过RenéScharfe(``)提交了c99ad27(2016年9月17日).
(由Junio C gitsterHamano合并- -提交76796d4,2016年10月28日)

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

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

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

复位颜色和属性%C(auto),以使他们在全自动控制; 否则,以前的%C占位符仍然可以生成粗体或反向等属性.

  • @NorthlsUp:`--decorate`似乎有自己的实现和配置,而`--pretty`通过`%d`提供相同的信息作为一个块,这意味着你不能拥有相同的细粒度颜色配置级别`--pretty`比用`--decorate`. (8认同)
  • 有没有办法使用--decorate和--pretty ="...... stuff"? (3认同)

Jos*_*Lee 9

将它们括起来:

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

%C(yellow reverse)会工作.

  • 哦,着色个别装饰品.我认为这是不可能的.呈现日志条目的代码基本上实现了两次. (2认同)

Hen*_*son 8

config选项log.decorate可以在日志中启用/禁用默认装饰.

git config --global log.decorate full
Run Code Online (Sandbox Code Playgroud)

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

  • `log.decorate = full`导致引用名称的前缀(`refs/heads /`等); 我发现`log.decorate = short`更有用. (3认同)

Nul*_*ard 5

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

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

--pretty=format:"%C(yellow)%an%Creset"
Run Code Online (Sandbox Code Playgroud)

常规的 ANSI 颜色应该可以使用https://en.wikipedia.org/wiki/ANSI_escape_code

  • 黑色的
  • 红色的
  • 绿色
  • 黄色
  • 蓝色
  • 品红
  • 青色
  • 白色的