2008-09-25 19 views
216

Estoy ejecutando git-diff en un archivo, pero el cambio se produce al final de una línea larga.git diff - manejo de líneas largas?

Si utilizo las teclas de cursor para mover hacia la derecha, pierde la codificación de color y, lo que es peor, las líneas no se alinean, lo que dificulta el seguimiento del cambio.

¿Hay alguna forma de evitar ese problema o simplemente hacer que las líneas se envuelvan?

(que se ejecuta a través de Git 1.5.5 mingw32)

+90

Gah ... ¡No tenía idea de que pudiera moverse con las teclas de flecha! Gracias. –

+5

Es posible que desee probar 'git diff --color-words', no resuelve el problema de desplazamiento, ¡pero los cambios de palabras están rodeados por el contexto en una sola línea! – kevinf

+5

Usar "fold" parece funcionar bastante bien: 'git diff --color-words | fold' – Amy

Respuesta

106

La visualización de la salida de git diff se maneja con el buscapersonas que esté utilizando.

Comúnmente, en Linux, se usaría less.

Puede indicarle a git que use un pager diferente configurando la variable de entorno GIT_PAGER. Si no le molesta la búsqueda (por ejemplo, su terminal le permite desplazarse hacia atrás), puede intentar configurar explícitamente GIT_PAGER como vacía para detenerla usando un buscapersonas. En Linux:

$ GIT_PAGER='' git diff 

Sin un buscapersonas, las líneas se ajustarán.

Si su terminal no es compatible con salida de color, también puede desactivarlo utilizando el argumento --no-color, o poniendo una entrada en la sección de color de su archivo de configuración de git.

$ GIT_PAGER='' git diff --no-color 
+1

Puedo confirmar que la configuración de GIT_PAGER en blanco hace que las líneas se envuelvan. También inserta símbolos por lo que es un poco difícil de leer, pero si es necesario puedo encontrar un buscapersonas diferente, por lo que sigue siendo una respuesta válida. :) Gracias. –

+1

¿Qué símbolos agrega que dificultan la lectura? También podría editar mi respuesta para resolver ese problema. – SpoonMeiser

+0

Principalmente "<- [m" para cada línea nueva (donde <- era un carácter de flecha única), pero también marcadores donde (creo) cada color habría comenzado, como "<- [1m" y "<- [32m" . –

2
No

una solución perfecta, pero gitk y git-gui puede tanto mostrar esta información, y tienen barras de desplazamiento.

-1

Cuando tengo problemas, suelo recurrir a DiffMerge. Excelente herramienta de diferencia que tiene resaltado de diff en línea. Además, en las últimas versiones agregaron un modo para tener un modo horizontal.

No he podido configurar git para usarlo. Así que tengo que buscar las dos versiones del archivo primero.

18

Solo busqué este. GIT_PAGER='less -r' funciona para mí

+9

Incluso mejor (para mí): 'menos -R' (En realidad, uso' less -eiFRSX', que también resuelve problemas de color y de ajuste de línea.) – cdunn2001

+1

menos -R es como -r, pero solo es "color" ANSI las secuencias de escape salen en forma "cruda". A diferencia de -r, la apariencia de la pantalla se mantiene correctamente en la mayoría de los casos. (hombre menos) – richk

211

O si usa menos como buscapersonas predeterminado, simplemente escriba -S mientras visualiza el ajuste para reactivar el envoltorio en menos.

+48

consejo relacionado, use '--word-diff' para ver un resaltado con código de colores de las palabras modificadas –

+4

solo una nota para esto ya que vi que algunas personas tenían problemas con ella, -S es diferente de -s (Asegúrate de estar presionando shift + s) – longda

+1

@JoshDiehl: Espero que no te importe ... Creo que la parte '--word-diff' merece tener su propia respuesta sobre esto, ya que me parece haciendo mucho para ayudar a resolver el problema subyacente: averiguar qué ha cambiado en una larga fila. Así que lo hice uno: http://stackoverflow.com/a/19253759/313756 – lindes

109

También puede usar git config para configurar el buscapersonas para ajustar.

$ git config core.pager 'less -r' 

Establece la configuración del buscapersonas para el proyecto actual.

$ git config --global core.pager 'less -r' 

Ajusta el localizador global para todos los proyectos

+3

con msysgit (1.8.1.msysgit.1) me funcionó usando comillas dobles -' git config --global core.pager "menos -r "' – kerim

+0

Esto me consiguió envolver permanentemente con git diff en OS X. ¡Gracias! –

+0

Funciona, pero no entiendo por qué. ¿Alguien puede explicar? 'man less',' -r' no dice nada sobre envolver. –

17

