Diese Dokumentation wurde zur Beschreibung der Serie 1.7.x von Apache™ Subversion® erstellt. Falls Sie eine unterschiedliche Version von Subversion einsetzen, sei Ihnen dringend angeraten, bei http://www.svnbook.com/ vorbeizuschauen und stattdessen die zu Ihrer Version von Subversion passende Version dieser Dokumentation heranzzuiehen.
svn patch — Anwenden von Änderungen repräsentiert durch einen unifiziertes Diff-Patch auf die Arbeitskopie.
Dieser Unterbefehl wendet Änderungen, die in der
Patch-Datei PATCHFILE
im
unified-diff Format vorliegen auf die Arbeitskopie
WCPATH
an. Wie bei den meisten
Unterbefehlen, die auf Arbeiskopien arbeiten, werden die
Änderungen auf die aktuelle Arbeitskopie angewendet, falls
WCPATH
nicht angegeben wird.
Ein Patch im unifizierten-diff Format kann mit dem Befehl
svn diff oder Diff-Werkzeugen von
Drittanbietern erzeugt werden. Jeglicher Inhalt der
Patch-Datei, der nicht dem unifizierten-diff Format
entspricht, wird ignoriert.
Änderungen in der Patch-Datei werden entweder
angewendet oder abgewiesen. Wenn eine Änderung nicht zu
ihrer exakten Zeilenposition passt, kann sie davor oder
danach in der Datei angewendet werden, falls der umgebende
Kontext des Patches passt. Eine Änderung kann auch mit
Unschärfe angewendet werden, d.h.,
ein paar Zeilen Kontext werden ignoriert, wenn versucht
wird, die passende Stelle für die Änderung zu finden.
Falls für eine Änderung kein passender Kontext gefunden
werden kann, werden die konfliktbehafteten Änderungen in
eine Abweisungs-Datei geschrieben, die die Endung
.svnpatch.rej
besitzt.
svn patch meldet eine Statuszeile für eine geänderte Datei oder ein geändertes Verzeichnis, indem es Buchstaben-Codes Ähnlich denen der Benachrichtigungen von svn update. Die Buchstaben-Codes haben die folgende Bedeutung:
A
hinzugefügt (Added)
D
gelöscht (Deleted)
C
konfliktbehaftet (Conflicted)
G
zusammengeführt (Merged)
U
aktualisiert (Updated)
Wurden Änderungen mit einem Zeilenversatz oder mit
Unschärfe angewendet, wird das durch das Symbol
">
" am Zeilenanfang kenntlich
gemacht. Sie sollten solche Änderungen sorgfältig
überprüfen.
Falls ein Patch den gesamten Inhalt einer Datei entfernt, wird die Datei automatisch zum Löschen vorgemerkt. Ähnlich wird verfahren, wenn der Patch eine neue Datei erzeugt; in diesem Fall wird die Datei zum Hinzufügen vorgemerkt. Verwenden Sie svn revert, um ungewollte Löschungen und Hinzufügungen rückgängig zu machen.
Wenden Sie eine einfache Patch-Datei an, die vom
Befehl svn diff erzeugt wurde. Unsere
Patch-Datei erzeugt eine neue Datei, löscht eine weitere
Datei und modifiziert den Inhalt und die Eigenschaften
einer dritten. Hier ist die eigentliche Patch-Datei (von
der wir annehmen, dass sie auf kreative Weise
PATCH
genannt wurde):
Index: deleted-file =================================================================== --- deleted-file (revision 3) +++ deleted-file (working copy) @@ -1 +0,0 @@ -This file will be deleted. Index: changed-file =================================================================== --- changed-file (revision 4) +++ changed-file (working copy) @@ -1,6 +1,6 @@ The letters in a line of text Could make your day much better. But expanded into paragraphs, -I'd tell of kangaroos and calves +I'd tell of monkeys and giraffes Until you were all smiles and laughs From my letter made of letters. Property changes on: changed-file ___________________________________________________________________ Added: propname ## -0,0 +1 ## +propvalue Index: added-file =================================================================== --- added-file (revision 0) +++ added-file (working copy) @@ -0,0 +1 @@ +This is an added file.
Wir können die vorangegangene Patch-Datei auf eine andere Arbeitskopie aus unserem Projektarchiv anwenden, indem wir svn patch verwenden und sicherstellen, dass es richtig gemacht wurde, wenn wir svn diff aufrufen:
$ cd /some/other/workingcopy $ svn patch /path/to/PATCH D deleted-file UU changed-file A added-file $ svn diff Index: deleted-file =================================================================== --- deleted-file (revision 3) +++ deleted-file (working copy) @@ -1 +0,0 @@ -This file will be deleted. Index: changed-file =================================================================== --- changed-file (revision 4) +++ changed-file (working copy) @@ -1,6 +1,6 @@ The letters in a line of text Could make your day much better. But expanded into paragraphs, -I'd tell of kangaroos and calves +I'd tell of monkeys and giraffes Until you were all smiles and laughs From my letter made of letters. Eigenschaftsänderungen: changed-file ___________________________________________________________________ Added: propname ## -0,0 +1 ## +propvalue Index: added-file =================================================================== --- added-file (revision 0) +++ added-file (working copy) @@ -0,0 +1 @@ +This is an added file. $
Manchmal möchten Sie vielleicht, dass Subversion einen
Patch „rückwärts“ interpretiert, wobei
hinzugefügte Dinge als entfernte Dinge behandelt werden
und umgekehrt. Verwenden Sie hierfür die Option
--reverse-diff
. Im folgenden Beispiel
wenden wir eine Patch-Datei an, die die Änderungen in
unserer Arbeitskopie beschreibt und verwenden anschließend
einen Rückwärts-Patch, um diese Änderungen wieder
ungeschehen zu machen.
$ svn status M foo.c $ svn diff > PATCH $ cat PATCH Index: foo.c =================================================================== --- foo.c (revision 128) +++ foo.c (working copy) @@ -1003,7 +1003,7 @@ return ERROR_ON_THE_G_STRING; /* Do something in a loop. */ - for (i = 0; i < txns->nelts; i++) + for (i = 0; i < txns->nelts; i--) { status = do_something(i); if (status) $ svn patch --reverse-diff PATCH U foo.c $ svn status $