2012-07-17 13 views
32

Ok, ho provato tutte le risposte che ho trovato sullo stackoverflow, ma apparentemente nessuno sembra essere in grado di risolvere il mio problema. Voglio applicare una patch creata da SVN a un repository git. Apparentemente il modo più semplice per farlo è usare 'git apply', ma non sembra funzionare.applica la patch svn al repository 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 

Questo è il contenuto di xxx_parser.patch:

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

ora Perché si lamentano del fatto che non è possibile trovare il file PMD/grammaticale/JspParser.jjt?

Il percorso nella patch punta alla directory corretta.

+0

Sapete che un file patch può avere modifiche per più di un file, giusto? Basta guardare la testata del file come hai qui solo ti mostrerà il primo file nella patch. – asm

risposta

43

Ho riscontrato alcuni problemi nell'applicazione delle patch generate da SVN con git. Suggerirei di applicare eventuali patch di subversion direttamente con il comando patch, e usare git per verificare che tale patch sia stata applicata con successo.

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

Sfortunatamente ottengo il seguente errore quando provo il comando precedente Asserzione non riuscita: (s && size), funzione savebuf, file/SourceCache/gpatch/gpatch-2/patch/util.c, riga 424. Trappola interruzione: 6 –

+0

Credo che "assert (s && size)" fosse un bug relativo a "_ \ No newline alla fine del file_" nelle vecchie versioni di [patch] (http://savannah.gnu.org/projects/patch/). Fortunatamente, è stato risolto. Assicurati che il tuo sistema sia aggiornato con [patch-2.7.1] (http://ftp.gnu.org/gnu/patch/). – emcconville

+0

In caso di problemi di fine riga (troppe linee modificate) provare a utilizzare l'opzione binaria: patch --binary --no-backup-if-mismatch -p0 too

5

@emcconville risposta funziona se si dispone di patch come un comando eseguibile da linea di comando.

Per gli altri:

  1. Vai repo svn

    svn diff --git >> gitFormat.patch

  2. Dal vostro (Copiare questo file al) git repo

    git apply gitFormat.patch

Problemi correlati