Mi diff contiene espacios en blanco al final - ¿cómo deshacerse de él?


He intentado editar un archivo php en TextWrangler con terminaciones de línea establecidas en Unix, en NetBeans y en vim. Cuando guardo la diferencia en un parche y luego intento aplicarla, se producen errores de espacios en blanco. Cuando escribo git diff puedo ver ^M al final de mis líneas, pero si los elimino manualmente en vim, dice que mi archivo de parche está dañado, y luego el parche no se aplica en absoluto.

Creo un parche con el siguiente comando:

git diff > patchname.patch

Y lo aplico comprobando un limpio versión del archivo a parchear y escribir

git apply patchname.patch

¿Cómo puedo crear este parche sin errores de espacios en blanco? He creado parches antes y nunca me he encontrado con este problema.

Author: beth, 2013-01-25

5 answers

¿Estás seguro de que esos son errores difíciles? Por defecto, git advertirá sobre errores de espacios en blanco, pero aun así los aceptará. Si son errores difíciles, debe haber cambiado algunas configuraciones. Puede usar la bandera --whitespace= a git apply para controlar esto por invocación. Try

git apply --whitespace=warn patchname.patch

Eso forzará el comportamiento predeterminado, que es advertir pero aceptar. También puede usar --whitespace=nowarn para eliminar las advertencias por completo.

La variable de configuración que controla esto es apply.whitespace.


Para referencia, los errores de espacios en blanco aquí no son errores con su parche. Es un estilo de código del que git, por defecto, se quejará al aplicar parches. En particular, no le gustan los espacios en blanco al final. Del mismo modo, git diff resaltará los errores de espacios en blanco (si está emitiendo a una terminal y el color está activado). El comportamiento predeterminado es advertir, pero aceptar el parche de todos modos, porque no todos los proyectos son fanáticos de los espacios en blanco.

 19
Author: Kevin Ballard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-20 18:49:17

git apply --reject --whitespace=fix mychanges.path

 24
Author: zednight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-12 15:09:13

Pruebe patch-p1

 8
Author: flash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-27 17:21:03

La solución de una línea es:

emacs <filename> -f delete-trailing-whitespace -f save-buffer -f kill-emacs

Fuente: https://wiki.gnome.org/Projects/GnomeShell/Development/WorkingWithPatches

 2
Author: askalski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-19 00:20:55

Creo que la pregunta de cómo lidiar con el espacio en blanco ha sido adecuadamente respondida, pero usted preguntó de dónde venía. Mencionaste ^M al final de las líneas: así es como Git muestra los finales de línea de Windows. Tal vez intente ejecutar dos2unix en sus archivos fuente antes de crear parches, o use un editor que mantenga los finales de línea originales.

 0
Author: TRiG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-20 14:01:58