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.
svn patch — Appliquer les modifications représentées par un fichier correctif au format unidiff dans la copie de travail.
svn patch FICHIER_CORRECTIF [CHEMIN]
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.
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 $