Agregar solo cambios que no sean espacios en blanco

Resuelto Edu Felipe asked hace 14 años • 12 respuestas

Tengo mi editor de texto para recortar automáticamente los espacios en blanco finales al guardar un archivo y estoy contribuyendo a un proyecto de código abierto que tiene graves problemas con los espacios en blanco finales.

Cada vez que intento enviar un parche, primero debo ignorar manualmente todos los cambios de espacios en blanco para elegir solo la información relevante. No sólo eso, sino que cuando corro git rebasenormalmente me encuentro con varios problemas a causa de ellos.

Como tal, me gustaría poder agregar al índice solo cambios que no sean espacios en blanco, de manera similar git add -p, pero sin tener que seleccionar todos los cambios yo mismo.

¿Alguien sabe como hacer esto?

EDITAR: No puedo cambiar la forma en que funciona el proyecto y han decidido, después de discutirlo en la lista de correo, ignorarlo.

Edu Felipe avatar Aug 19 '10 01:08 Edu Felipe
Aceptado

La solución @Frew no era exactamente lo que necesitaba, así que este es el alias que creé exactamente para el mismo problema:

alias.addnw=!sh -c 'git diff -U0 -w --no-color --src-prefix=a/ --dst-prefix=b/ "$@" | git apply --cached --ignore-whitespace --unidiff-zero -'

O simplemente puedes ejecutar:

git diff -U0 -w --no-color --src-prefix=a/ --dst-prefix=b/ | git apply --cached --ignore-whitespace --unidiff-zero -

Actualizar

Se agregaron opciones -U0y, --unidiff-zerorespectivamente, para solucionar problemas de coincidencia de contexto, según este comentario .

Básicamente, aplica el parche que se aplicaría addsin cambios en los espacios en blanco. Notarás que después de a git addnw your/filetodavía habrá cambios sin realizar, solo quedarán los espacios en blanco.

--no-color no es obligatorio, pero como tengo los colores configurados para siempre, tengo que usarlo. De todos modos, más vale prevenir que curar.

Advertencia

Si bien este truco funciona tal como está, si intentas usarlo para eliminar cambios en líneas en blanco, --ignore-blank-lineslas cosas se complican. Con esta opción, git diffsimplemente se eliminarán algunos fragmentos, lo que hará que el parche resultante sea falso, ya que los números de línea en el archivo de destino estarán incorrectos.

Colin Hebert avatar Aug 22 '2011 15:08 Colin Hebert

Cree un archivo de parche que contenga solo los cambios reales (excluyendo las líneas con solo cambios de espacios en blanco), luego limpie su espacio de trabajo y aplique ese archivo de parche:

git diff > copia de seguridad
git diff -w > cambios
git reset --hard
patch < cambios

Revise las diferencias restantes, luego addy commitcomo de costumbre.

El equivalente para Mercurial es hacer esto:

hg diff > copia de seguridad
hg diff -w > cambios
hg revertir --todas
las importaciones de hg --sin confirmar cambios

Steve Pitchers avatar May 01 '2015 12:05 Steve Pitchers