git diff muestra los colores incorrectamente


46

Para obtener resultados en color de todos los comandos git, configuro lo siguiente:

git config --global color.ui true

Sin embargo, esto produce una salida como esta para git diff,git log

captura de pantalla de git diff

mientras que los comandos como git statusmostrar bien

captura de pantalla de estado de git

¿Por qué no reconoce los códigos de color escapados en solo algunos de los comandos y cómo puedo solucionarlo?

Estoy usando iTerm 2 (tipo de terminal xterm-256color) en OS X 10.8.2 y zsh como mi 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)

Respuestas:


65

Estás viendo las secuencias de escape que le indican a la terminal que cambie los colores que se muestran con el carácter de escape que se muestra como ESC, mientras que el comportamiento deseado sería que las secuencias de escape tengan el efecto deseado.

Comandos como git diffy git logcanalizar su salida en un buscapersonas , lessde forma predeterminada. Git trata de decirle lessque permita que los personajes de control tengan su efecto de control, pero esto no funciona para usted.

Si lesses su localizador pero tiene la variable de entorno LESSestablecida en un valor que no incluye -ro -R, git no puede indicar lessque muestre colores. Normalmente pasa LESS=-FRSX, pero no si LESSya está configurado en el entorno. Una solución es pasar explícitamente la -Ropción de indicar lessque se muestren los colores cuando git lo invoca:

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

Si lessno es su localizador, cambie lesso descubra cómo hacer que su localizador muestre colores.

Si no desea que git muestre colores cuando invoca un buscapersonas, configúrelo color.uien autolugar de true.


Ah gracias. Si bien sabía que era lessnecesario -Rmostrar colores, lo olvidé git logy git difftransmití la salida a less. Gracias :)

55
¡Gracias! No me había dado cuenta de que el valor predeterminado ~/.profileen FreeBSD teníaPAGER=more; export PAGER
Jeffrey Goldberg el

Gracias. Me había LESSpropuesto -Kporque me gusta poder hacerlo CTRL-Ctodo. Pensé que era algo funky con esa variable, y ahora sé cómo solucionarlo.
trysis

2

Mejorando la respuesta de Gilles , puede mantener sus antiguas $LESSopciones al usar esto en su configuración de git (por ejemplo, en ~/.gitconfig):

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

La respuesta de Quazgar es buena. Tengo LESS=-ien mi bashrc, por lo que tendría que hacer `[core] pager = less $ LESS -FR` Saqué la X, porque con X, mi contenido de terminal existente se borra, prefiero que el contenido del terminal permanezca.
Wayne Walker

1

También puede ver esta salida si tiene Busybox . Alpine Linux es un buen ejemplo de una distribución popular que la usa. Ver https://wiki.alpinelinux.org/wiki/Alpine_Linux:FAQ#How_to_enable.2Ffix_colors_for_git.3F

Una manera simple de saber si actualmente usa Busybox es ejecutar:

realpath `which less`

O si usas concha de pescado

realpath (which less)

Si el resultado es /bin/busybox, entonces puede resolver su problema instalando menos GNU .

En alpino:

sudo apk --update add less

El comando será diferente dependiendo de su distribución / administrador de paquetes.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.