git diff显示颜色错误


46

为了从所有git命令获得彩色输出,我设置了以下内容:

git config --global color.ui true

然而,这产生了这样的一个输出git diffgit log

git diff屏幕截图

而类似的命令git status显示很好

git状态截图

为什么仅在某些命令中不能识别转义的颜色代码,我该如何解决?

xterm-256color在OS X 10.8.2和zsh上使用iTerm 2(终端类型)作为外壳

zsh --version
zsh 5.0.0 (x86_64-apple-darwin12.0.0)

git --version                                                                                                                      
git version 1.7.9.6 (Apple Git-31.1)

Answers:


65

您会看到转义序列告诉终端更改转义字符显示为的显示颜色ESC,而所需的行为将是转义序列具有预期的效果。

默认情况下,诸如git diff和将git log它们的输出通过管道传递寻呼机的命令less。Git试图告诉less允许控制字符发挥控制作用,但这对您不起作用。

如果less是分页器,但您将环境变量LESS设置为不包含-r或的值,则-Rgit无法告诉less您显示颜色。它通常会通过LESS=-FRSX,但是如果LESS已经在环境中设置则不会。解决方法是显式传递git调用时显示颜色的-R选项less

git config --global core.pager 'less -R'

如果less不是您的寻呼机,请切换至less或弄清楚如何使您的寻呼机显示颜色。

如果您不希望git在调用分页器时显示颜色,请将设置color.uiauto而不是true


嗯谢谢 虽然我知道less需要-R显示颜色,但是我忘记了,git log并将git diff输出通过管道传输到less。谢谢:)

5
谢谢!我没有注意到~/.profileFreeBSD 中的默认设置PAGER=more; export PAGER
Jeffrey Goldberg

谢谢。我之所以LESS开始,-K是因为我喜欢CTRL-C所有事情。我认为该变量有点时髦,现在我知道如何解决它。
trysis'Apr

2

改善Gilles的答案,您可以$LESS通过在git config中使用它来保留旧选项(例如~/.gitconfig):

[core]
pager = less -+$LESS -FRX

夸兹加尔的答案是好的。我LESS=-i在我的bashrc中,所以我必须做`[core] pager = less $ LESS -FR`我拿出X,因为使用X,我现有的终端内容将被删除,我希望保留终端内容。
韦恩·沃克

1

如果您有Busybox,也可以看到此输出。Alpine Linux是使用它的流行发行版的一个很好的例子。参见https://wiki.alpinelinux.org/wiki/Alpine_Linux:FAQ#How_to_enable.2Ffix_colors_for_git.3F

知道您当前是否使用Busybox的一种简单方法是运行:

realpath `which less`

或者如果您使用鱼壳

realpath (which less)

如果输出是/bin/busybox,则可以通过安装gnu less解决您的问题。

在高山上:

sudo apk --update add less

该命令将有所不同,具体取决于您的发行版/软件包管理器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.