2011-01-14 6 views
8

ich eine Patchdatei wie dieses:Warum weist mein Patch meine Patch-Datei auf einer SVN-Arbeitskopie zurück?

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> 

es zum SVN-Arbeitskopie anwenden zu können, verzweigt ich es mit:

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

Dann habe ich versucht

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

aber SVN die Ausgabe ist

(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 

für jede Datei?

Was könnte dazu führen, dass SVN den Patch zurückweist? Ich bin auf einem UNIX-Rechner, aber Patch und Repository haben Windows-Zeilenendungen ...

Vielen Dank für Ihre Hilfe!

Antwort

7

Die dos2unix Spitze war nicht schlecht, aber löste das Problem nicht wie vorgeschlagen.

Was ich tat, eigentlich alle Dateien patchen:

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

Also im Grunde patch scheint ein Problem der Handhabung CR/LF Linien unter Unix zu haben. Konvertieren Sie es in LF, dann patchen und konvertieren Sie es nach dem Patchen zurück.

Dank an Stefan.

+0

Das hat auch mein Problem gelöst, danke.In der Tat scheint es, dass Patch nicht gut mit CRLF umgehen kann, selbst wenn es sich sowohl um Patch- als auch um zu patchende Dateien handelt. –

+0

Patch funktionierte gut für mich mit CRLF, wenn sowohl Patch-Datei und zu-patchen-Dateien die gleichen Zeilenenden folgen (d. H. CRLF/LF) –

1

können Sie das dos2unix-Tool auf der Patch-Datei versuchen. Dadurch werden die Zeilenenden konvertiert.

+1

Hat es getan. Jetzt heißt es nicht mehr "(Nachträgliche CRs vom Patch entfernen.)". Die Fehler sind noch vorhanden. – Simon

+0

@Stefan dos2unix macht das Patchen OK. Aber das Ergebnis hat keinen Zeilenumbruch. In meinem Fall für ex enthält die Datei: catdogcow – onmyway133

+0

Es ist nicht die Patch-Datei, wo dies ein Problem ist, es ist die Quelldateien –

-1

Bearbeitet: So haben wir festgestellt, dass patch kein SVN-Tool ist. SVN hat keinen direkten Einfluss darauf, es sei denn, die Patch-Datei wurde falsch erstellt.

Sind Sie sicher, dass die Patchdatei vom Stamm erstellt wurde? Wenn dies der Fall ist, sollte Ihre Kopie identisch mit der sein, auf der der Patch basiert, daher sollte es keinen Grund geben, dass sie fehlschlägt. Die einzige Schlussfolgerung, die mir einfällt, ist, dass mit der Patch-Datei etwas nicht stimmt. Es passt nicht zu Ihrer Datei.

bestätigen, dass dir/file.xml in Ihrer Arbeitskopie enthält wirklich

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

ab Zeile 7 (ich den Code in Ihrer Frage vorausgesetzt, ist nur eine ohnehin bearbeitete Kopie, weil es sein sollte 7 Zeilen dort, nicht 4.) Das heißt, entspricht der Inhalt der Datei dem Inhalt des Patches? Achten Sie besonders auf Abstände und Linienenden. Wenn dies der Fall ist, sollte es keinen Grund geben, warum der Patch diesen Brocken versagen würde.

+0

Vielen Dank, Zac. Aber ich weiß, dass Patch nicht Teil der Subversion ist. Nach einigen Versuchen bin ich auch auf diese Ordnerfrage gestoßen. Ich hätte sagen sollen, dass 'dir' tatsächlich in meiner Branche ist. Der Versuch 'patch -p [N]' hat einen Fehler wie 'Datei nicht gefunden' oder ähnlich zurückgegeben. Schau dir meine Änderungen an. Vielen Dank! – Simon