git diff 显示颜色不正确

git diff 显示颜色不正确

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

git config --global color.ui true

然而,这会产生这样的输出git diffgit log

git diff 截图

而像显示这样的命令则git status很好

git 状态截图

为什么它仅无法识别某些命令中的转义颜色代码以及如何修复它?

xterm-256color在 OS X 10.8.2 上使用 iTerm 2(终端类型),并使用 zsh 作为 shell

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

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

答案1

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

诸如git diff和 之类的命令git log将其输出传输到寻呼机,less默认情况下。 Git 尝试告知less允许控制字符发挥其控制效果,但这对您不起作用。

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

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

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

如果您不希望 git 在调用寻呼机时显示颜色,请设置color.uiauto而不是true

答案2

如果您有,您还可以看到此输出忙碌盒阿尔卑斯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

阿尔卑斯山上:

sudo apk --update add less

该命令将根据您的发行版/包管理器而有所不同。

答案3

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

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

相关内容