2011-01-14 14 views
8

Ho un patchfile come questo:Perché la patch rifiuta il mio file di patch su una copia di lavoro 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> 

Per applicare alla copia di lavoro SVN, ho ramificata utilizzando:

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

Poi ho provato

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

ma l'uscita di SVN è

(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 

per ogni file?

Cosa potrebbe causare il rifiuto della patch per SVN? Sono su una macchina UNIX ma patch e repository hanno terminazioni di linea di Windows ...

Grazie per l'aiuto!

risposta

7

Il suggerimento dos2unix non era male ma non ha risolto il problema come suggerito.

Quello che ho fatto per rattoppare in realtà tutti i file:

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

Quindi, fondamentalmente patch sembra avere una gestione CR/LF linee sotto Unix problema. Convertendolo in LF, quindi patch e riconvertirlo dopo l'applicazione delle patch.

Crediti a Stefan.

+0

Anche questo ha risolto il mio problema, grazie.In effetti sembra che la patch non gestisca bene il CRLF, anche quando sia in patch che in patch. La patch –

+0

ha funzionato bene con CRLF, se entrambi i file patch e i file patch-patch seguono le stesse terminazioni di linea (cioè CRLF/LF) –

1

potresti provare lo strumento dos2unix sul file di correzione. Questo convertirà le terminazioni di linea.

+1

Fatto. Ora non dice più "(Stripping trailing CRs from patch.)". Gli errori sono ancora presenti. – Simon

+0

@Stefan dos2unix rende l'applicazione corretta. Ma il risultato non ha interruzioni di linea. Nel mio caso per ex, il file contiene: catdogcow – onmyway133

+0

Non è il file di patch in cui questo è un problema, sono i file di origine –

-1

Modificato: Quindi abbiamo stabilito che patch non è uno strumento SVN. SVN non ha alcuna influenza diretta su questo, a meno che non abbia creato il file di correzione in modo errato.

Sei sicuro che il file di patch è stato creato dal trunk? Se è così, la tua copia dovrebbe essere identica a quella su cui si basava la patch, quindi non ci dovrebbero essere motivi per non riuscire. L'unica conclusione che posso pensare è che c'è qualcosa di sbagliato nel file di patch; non corrisponde al tuo file.

Confermare che dir/file.xml nella copia di lavoro contiene davvero

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

partire dalla riga 7. (sto supponendo che il codice nella tua domanda è solo una copia modificata in ogni caso, perché ci dovrebbe essere 7 righe lì, non 4). Cioè, il contenuto del file corrisponde al contenuto della patch? Prestare particolare attenzione alla spaziatura e all'estremità della linea. Se lo fa, allora non ci dovrebbe essere alcuna ragione per cui la patch fallirebbe quel pezzo.

+0

Grazie, Zac. Ma so che la patch non fa parte della sovversione. Dopo alcuni tentativi mi sono imbattuto in questa domanda di cartella. Avrei dovuto dire che 'dir' è in realtà nel mio ramo. Tentare 'patch -p [N]' ha restituito un errore come 'file non trovato 'o simile. Dai un'occhiata alle mie modifiche. Grazie! – Simon

Problemi correlati