2011-01-14 20 views
8

Tengo un fichero de parche como este:¿Por qué el parche está rechazando mi archivo de parche en una copia de trabajo SVN?

Index: dir/file.xml 
=================================================================== 
--- dir/file.xml (revision 178) 
+++ dir/file.xml (working copy) 
@@ -7,7 +7,7 @@ 
    <markup> 
- <markup /> 
+ <markup></markup> 
    <markup> 
    <markup> 
@@ -20,6 +20,7 @@ 
    <markup> 
    <markup> 
+ <tag> 
    <markup> 

aplicarlo a la copia de trabajo SVN, me ramificado usando:

$ svn copy -r 178 trunk/component/dir branches/mybranch 

Luego probé

$ cd branches/mybranch 
$ ls -R 
./dir: 
file.xml 
$ patch -p0 -i ~/patchfile.patch 

pero la producción de SVN es

(Stripping trailing CRs from patch.) 
patching file dir/file.xml 
Hunk #1 FAILED at 7. 
Hunk #2 FAILED at 20. 
2 out of 2 hunks FAILED -- saving rejects to file dir/file.xml.rej 

para cada archivo?

¿Qué podría hacer que SVN rechace el parche? Estoy en una máquina UNIX pero el parche y el depósito tienen terminaciones de línea de Windows ...

¡Gracias por la ayuda!

Respuesta

7

La punta de dos2unix no estaba mal, pero no resolvió el problema como se sugirió.

Lo que hice para parchear realidad todos los archivos:

$ cd branches/mybranch 
$ sudo apt-get install tofrodos 
$ fromdos ~/patchfile.patch 
$ fromdos */* 
$ patch -p0 -i ~/patchfile.patch 
$ todos */* 

Así que, básicamente patch parece tener un manejo CR/LF líneas bajo Unix problema. Convertirlo a LF, luego parchearlo y volver a convertirlo después de parchear ayudó.

Créditos a Stefan.

+0

Esto también resolvió mi problema, gracias.De hecho, parece que el parche no maneja bien CRLF, incluso cuando está en parche y en los archivos parcheados. El parche –

+0

funcionó bien para mí con CRLF, si los archivos de parche y los archivos parcheados siguen los mismos finales de línea (es decir, CRLF/LF) –

1

puede probar la herramienta dos2unix en el archivo de parche. Eso convertirá las terminaciones de línea.

+1

Lo hice. Ahora no dice "(Eliminando CR de seguimiento del parche)". Los errores aún están presentes. – Simon

+0

@Stefan dos2unix hace que el parche esté bien. Pero el resultado no tiene un salto de línea. En mi caso, por ejemplo, el archivo contiene: catdogcow – onmyway133

+0

No es el archivo de parche donde esto es un problema, son los archivos fuente –

-1

Editado: Así que establecimos que patch no es una herramienta SVN. SVN no tiene ninguna influencia directa sobre esto, a menos que haya creado el archivo de parche incorrectamente.

¿Está seguro de que el patchfile se creó desde el tronco? Si es así, su copia debe ser idéntica a la que se basa en el parche, por lo que no debería haber ninguna razón para que falle. La única conclusión en la que puedo pensar es que hay algo mal con el archivo de parche; no coincide con tu archivo.

Confirmar que dir/file.xml en su copia de trabajo contiene realmente

<markup> 
    <markup /> 
    <markup> 
    <markup> 

a partir de la línea 7 (estoy asumiendo el código en su pregunta es simplemente una copia editada de todos modos, porque no debe haber 7 líneas allí, no 4.) Es decir, ¿el contenido del archivo coincide con el contenido del parche? Preste especial atención al espaciado y los finales de línea. Si lo hace, entonces no debería haber ninguna razón por la cual el parche fallaría ese trozo.

+0

Gracias, Zac. Pero sé que el parche no es parte de la subversión. Después de algunos intentos, también encontré esta pregunta de carpeta. Debería haber dicho, que 'dir' está realmente en mi rama. Al intentar 'patch -p [N]' devolvió un error como 'archivo no encontrado' o similar. Eche un vistazo a mis ediciones. ¡Gracias! – Simon

Cuestiones relacionadas