git diffが間違った色を表示する

git diffが間違った色を表示する

すべてのgitコマンドからカラー出力を取得するには、次のように設定しました。

git config --global color.ui true

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

子比較スクリーンショット

そしてshowのようなコマンドがgit status良いでしょう

子ステータススクリーンショット

特定のコマンドでエスケープされたカラーコードだけが認識されない理由と回避策は何ですか?

私はxterm-256colorOS X 10.8.2でiTerm 2(ターミナルタイプ)を使用しており、シェルではzshを使用しています。

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環境変数を-rorを含まない値に設定した場合、gitは色を表示するように言うことは-Rできません。less通常は通過しますLESS=-FRSXが、LESS環境に設定されている場合は通過しません。回避策は、呼び出し時に色を表示するようにgitに指示する-Rオプションを明示的に渡すことです。less

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

lessポケットベルでない場合は、ポケットベルに切り替えるか、lessポケットベル表示色を作成する方法を学びます。

ポケットベルを呼び出すときにGitが色を表示しないようにするには、代わりcolor.uiに設定します。autotrue

答え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して問題を解決できます。少ない

アルプスから:

sudo apk --update add less

コマンドは、デプロイ/パッケージ管理者によって異なります。

答え3

改善されたザイルズ回答、git configで使用して、以前の$LESSオプション(git configなど)を維持できます~/.gitconfig

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

関連情報