2009-02-12 15 views
23

Tengo problemas para aplicar un parche a mi árbol fuente, y no es el problema habitual de stripping -p. patch es capaz de encontrar el archivo en el parche.Cómo leer archivos .rej, es decir,

Específicamente, mi pregunta es cómo leer/interpretar los archivos .rejpatch crea cuando falla en unos pocos trozos. La mayoría de las discusiones de patch/diff que he visto no incluyen esto.

Respuesta

17

Un ejemplo sencillo:

$ echo -e "line 1\nline 2\nline 3" > a 
$ sed -e 's/2/b/' <a >b 
$ sed -e 's/2/c/' <a >c 
$ diff a b > ab.diff 
$ patch c < ab.diff 
$ cat c.rej 
*************** 
*** 2 
- line 2 
--- 2 ----- 
+ line b 

Como se puede ver: El viejo archivo contiene la línea 2 y el nuevo archivo debe contener la línea b. Sin embargo, en realidad contiene la línea c (eso no está visible en el archivo de rechazo).

De hecho, la manera más fácil de resolver estos problemas es tomar el fragmento de diff del archivo .diff/.patch, insertarlo en el lugar apropiado en el archivo para parchear y luego comparar el código a mano para figurar fuera, qué líneas realmente causan el conflicto.

O bien, alternativamente: obtenga el archivo original (sin modificar), aplique un parche y ejecute una combinación de tres vías en el archivo.

+0

simple y claro. gracias a Bodo por la explicación, creo que obtener el archivo original, y hacer una fusión de 3 vías será lo más rápido para mí. –

+0

Soy nuevo en este sitio, no estoy seguro de cómo puedo dar 'puntos' para esta respuesta.Me sigue pidiendo un openid –

9

Wiggle es una gran herramienta para aplicar archivos .rej cuando el parche no funciona.

2

No soy un experto en el manejo de archivos de parche, pero me gustaría añadir algo de claridad sobre cómo leerlos según mi comprensión de la información que contienen.

Sus .rej archivos le dirá:

  • la diferencia entre el fichero original y .rej;
  • donde el código del problema se inicia en el archivo original, cuántas líneas va en en ese archivo;
  • y donde el código comienza en el nuevo archivo, y cuántas líneas va para ese archivo.

Así que dado este mensaje, se señaló en el comienzo de mi archivo .rej:

diff a/www/js/app.js b/www/js/app.js (rejected hunks) @@ -4,12 +4,24 @@

veo que para mi archivo del problema (www/js/app), la diferencia entre el original (señalado como a/www/js/app.js en la primera línea) y el archivo .rej (indicado como b/www/js/) comienza en la línea 4 del original y continúa en 12 líneas (la parte antes de la coma en @@ -4,12, +4,24 @@ en la línea dos), y comienza en la línea 4 de la nueva versión del archivo y continúa durante 24 líneas (la parte después de la coma en @@ -4,12, +4,24 @@).

Para obtener más información, consulte la excelente descripción general de los archivos de revisión (que contienen la información que anoto arriba, así como los detalles sobre las líneas agregadas y/o entre las versiones de archivos) al http://blog.humphd.org/vocamus-906/.

Cualquier corrección o aclaración bienvenida, por supuesto.

Cuestiones relacionadas