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.

Name

svn patch — Anwenden von Änderungen repräsentiert durch einen unifiziertes Diff-Patch auf die Arbeitskopie.

Aufruf

svn patch PATCHFILE [WCPATH]

Beschreibung

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.

Optionen

Beispiele

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
$