¿Es posible decirle a patch
no generar .orig
y .rej
archivos? Me resulta extremadamente molesto que el parche los cree.
¿Es posible decirle a patch
no generar .orig
y .rej
archivos? Me resulta extremadamente molesto que el parche los cree.
Respuestas:
Si no está dando ninguna opción a patch
otra -pN
, solo crea esos archivos cuando un parche no se aplica de manera limpia.
Entonces, una opción es dejar de crear (o aceptar) parches malos. :)
De vuelta en el mundo real, esta es una característica. Cuando patch(1)
no se puede aplicar un segmento de parche al archivo original, guarda la copia del archivo original temporal de forma duradera *.orig
, volca el segmento rechazado *.rej
y continúa tratando de aplicar segmentos de parche. La idea es que puede abrir el *.rej
archivo y completar el proceso de parche manualmente copiando partes y piezas en el archivo parcheado. El *.orig
archivo también puede ser útil cuando el proceso de parche destruye accidentalmente algo, y debe consultar la versión original para solucionarlo.
No siempre soluciono un parche malo con el texto de los archivos *.rej
y *.orig
, pero es bueno tenerlos en caso de que los necesite.
Una vez que he arreglado un parche malo, ejecuto el siguiente script en la raíz del proyecto para limpiar rápidamente las cosas:
#!/bin/bash
find . '(' \
-name \*-baseline -o \
-name \*-merge -o \
-name \*-original -o \
-name \*.orig -o \
-name \*.rej \
')' -delete
Lo llamo cleanup-after-bad-patch
porque el nombre largo asegura parcialmente contra ejecutar esto accidentalmente, ya que podría eliminar los archivos que aún necesita. Sin embargo, para ser honesto, normalmente lo ejecuto escribiendo clean
TabEnter, eso es suficiente para encontrar este script en PATH
mis máquinas de desarrollo.
Los patrones adicionales que verifica son para los archivos de salida de mi sistema de control de versiones de elección cuando encuentra el mismo problema durante una operación de fusión. Es posible que desee ajustarlo para sus herramientas VCS / SCM .
A decir parche no a las copias de seguridad producen simplemente omitir los -b
y las --backup-...
opciones.
Para indicarle que no cree .rej
archivos, agregue la -r -
opción al comando.
GNU patch 2.6
Mac tal vez intente-r /dev/null
La --no-backup-if-mismatch
opción evitará los archivos ".orig".
También es posible que desee probar la --merge
opción, que crea un conflicto en el archivo.
En todos los casos, debe tener alguna forma de volver a un buen estado rápidamente si la fusión se vuelve abrumadora.
Estoy atascado con el parche v2.5.4 donde -r -
hace que cree los archivos de rechazo nombrados -
.
Descubrí que, por --reject-file=
ejemplo, el valor vacío hace que el parche falle con el código de salida 2
SI intenta escribir un archivo de rechazo. Si no hay rechazos, funciona como se esperaba. Si bien no es una solución completa para la versión anterior del parche, en algunas circunstancias esto puede ser aceptable o deseado.
Lo mejor que se me ocurrió (es cierto que una forma de barrer la tierra debajo de la alfombra) es usar -r <tmpfile>
, es decir:
# patch -r /tmp/deleteme.rej -i patchfile filetobepatched
desde v2.5.8, en -r -
realidad crea el -
archivo.
parche -p1 -B / dev / null -r - <file.patch
-B
bandera no envía la *.orig
salida a /dev/null
, como parece desde su comando. Simplemente sucede que los usuarios normales no pueden escribir en archivos llamados cosas así /dev/nullfoo.cpp
. Si haces esto como root, obtendrás basura en tu /dev
árbol. En segundo lugar, -r -
no suprime el *.rej
archivo. Simplemente parece hacerlo porque el error debido a la -B
bandera falsa impide que te muestre lo que realmente haría sin el -B
, que es crear un archivo llamado -
en el directorio actual.
man patch
: "-r Coloca los rechazos en el archivo de rechazo en lugar del archivo .rej predeterminado. Cuando el archivo de rechazo es -, descarta los rechazos".