Ignorar los cambios de espacios en blanco en todos los comandos git

26

He encontrado toneladas de sitios que explican cómo hacer que git te advierta cuando cambias las terminaciones de línea u otras técnicas diversas para evitar que arruines un archivo completo. Supongamos que es demasiado tarde para eso: el árbol ya tiene confirmaciones que alternan las terminaciones de línea de los archivos, por lo que git diffmuestra la resta del archivo anterior seguido de la adición de un nuevo archivo con el mismo contenido

Estoy buscando una opción de configuración de git o un indicador de línea de comando que indique diffignorarlos: si dos líneas difieren solo por espacios en blanco, finja que son lo mismo. Necesito esta opción de configuración / indicador de trabajo para cualquier cosa que se basa en diferencias de archivo - diff, blameincluso merge/ rebaseidealmente - Quiero gitignorar por completo con espacios en blanco, en particular los finales de línea. ¿Cómo puedo hacer eso?

Michael Mrozek
fuente

Respuestas:

14

Para diff, hay git diff --ignore-space-at-eol, que debería ser lo suficientemente bueno. Para diff y culpar, puede ignorar todos los cambios de espacios en blanco con -w: git diff -w, git blame -w.

Para git applyy git rebase, la documentación menciona --ignore-whitespace.

Para la fusión, parece que necesita usar una herramienta de fusión externa. Puede usar este script de envoltura (no probado), donde favorite-mergetoolestá su herramienta de fusión favorita ; ejecutar git -c mergetool.nocr.cmd=/path/to/wrapper/script merge. El resultado de la fusión estará en formato unix; si prefiere otro formato, convierta todo a ese formato diferente o realice $MERGEDla conversión después de la fusión.

#!/bin/sh
set -e
TEMP=$(mktemp)
tr -d '\013' <"$BASE" >"$TEMP"
mv -f "$TEMP" "$BASE"
TEMP=$(mktemp)
tr -d '\013' <"$LOCAL" >"$TEMP"
mv -f "$TEMP" "$LOCAL"
TEMP=$(mktemp)
tr -d '\013' <"$REMOTE" >"$TEMP"
mv -f "$TEMP" "$REMOTE"
favorite-mergetool "$@"

Para minimizar problemas con terminaciones de línea mixtas, asegúrese de que los archivos de texto se declaren como tales .

Consulte también ¿Es posible que git-merge ignore las diferencias de final de línea? en desbordamiento de pila.

Gilles 'SO- deja de ser malvado'
fuente
¿Hay alguna configuración para usar siempre la bandera -w con culpa git?
Thayne
@Thayne No que yo sepa. Puede definir un alias como bl = blame -wpero no puede redefinir el nombre de los comandos integrados y no veo una opción de configuración para que sea el predeterminado. Pero no soy un experto en git.
Gilles 'SO- deja de ser malvado'
para git status?
Ejaz