This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.

Nom

svn patch — Appliquer les modifications représentées par un fichier correctif au format unidiff dans la copie de travail.

Synopsis

svn patch FICHIER_CORRECTIF [CHEMIN]

Description

Cette sous-commande applique les changements décrits dans le fichier FICHIER_CORRECTIF qui doit être au format unidiff vers la copie de travail CHEMIN. Comme pour la plupart des autres sous-commandes de copie, si CHEMIN est omis, les modifications sont apportées au répertoire courant de la copie de travail. Un correctif unidiff convenable pour être appliqué à une copie de travail peut être produit par la commande svn diff ou par un outil tiers. Tout contenu qui n'est pas au format unidiff dans le fichier correctif est ignoré.

Toute modification listée dans le fichier correctif est soit appliquée soit rejetée. Si la correspondance d'une modification n'est pas trouvée exactement où elle devrait être, elle peut être appliquée en amont ou en aval dans le fichier si la correspondance y est trouvée en fonction des lignes de contexte fournies dans le correctif. Une modification peut aussi être appliquée « au jugé », c'est-à-dire quand une ou plusieurs lignes du contexte sont ignorées pour trouver une correspondance dans le fichier. Si aucun contexte correspondant ne peut être trouvé, la modification est en conflit et est écrite dans un fichier de rejet qui porte l'extension .svnpatch.rej.

svn patch rend compte pour chaque fichier ou répertoire du travail effectué par une lettre code, à la façon de svn update. Les lettre codes ont les significations suivantes :

A

Ajouté.

D

Supprimé (Deleted en anglais).

C

En conflit.

G

Fusionné (Merged) en anglais).

U

Mis à jour (Updated en anglais).

Les comptes-rendus relatifs aux modifications appliquées avec un décalage ou « au jugé » sont indiqués par une ligne commençant par le symbole ">". Nous vous conseillons de la passer en revue avec attention.

Si un correctif supprime tout le contenu d'un fichier, ce fichier est automatiquement marqué pour suppression. De la même manière, si un correctif crée un nouveau fichier, ce fichier est automatiquement placé dans la liste des fichiers à ajouter. Utilisez svn revert pour annuler les suppressions ou ajouts que vous ne validez pas.

Options

Exemples

Appliquer un simple correctif qui a été crée par la commande svn diff. Le fichier correctif crée un nouveau fichier, en supprime un autre et modifie le contenu ainsi que les propriétés d'un troisième. Voici le correctif lui-même (nous considérons qu'il s'appelle, quelle imagination, PATCH) :

Index: fichier-supprimé
===================================================================
--- fichier-supprimé	(revision 3)
+++ fichier-supprimé	(working copy)
@@ -1 +0,0 @@
-Ce fichier sera supprimé.
Index: fichier-modifié
===================================================================
--- fichier-modifié	(revision 4)
+++ fichier-modifié	(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.

Modification de propriétés sur fichier-modifié
___________________________________________________________________
Added: propname
## -0,0 +1 ##
+propvalue
Index: added-file
===================================================================
--- fichier-ajouté	(revision 0)
+++ fichier-ajouté	(working copy)
@@ -0,0 +1 @@
+Ceci est un fichier ajouté.

Nous pouvons appliquer le correctif précédent à une autre copie de travail depuis notre dépôt en utilisant svn patch et en vérifiant que le travail a bien été fait grace à svn diff :

$ cd /une/autre/copie-travail
$ svn patch /chemin/vers/PATCH
D         deleted-file
UU        changed-file
A         added-file
$ svn diff
Index: fichier-supprimé
===================================================================
--- fichier-supprimé	(revision 3)
+++ fichier-supprimé	(working copy)
@@ -1 +0,0 @@
-Ce fichier sera supprimé.
Index: fichier-modifié
===================================================================
--- fichier-modifié	(revision 4)
+++ fichier-modifié	(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.

Modification de propriétés sur fichier-modifié
___________________________________________________________________
Added: propname
## -0,0 +1 ##
+propvalue
Index: added-file
===================================================================
--- fichier-ajouté	(revision 0)
+++ fichier-ajouté	(working copy)
@@ -0,0 +1 @@
+Ceci est un fichier ajouté.
$

Parfois, vous pouvez avoir besoin que Subversion interprète le correctif « à l'envers » : que ce qui doit être ajouté soit enlevé et vice-versa. Utilisez alors l'option --reverse-diff. Dans l'exemple suivant, nous écrasons un correctif qui décrit les modifications de notre copie de travail puis nous appliquons ce correctif à l'envers pour annuler ces changements.

$ svn status
M       truc.c
$ svn diff > PATCH
$ cat PATCH
Index: truc.c
===================================================================
--- truc.c	(revision 128)
+++ truc.c	(working copy)
@@ -1003,7 +1003,7 @@
     return ERROR_ON_THE_G_STRING;

   /* Faire quelque chose dans la boucle. */
-  for (i = 0; i < txns->nelts; i++)
+  for (i = 0; i < txns->nelts; i--)
     {
       status = faire_quelque_chose(i);
       if (status)
$ svn patch --reverse-diff PATCH
U         truc.c
$ svn status
$