git diff affiche les couleurs de manière incorrecte

46

Afin d’obtenir une sortie colorée de toutes les commandes git, j’ai défini les paramètres suivants:

git config --global color.ui true

Cependant, cela produit une sortie comme celle-ci pour git diff,git log

capture d'écran de git diff

alors que les commandes comme git statusdisplay fine

capture d'écran de statut git

Pourquoi ne reconnaît-il pas les codes de couleur échappés dans certaines des commandes et comment puis-je résoudre ce problème?

J'utilise iTerm 2 (type de terminal xterm-256color) sous OS X 10.8.2 et zsh comme 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)
Gilles, arrête de faire le mal
la source

Réponses:

65

Vous voyez les séquences d'échappement qui indiquent au terminal de changer les couleurs affichées avec le caractère d'échappement représenté par ESC, alors que le comportement souhaité serait que les séquences d'échappement aient l'effet escompté.

Les commandes telles que git diffet git logacheminent leur sortie dans un pager , lesspar défaut. Git tente d' lessautoriser les personnages de contrôle à avoir leur effet de contrôle, mais cela ne fonctionne pas pour vous.

Si lessc'est votre téléavertisseur mais que la variable d'environnement est LESSdéfinie sur une valeur qui n'inclut pas -rou -R, git est incapable de dire lessd'afficher les couleurs. Il passe normalement LESS=-FRSX, mais pas si LESSest déjà défini dans l'environnement. Un correctif consiste à passer explicitement l' -Roption à indiquer lesspour afficher les couleurs lorsque git est appelé:

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

Si ce lessn'est pas votre téléavertisseur, basculez vers lessou trouvez comment faire en sorte que votre téléavertisseur affiche ses couleurs.

Si vous ne voulez pas que git affiche des couleurs lorsqu'il appelle un pageur, définissez-le color.uià la autoplace de true.

Gilles, arrête de faire le mal
la source
Ah merci. Alors que je savais que je lessdevais -Rafficher des couleurs, j’avais oublié cela git loget git diffjeté la sortie sur less. Merci :)
5
Je vous remercie! Je n'avais pas remarqué que le défaut ~/.profiledans FreeBSD avaitPAGER=more; export PAGER
Jeffrey Goldberg
Merci. J'avais LESSchoisi -Kparce que j'aime pouvoir CTRL-Ctout faire. Je pensais que c'était quelque chose de génial avec cette variable, et maintenant je sais comment la réparer.
Trysis
2

En améliorant la réponse de Gilles , vous pouvez conserver vos anciennes $LESSoptions en l’utilisant dans votre configuration git (par exemple, dans ~/.gitconfig):

[core]
pager = less -+$LESS -FRX
quazgar
la source
la réponse de quazgar est bonne. J'ai LESS=-idans mon panier, donc je devrais faire `[noyau] pager = moins $ LESS -FR` j'ai sorti le X, parce qu'avec X, mon contenu de terminal existant est effacé, je préfère que le contenu de terminal reste.
Wayne Walker
1

Vous pouvez également voir cette sortie si vous avez Busybox . Alpine Linux est un bon exemple d’une distribution populaire qui l’utilise. Voir https://wiki.alpinelinux.org/wiki/Alpine_Linux:FAQ#How_to_enable.2Ffix_colors_for_git.3F

Un moyen simple de savoir si vous utilisez actuellement Busybox est d’exécuter:

realpath `which less`

Ou si vous utilisez une coquille de poisson

realpath (which less)

Si le résultat est correct /bin/busybox, vous pouvez résoudre votre problème en installant moins de gnou .

Sur Alpine:

sudo apk --update add less

La commande sera différente selon votre distribution / gestionnaire de paquets.

Christian Rondeau
la source