git diff - ¿mostrarme los cambios finales de línea?

85

Mi editor está cambiando los finales de línea de mis archivos fuente. Cuando lo hago git diff, veo la misma línea dos veces, una con -y otra con +, sin diferencia visible.

¿Cómo puedo git diffmostrarme cuál fue realmente este cambio?

Stonky
fuente
Casi duplicado de esto (también mencionado a continuación): mi favorito esgit config diff.wsErrorHighlight all
Joshua Goldberg

Respuestas:

64

Primero, asegúrese de que está utilizando la salida en color (por ejemplo, con git diff --color) y que ha habilitado el resaltado de espacios en blanco con (por ejemplo)

git config color.diff.whitespace "red reverse"

Sin embargo, es posible que esto no funcione en todos los casos, ya gitque no parece resaltar los espacios en blanco finales para las líneas eliminadas . Para ver los espacios en blanco que eliminó, simplemente use

git diff -R

para poner el espacio en blanco en el lado 'agregado' de la comparación, donde se resalta.

Para obtener más detalles, consulte las respuestas a esta pregunta SO .

Paul Whittaker
fuente
Tengo la versión 2.1.4 de git y actué según la sugerencia del comando de configuración de git. Pero git diff todavía no muestra ninguna diferencia. Si canalizo git diff a hexdump -C, no se muestra nada allí: 000000f0 2d 2d 7d 0a 2b 2b 7d 0a |--}.++}.|el 7d es la llave '}'.
Hombre del espacio de Cardiff
37

Puede ver la diferencia de final de línea con el siguiente comando.

git diff | cat -v

Luego se imprime "^ M" para la terminación CRLF (DOS), nada para la terminación LF (Unix).

Aparentemente, git diff está haciendo lo correcto, imprimiendo caracteres CR y LF para el final de CRLF. Pero debido a que la consola consume CR, no podemos verlo. Al usar cat -v, podemos hacerlo visible.

droid7c2
fuente
Otro enfoque similar es que git diff > somediff && vi somediffvim también muestra CRLF como ^ M. pero el cat -vestá limpio.
Nick X
1
+1 sobre todo por dejarme aprender, después de 20 años de usarlo, una opción catque no conocía. :-)
Harald
24

Una forma de ver los cambios en los espacios en blanco es hacer una "diferencia de palabra" carácter por carácter con

git diff --color --word-diff-regex=.

Esto resalta todos los cambios de espacios en blanco en todas partes de las líneas . Los espacios en blanco eliminados se envuelven en [-y -]y se agregan espacios en blanco en {+y +}.

Alternativamente, como sugirió Alex

git diff --color --ws-error-highlight=new,old

resalta todos los cambios de espacios en blanco al final de las líneas .

ntc2
fuente
11
git diff --ws-error-highlight=new,old

resalta las diferencias de espacios en blanco en las líneas cambiadas.

Alex
fuente
¿Qué versión de git estás usando? git 2.1.4 en mi sistema dice --ws-error-highlight = new, old es una opción no válida.
Hombre del espacio de Cardiff
Esta opción se agregó en 2015 en git 2.5.0.
MiniGod
5

Una herramienta gráfica de diferencias le mostrará mejor el cambio, inténtelo git difftool.

Use meld y configure las preferencias para mostrar espacios en blanco. (Editar -> Preferencias -> Mostrar espacios en blanco).

Otras herramientas gráficas probablemente tengan opciones similares: la respuesta + comentario de @ Cotton le dice cómo hacer esto con vimdiff.

bstpierre
fuente
Es posible que no esté disponible una herramienta gráfica de diferencias. La respuesta de @ paul-whittaker funcionará en el contexto implícito en la pregunta (alguna terminal).
2018
Ahora bien, esto es extraño, pero git difftool --tool=meld doesn'tincluso lanza Meld. No sé si es porque hay un rebase en curso o no.
Hombre del espacio de Cardiff