Parche de Linux estándar codificado rígido solo para archivos de texto unix.Cómo usar parches creados en Windows (con CRLF) en Linux? I
PD: No quiero convertir TODO a Unix y luego convertir el resultado.
Parche de Linux estándar codificado rígido solo para archivos de texto unix.Cómo usar parches creados en Windows (con CRLF) en Linux? I
PD: No quiero convertir TODO a Unix y luego convertir el resultado.
perl -i.bak -pe's/\R/\n/g' inputfile
para convertir cualquier línea que termine en el estándar.
Gracias, está interesado pero no es aplicable en mi situación. –
Responde la pregunta en el título si la diferencia se basa en líneas, como suele ser. – Anonymous
Me he encontrado con este problema varias veces. Esto es lo que descubrí:
Así que esto es lo que hice:
Puede usar unix2dos para convertir archivos parcheados a terminaciones de línea CRLF si desea mantener esa convención.
Combinado:
dos2unix patchfile.diff
dos2unix $(grep 'Index:' patchfile.diff | awk '{print $2}')
patch --verbose -p0 -i patchfile.diff
unix2dos $(grep 'Index:' patchfile.diff | awk '{print $2}')
La última línea depende de si desea mantener los CRLFs o no.
M.
PS. Esto debería haber sido una respuesta a la publicación de cscrimge. DS.
Lo que funcionó para mí fue lo que antecede, pero se reemplazó por '+++' en lugar de 'Índice:'. – nullPainter
Utilice la opción --binary. Aquí está el fragmento relevante de la página man:
--binary
Write all files in binary mode, except for standard output and /dev/tty. When reading, disable
the heuristic for transforming CRLF line endings into LF line endings. This option is needed
on POSIX systems when applying patches generated on non-POSIX systems to non-POSIX files. (On
POSIX systems, file reads and writes never transform line endings. On Windows, reads and writes
do transform line endings by default, and patches should be generated by diff --binary when
line endings are significant.)
Ésta es una solución de uno de los nuestros se le ocurrió en nuestra oficina, así que no estoy tomando el crédito para él, pero funciona para mí aquí.
A veces tenemos una situación de linux mixto y terminaciones de línea de Windows en el mismo archivo, y también creamos archivos de parche desde Windows y los aplicamos en linux.
Si usted es experimentar un problema parche después de crear el archivo de parche en las ventanas o se han mezclado los finales de línea y luego hacer esto:
dos2unix patch-file dos2unix $(sed -n 's/^Index: //p' patch-file) patch -p0 -i patch-file
¿Por qué tienes (al parecer una gran cantidad de) archivos de texto con CRLF finales de línea en un sistema Unix? –
fuentes para ARM que anteriormente se desarrollaron de forma cruzada en win32. –
¿Arreglará el archivo el comando dos2unix? –