Mac OS X: Ninguna de las otras respuestas, excepto someone45 de 'S', mientras que menos se está ejecutando trabajó para mí.Tomó lo siguiente para hacer word-wrap persistente:

git config --global core.pager 'less -+$LESS -FRX' 
+2

esto funcionó para mí en Ubuntu Linux –

+0

Esto funcionó para mí también, pero no entiendo por qué. ¿Qué está haciendo el parámetro '- + $ LESS'? A menos que git lo defina, mi variable de entorno LESS ni siquiera está configurada. – jakar

+3

@jakar: entonces no hace nada. En algunos entornos, '$ LESS' se establece en algún valor (por ejemplo, mediante un' .login' o un '.profile' o algo), y esa opción, creo, simplemente agrega los valores predeterminados, y luego agrega' -FRX' encima de esos. – naught101

27

para utilizar menos como el localizador y crea envolver permanente línea sólo tiene que activar la opción de plegado palangres:

git config --global core.pager 'less -+S' 

esta manera no tiene que escribirlo mientras usa menos.

Saludos

+0

Esto funcionó para mí en OSX Mavericks. – stiemannkj1

+0

Funcionó para mí en OS X 10.9.5. Gracias! –

+0

Del mismo modo, si desea DESHABILITAR el ajuste de línea al leer Git diffs, la configuración es similar: 'git config --global core.pager 'menos -S' –

2

Simplemente podría canalizar la salida de git diff a más:

git diff | more 
+0

Esto quita la coloración, pero funciona como un amuleto. – infoclogged

32

Con el crédito a Josh Diehl en a comment-this answer, que sin embargo se siente como esto debería ser una respuesta en sí misma , por lo tanto, agréguela:

Una forma de tratar de ver las diferencias en las líneas largas es usar una diferencia orientada a las palabras. Esto se puede hacer con:

git diff --word-diff 

En este caso, obtendrá una salida diff significativamente diferente, que muestra específicamente lo que ha cambiado dentro de una línea.

Por ejemplo, en vez de conseguir algo como esto:

diff --git a/test-file.txt b/test-file.txt 
index 19e6adf..eb6bb81 100644 
--- a/test-file.txt 
+++ b/test-file.txt 
@@ -1 +1 @@ 
-this is a short line 
+this is a slightly longer line 

podría obtener algo como esto:

diff --git a/test-file.txt b/test-file.txt 
index 19e6adf..eb6bb81 100644 
--- a/test-file.txt 
+++ b/test-file.txt 
@@ -1 +1 @@ 
this is a [-short-]{+slightly longer+} line 

O, con la coloración, en lugar de esto:

result of just <code>git diff</code>

Puede obtener esto:

result of <code>git diff --word-diff</code>

Ahora, si usted está comparando una línea muy larga, es posible que tenga problemas con la situación del localizador que describió originalmente, y que ha sido abordado, al parecer, a la satisfacción, en otras respuestas. Sin embargo, con suerte esto le brinda una nueva herramienta para identificar más fácilmente lo que ha cambiado en la línea.

+4

Hay un par de opciones para '--word-diff':' color', 'plain', y' porcelain'. Además, uno puede cambiar la expresión regular para los límites de las palabras con '--word-diff-regex'. El valor predeterminado parece ser '\ S +'. ([v2.1.1] (http://git-scm.com/docs/git-diff/2.1.1)) – Michael

+3

'--color-words' parece ser una abreviatura de' --word-diff = color' , lo cual es bueno cuando solo estás viendo el diff, no lo compartes. – CivFan

-1

La manera más fácil de hacerlo, en mi caso yo uso Linux OS

git diff > text.txt 

Esta línea de comando crea y coloca la salida de git diff dentro del texto.txt luego puede abrirlo con otro editor de texto, por ejemplo, texto sublime.

sublime text.txt 

Espero que te ayude.

no se olvide de eliminarlo después. = 0)

0

lista de la corriente config/default:

$ git config --global core.pager 
    less -FXRS -x2 

continuación, actualizar y dejar de lado los -S como:

$ git config --global core.pager 'less -FXR -x2' 

los -S: Causas líneas más largas que la anchura de la pantalla de ser picado en lugar de doblado.

1

Nadie lo señaló hasta ahora. Es bastante fácil de recordar y no extra de configuración que hay que hacer en el git config

git diff --color | less -R 
2

Cuando está utilizando "git diff" y se está mostrando varias páginas (que se ve ":" al final de la página) en este caso, puede escribir "-S" y presionar enter. (S debe ser mayúscula). alternará las líneas largas.

+0

esto es mucho más fácil que tener que meterse con cualquier configuración – chharvey