git diff visualizza i colori in modo errato


46

Per ottenere un output colorato da tutti i comandi git, ho impostato quanto segue:

git config --global color.ui true

Tuttavia, questo produce un output come questo per git diff,git log

screenshot di git diff

mentre comandi come git statusdisplay fine

screenshot di stato git

Perché non riconosce i codici colore sfuggiti solo in alcuni dei comandi e come posso ripararlo?

Sto usando iTerm 2 (tipo terminale xterm-256color) su OS X 10.8.2 e zsh come 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)

Risposte:


65

Stai vedendo le sequenze di escape che indicano al terminale di cambiare i colori visualizzati con il carattere di escape mostrato come ESC, mentre il comportamento desiderato sarebbe che le sequenze di escape abbiano l'effetto desiderato.

Comandi come git diffe git logpipe il loro output in un cercapersone , lessper impostazione predefinita. Git cerca di dire lessper consentire ai personaggi di controllo di avere il loro effetto di controllo, ma questo non funziona per te.

Se lessè il tuo cercapersone ma hai la variabile d'ambiente LESSimpostata su un valore che non include -ro -R, git non è in grado di dire lessdi visualizzare i colori. Di solito passa LESS=-FRSX, ma non se LESSè già impostato nell'ambiente. Una correzione è passare esplicitamente l' -Ropzione per dire lessdi visualizzare i colori quando invocati da git:

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

Se lessnon è il tuo cercapersone, passa a lesso scopri come rendere i colori del tuo cercapersone.

Se non si desidera git a colori del display quando è invocando un cercapersone, insieme color.uial autoposto di true.


Ah grazie. Mentre sapevo che era lessnecessario -Rvisualizzare i colori, l'ho dimenticato git loge ho git diffinviato l'output less. Grazie :)

5
Grazie! Non avevo notato che il default ~/.profilein FreeBSD eraPAGER=more; export PAGER
Jeffrey Goldberg

Grazie. Avevo LESSimpostato -Kperché mi piace essere in grado di CTRL-Ctutto. Ho pensato che fosse qualcosa di strano con quella variabile, e ora so come risolverlo.
trysis,

2

Migliorando la risposta di Gilles , puoi mantenere le tue vecchie $LESSopzioni usando questa nella tua configurazione git (ad esempio in ~/.gitconfig):

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

la risposta di Quazgar è buona. Ho LESS=-inel mio bashrc, quindi dovrei fare `[core] pager = less $ LESS -FR` Ho eliminato la X, perché con X, il mio contenuto terminale esistente viene cancellato, preferisco che il contenuto del terminale rimanga.
Wayne Walker,

1

Potresti anche vedere questo output se hai Busybox . Alpine Linux è un buon esempio di una distribuzione popolare che lo utilizza. Vedi https://wiki.alpinelinux.org/wiki/Alpine_Linux:FAQ#How_to_enable.2Ffix_colors_for_git.3F

Un modo semplice per sapere se attualmente usi Busybox è eseguire:

realpath `which less`

O se usi una conchiglia

realpath (which less)

Se l'output è /bin/busybox, allora puoi risolvere il tuo problema installando gnu meno .

Sulle Alpi:

sudo apk --update add less

Il comando sarà diverso a seconda della distro / gestore pacchetti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.