2011-12-13 12 views
51

Recientemente, cambié a SLES 11. Encontré un problema para el comando git. Todo el color ANSI no se pudo representar. En su lugar, se muestra el código ANSI así:El color ANSI en git no se muestra correctamente

* ESC [33m * comprometerse 0a02124a0fd85c1f0094bcdf15bac1645e3c8630ESC [m

nota: el color ANSI en las obras 'ls' muy bien.

+0

Esto podría ser un duplicado de http://stackoverflow.com/questions/6983305/how-to-fix-git-log-output-missing-lines-in-less - suponiendo que tenga en cuenta la respuesta de sehe. (Realmente no sé por qué las personas intentan establecer 'LESS' para ayudar a Git; sabe lo que necesita.) – Cascabel

+0

Ya había configurado LESS para usar otras configuraciones. – ben3000

Respuesta

58

estableciendo la variable de entorno LESS tratar de incluir la opción -R:

LESS=-R git grep ... 

Si esto funciona, añadir export LESS=-R a su archivo de arranque del shell ~/.bashrc o ~/.profile o similar.

-R or --RAW-CONTROL-CHARS 
      Like -r, but only ANSI "color" escape sequences are 
      output in "raw" form. Unlike -r, the screen 
      appearance is maintained correctly in most cases. 
      ANSI "color" escape sequences are sequences of the 
      form: 

       ESC [ ... m 

      where the "..." is zero or more color specification 
      characters 
+0

¡Muchas gracias! – Rocky

+4

También debería poder usar el parámetro de configuración core.pager. No creo que solo '-R' sea ideal para Git, realmente prefiere FRSX, y de hecho lo establecerá si aún no has configurado LESS en tu entorno. – Cascabel

+1

@Jefromi: sugiero agregar que, como respuesta, vale fácilmente diez puntos. :) – sarnold

4

OK, lo tengo. Este problema tiene que ver con la variable MENOS.

siguiente determinación línea de este problema:

export LESS="-erX" 
+2

Deberías usar "-eRX" intead de "-erX" (según la respuesta de sarnold, arriba). Si usa "-r", menos pasará a otros caracteres de control directamente (lo que probablemente no quiera) y menos no determine correctamente el número de líneas de salida, de modo que algunos se desplazan fuera de la pantalla (lo cual definitivamente no querer). El uso de "-e" y "-X" no tiene nada que ver con la interpretación de secuencias de escape de color. "-e" hace que menos salga automáticamente la segunda vez que golpea el final del archivo y "-X" "Desactiva el envío de las cadenas de inicialización y desinicialización del termcap al terminal". – craigster0

25

El problema, como otros han señalado, es que su terminal está muy bien, pero cuando Git invoca el localizador, no es interpretar los códigos de color ANSI correctamente.

Comenzaría por desarmandoLESS en su entorno; parece que podrías haberlo configurado anteriormente para ocultar algo que Git necesita. Si eso lo resuelve, allí estás. Si realmente debe personalizar LESS, tenga en cuenta que Git comienza con FRSX por defecto, así que tenga cuidado de cambiarlos si no es necesario.

Si haces por cualquier motivo desee LESS en su entorno diferente de lo que quiere para Git, la forma ideal para hacer frente a Git y el buscapersonas es a través de la variable de configuración core.pager. Para citar la página de manual:

El comando que usará git para paginar la salida. Se puede anular con la variable de entorno GIT_PAGER. Tenga en cuenta que git establece la variable de entorno LESS en FRSX si no está configurada cuando ejecuta el busca. Uno puede cambiar estas configuraciones estableciendo la variable LESS en algún otro valor. Alternativamente, estas configuraciones pueden ser anuladas en un proyecto o global al configurar la opción core.pager. Configurar core.pager no afecta el comportamiento de la variable de entorno LESS anterior, por lo que si desea anular la configuración predeterminada de git de esta manera, debe ser explícito. Por ejemplo, para desactivar la opción S de forma retrocompatible, configure core.pager en less -+$LESS -FRX. Esto se pasará al shell por git, que traducirá el comando final al LESS=FRSX less -+FRSX -FRX.

Eso, combinado con cierto conocimiento de las opciones que desea, debe llevarlo a donde quiere. (El sofisticado método compatible con versiones anteriores funciona deshabilitando todas las opciones actualmente en LESS, luego agregue las que desee.)

16

En git, puede cambiar su localizador de usar la opción -R:

git config --global core.pager "less -R" 
+0

Tuve que desarmarlo primero, y poner 'less -R' entre comillas. Trabajado sin embargo. – mtfurlan

5

Para mí, esto no funcionó:

git config --global core.pager less -R

Así que en lugar i adjuntas las siguientes acciones para mi ~/.gitconfig archivo

[core] 
    pager = less -R 

Para probarlo hice

git log --graph --pretty=format:"%C(yellow)%h%Creset%C(blue)%d%Creset %C(white bold)%s%Creset %C(white dim)(by %an %ar)%Creset" --all

+0

también puede probar el interruptor "--no-pager". Por ejemplo, "git --no-graph diff" –

0

tuve un problema similar con secuencias de escape en color ANSI en Git para Windows v2.7.1 en laravel Artisan y consolas de Symfony. Aquí mencioné la solución LESS que no resolvió el problema.

Desde Git para Windows abre terminal con bash --login -i, esta línea entraron después de la terminal comenzó funcionó para mí:

bash 
1

que tenían el mismo problema. Pero ¿por qué tengo que configurar un git en una máquina y no es necesario en otra? Quiero fijar el origen del problema, porque

git config --global core.pager "menos -R"

parece una solución para mí.

Cuestiones relacionadas