2017-10-21 55 views
2

我试图利用GRB的git帮助程序(https://github.com/garybernhardt/dotfiles/blob/master/.githelpers)打印我的git日志。ZSH中的管道正在从Git日志输出中剥离颜色

来自#62行的git log --graph --pretty="tformat:${LOG_FORMAT}"命令工作正常;在iTerm中用颜色打印。但是,只要将其连接到pretty_git_format,就不会显示任何颜色。

这直到几个星期前一直工作了几年。 zsh中是否有更改,我现在需要配置不同?

我使用iTerm2和zsh版本zsh 5.4.2(x86_64-apple-darwin16.7.0)。

+0

您是否检查您的寻呼机是否离开原始输出(以保留颜色)? 'git config --global core.pager'less -R'':https://unix.stackexchange.com/a/64932/7490 – VonC

+0

不是这样。即使我只是'git log --graph --pretty =“tformat:$ {LOG_FORMAT}”|猫'它打印没有颜色。 –

回答

2

git的默认行为是在输出打印到终端(直接或通过git-spawned pager)时产生颜色。当你的输出到别的地方,比如管道,git关掉颜色。

您可以像这样在命令行上设置color.ui选项alwaysgit -c color.ui=always log --graph --pretty="tformat:${LOG_FORMAT}"(是的,这也正是-c选项进入)。如果你想经常这样做,可以用.gitconfig中的shell别名来完成。

虽然你可以也设置在你的.gitconfig以及,你可能不想。如果你在.gitconfig中设置了这个功能,大多数外部程序假定颜色关闭,你可以打破git的其他部分,以及编辑器集成等工具。

+1

谢谢。这工作。但我想知道为什么现在需要这样做,过去不是这样。 –

+0

@MatthewBoston - 我有这个问题。添加'-c color.ui = always'就像你说的那样工作,但似乎也影响'pretty_git_format'中的列格式。你也找到了吗? – asgeo1

1

今天开始发生在我更新到OSX High Sierra并更新我的自制软件包之后。

我怀疑这是值得做的最新的Git版本(2.15.0),因为这些release notes提改变git log颜色是如何工作的:

Fixes since v2.14 
----------------- 

* "%C(color name)" in the pretty print format always produced ANSI 
    color escape codes, which was an early design mistake. They now 
    honor the configuration (e.g. "color.ui = never") and also tty-ness 
    of the output medium. 

所以我觉得布莱恩的解决方案可能是最好的一个,但我确实注意到它似乎影响了上面注释中提到的pretty_git_format的列格式。