git中的ANSI颜色显示不正确

最近,我切换到SLES 11.我发现git命令的问题。 所有ANSI颜色都不能被渲染。 相反,它显示了这样的ANSI代码:

* ESC [33m * commit 0a02124a0fd85c1f0094bcdf15bac1645e3c8630ESC [m

注意:“ls”中的ansi颜色效果很好。

尝试设置你的LESS环境variables来包含-R选项:

 LESS=-R git grep ... 

如果这样做,请将export LESS=-R添加到~/.bashrc~/.profile或类似的shell启动文件中。

  -R or --RAW-CONTROL-CHARS Like -r, but only ANSI "color" escape sequences are output in "raw" form. Unlike -r, the screen appearance is maintained correctly in most cases. ANSI "color" escape sequences are sequences of the form: ESC [ ... m where the "..." is zero or more color specification characters 

正如其他人所指出的,问题是你的terminal是好的,但是当Git调用这个寻呼机时,它不能正确地解释ANSI颜色代码。

我会开始在你的环境中设置LESS , 这听起来像你以前可能已经把它设置为模糊Git需要的东西。 如果解决了这个问题,那你就是。 如果你真的需要自定义LESS ,注意Git默认使用FRSX ,所以如果你不需要更改的话,请小心。

如果你为什么要在你的环境中想要LESS而不是你想要的Git,处理Git和寻呼机的理想方式是通过core.pagerconfigurationvariables。 引用manpage:

git将用来分页输出的命令。 可以用GIT_PAGER环境variables覆盖。 请注意,如果git在运行寻呼机时未设置,则git会将LESS环境variables设置为FRSX。 可以通过将LESSvariables设置为其他值来更改这些设置。 或者,可以通过设置core.pager选项在项目或全局基础上覆盖这些设置。 设置core.pager对上面的LESS环境variables行为没有影响,所以如果你想以这种方式覆盖git的默认设置,你需要明确。 例如,要以向后兼容的方式禁用S选项,请将core.pager设置为less -+$LESS -FRX 。 这将通过git传递给shell,这将最终的命令转换为LESS=FRSX less -+FRSX -FRX

结合一些你想要的选项的知识,应该把你带到你想要的地方。 (花式向后兼容的方法通过禁用当前所有的LESS选项,然后添加你想要的。

在git中,你可以改变你的寻呼机使用-R选项:

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

对我来说,这不起作用:

git config --global core.pager less -R

所以相反,我附加到我的〜/ .gitconfig文件

  [core] pager = less -R 

为了testing它,我做了

git log --graph --pretty=format:"%C(yellow)%h%Creset%C(blue)%d%Creset %C(white bold)%s%Creset %C(white dim)(by %an %ar)%Creset" --all

好,我知道了。 这个问题是关于variablesLESS的。

以下行解决这个问题:

 export LESS="-erX" 

我有同样的问题。 但为什么我需要在一台机器上configuration一个git,而不需要另一台? 我想解决问题的根源,因为

git config –global core.pager“less -R”

看起来像我的解决方法。

在Laravel Artisan和Symfony控制台的Git for Windows v2.7.1中,我遇到了与ANSI颜色转义序列类似的问题。 这里提到的LESS解决scheme没有解决问题。

由于Git for Windows用bash --login -i打开terminal,terminal启动后input的这一行对我来说是bash --login -i

 bash