2012-07-17 30 views
32

Ok, he intentado todas las respuestas que pude encontrar en stackoverflow, pero aparentemente ninguna parece ser capaz de resolver mi problema. Quiero aplicar un parche hecho por SVN a un repositorio git. Aparentemente la forma más fácil de hacerlo es usando 'git apply', pero parece que no funciona.aplicar svn parche al repositorio de git

$ git apply --ignore-space-change --ignore-whitespace < xxx_parser.patch 


<stdin>:10: trailing whitespace. 
     FORCE_LA_CHECK = false; stdin:23: trailing whitespace. 

<stdin>:79: trailing whitespace 
. 
. 
. 
. 
error: pmd/grammar/JspParser.jjt: No such file or directory 
error: patch failed: pmd/pom.xml:251 
error: pmd/pom.xml: patch does not apply 

Este es el contenido del xxx_parser.patch:

$ head xxx_parser.patch Index: etc/grammar/JspParser.jjt 
--- etc/grammar/JspParser.jjt (revision 7704) 
+++ etc/grammar/JspParser.jjt (working copy) 

ahora por qué se quejan de que no puede encontrar el archivo PMD/gramática/JspParser.jjt?

La ruta en el parche apunta al directorio correcto.

+0

¿Sabe que un archivo de parche puede tener cambios para más de un archivo, correcto? Solo mirando el encabezado del archivo como lo ha hecho aquí solo le mostrará el primer archivo en el parche. – asm

Respuesta

43

Tuve algunos problemas al aplicar parches generados por SVN con git. Recomiendo aplicar parches de subversión directamente con el comando patch, y use git para verificar que dicho parche se haya aplicado correctamente.

$ patch -p0 < xxx_parser.patch 
$ git diff 
+0

Lamentablemente me sale el siguiente error cuando intento el comando anterior Error de aserción: (s && size), función savebuf, archivo /SourceCache/gpatch/gpatch-2/patch/util.c, línea 424. Abortar trampa: 6 –

+0

Creo que 'assert (s && size)' tenía errores relacionados con "_ \ No newline al final del archivo_" en versiones anteriores de [patch] (http://savannah.gnu.org/projects/patch/). Afortunadamente, ha sido resuelto. Asegúrese de que su sistema esté actualizado con [patch-2.7.1] (http://ftp.gnu.org/gnu/patch/). – emcconville

+0

En caso de problemas de finalización de línea (se modifican demasiadas líneas) intente utilizar la opción binaria: patch --binary --no-backup-if-mismatch -p0 too

5

respuesta @emcconville funciona si tiene patch como un comando ejecutable en la línea de comandos.

Para otros:

  1. Ir al repositorio SVN

    svn diff --git >> gitFormat.patch

  2. Utilizando su (Copia este archivo al) repositorio git

    git apply gitFormat.patch

Cuestiones relacionadas