web-dev-qa-db-ja.com

git diffが色を正しく表示しない

すべてのgitコマンドから色付きの出力を取得するために、次のように設定します。

git config --global color.ui true

ただし、これにより、このようなgit diffgit logの出力が生成されます。

git diff screenshot

git statusなどのコマンドは正常に表示されます

git status screenshot

一部のコマンドだけでエスケープされたカラーコードが認識されないのはなぜですか?どのように修正できますか?

シェルとしてOS X 10.8.2およびzshでiTerm 2(ターミナルタイプxterm-256color)を使用しています

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

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

ESCとして表示されるエスケープ文字で表示される色を変更するように端末に指示するエスケープシーケンスが表示されていますが、望ましい動作はエスケープシーケンスが意図した効果を持つことです。

git diffgit logなどのコマンドは、デフォルトで pagerless に出力をパイプします。 Gitはlessに制御文字に制御効果を持たせるように指示しようとしますが、これは機能しません。

lessがポケットベルであるが、環境変数LESS-rまたは-Rを含まない値に設定されている場合、gitはlessは色を表示します。通常、LESS=-FRSXを渡しますが、LESSが環境にすでに設定されている場合は渡しません。修正は、-Rオプションを明示的に渡して、gitによって呼び出されたときにlessに色を表示するように指示することです。

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

lessがポケットベルではない場合は、lessに切り替えるか、ポケットベルで色を表示する方法を理解してください。

ポケットベルを呼び出すときにgitに色を表示させたくない場合は、autoではなくcolor.uitrueに設定します。

Gillesの改善 answer 、古い$LESSオプションをgit構成で使用する(例:~/.gitconfig):

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

Busybox がある場合にも、この出力が表示されます。 Alpine Linux は、それを使用する人気の高いディストリビューションの良い例です。 https://wiki.alpinelinux.org/wiki/Alpine_Linux:FAQ#How_to_enable.2Ffix_colors_for_git.3F を参照してください

現在Busyboxを使用しているかどうかを確認する簡単な方法は、次のコマンドを実行することです。

realpath `which less`

または fish Shell を使用する場合

realpath (which less)

出力が/bin/busybox、次に gnu less をインストールすることで問題を解決できます。

アルパイン:

Sudo apk --update add less

コマンドは、ディストリビューション/パッケージマネージャーによって異なります。

2