SVNBOOK Chap2 Basic Work Cycle Resolve Conflicts (Merging Others' Changes)
De Framalang Wiki.
Cette page fait partie du projet Version control with subversion.
| Pseudo | Code | Rôle | Statut |
|---|---|---|---|
| Hotshot92 | Traduction | Terminé | |
| SVF | Mise à jour à la dernière version 1.5 | Fait | |
| SVF | 1ère Relecture | Fait | |
| Validation |
Resolve Conflicts (Merging Others' Changes)
Resolve Conflicts (Merging Others' Changes)
Résoudre les conflits (Fusionner des modifications)
We've already seen how svn status -u can predict conflicts. Suppose you run svn update and some interesting things occur:
$ svn update
U INSTALL
G README
Conflict discovered in 'bar.c'.
Select: (p) postpone, (df) diff-full, (e) edit,
(h) help for more options:
Nous avons déjà vu que svn status -u est capable de prévoir les conflits. Supposons que vous lanciez svn update et que le résultat suivant apparaisse :
$ svn update
U INSTALL
G LISEZMOI
Conflit découvert dans 'machin.c'.
Sélectionner : (p) report, (df) diff complet, (e) édite,
(h) aide pour plus d'options :
The U and G codes are no cause for concern; those files cleanly absorbed changes from the repository. The files marked with U contained no local changes but were Updated with changes from the repository. The G stands for merGed, which means that the file had local changes to begin with, but the changes coming from the repository didn't overlap with the local changes.
Les codes U et G ne nous doivent pas vous inquiéter, les fichiers correspondants ayant absorbé sans problème les modifications venant du dépôt. Les fichiers notés U ne contenaient aucun changement local mais ont été mis à jour à partir de changements présents dans le dépôt. Le G signifie "fusionné" (merGed en anglais), ce qui veut dire que le fichier avait subi des changements localement et que les changements en provenance du dépôt ont pu être appliqués sans affecter les changements locaux.
But the next two lines are part of a feature (new in Subversion 1.5) called interactive conflict resolution. This means that the changes from the server overlapped with your own, and you have the opportunity to resolve this conflict. The most commonly used options are displayed, but you can see all of the options by typing h:
… (p) postpone - mark the conflict to be resolved later (df) diff-full - show all changes made to merged file (e) edit - change merged file in an editor (r) resolved - accept merged version of file (mf) mine-full - accept my version of entire file (ignore their changes) (tf) theirs-full - accept their version of entire file (lose my changes) (l) launch - launch external tool to resolve conflict (h) help - show this list
Mais les deux lignes suivantes font partie d'une fonctionnalité (apparue dans Subversion 1.5) appelée résolution interactive des conflits. Cela signifie que les changements du dépôt interfèrent avec les vôtres et que vous avez la possibilité de résoudre ce conflit. Les options les plus utilisées sont affichées, mais vous pouvez voir toutes les options possibles en tapant h :
… (p) report - marque ce conflit pour résolution ultérieure (df) diff-complet - montre toutes les différences du fichier fusionné (e) édite - résout manuellement le conflit avec un éditeur (r) résolu - utilise la version fusionnée (mf) mien complet - utilise ma version (ignore les autres éditions) (tf) autre complet - prends la version du dépôt (perds mes éditions) (l) lance - utilise un outil externe pour résoudre le conflit (h) aide - affiche cette liste
Let's briefly review each of these options before we go into detail on what each option means.
- (p)ostpone
- Leave the file in a conflicted state for you to resolve after your update is complete.
- (d)iff
- Display the differences between the base revision and the conflicted file itself in unified diff format.
- (e)dit
- Open the file in conflict with your favorite editor, as set in the environment variable EDITOR.
- (r)esolved
- After editing a file, tell svn that you've resolved the conflicts in the file and that it should accept the current contents—basically that you've “resolved” the conflict.
- (m)ine-(f)ull
- Discard the newly received changes from the server and use only your local changes for the file under review.
- (t)heirs-(f)ull
- Discard your local changes to the file under review and use only the newly received changes from the server.
- (l)aunch
- Launch an external program to perform the conflict resolution. This requires a bit of preparation beforehand.
- (h)elp
- Show the list of all possible commands you can use in interactive conflict resolution.
We'll cover these commands in more detail now, grouping them together by related functionality.
Regardons brièvement ce que recèle chaque option avant de les détailler :
- (p) report
- laisser le fichier en état de conflit que vous résoudrez après la fin de la mise à jour.
- (d) diff
- afficher les différences entre la révision de base et le fichier en conflit au format diff unifié.
- (e) édite
- ouvrir le fichier en conflit avec votre éditeur de texte favori, qui est spécifié dans la variable d'environnement EDITOR.
- (r) résolu
- Après édition du fichier, indiquer à svn que vous avez résolu les conflits à l'intérieur du fichier et qu'il doit accepter son contenu actuel ; en bref, vous avez résolu le conflit.
- (m) mien-complet
- ignorer les changements envoyés par le serveur et utiliser uniquement votre version locale pour le fichier concerné.
- (tf) autre complet
- ignorer vos changements sur le fichier concerné et utiliser la version envoyée par le serveur.
- (l) lance
- lancer un programme externe pour résoudre le conflit. Ceci nécessite un peu de préparation en amont.
- (h) aide
- affiche la liste de toutes les commandes que vous pouvez utiliser dans la résolution interactive des conflits.
Nous allons maintenant passer en revue chaque commande, en les classant par fonctionnalité.
Viewing conflict differences interactively
Viewing conflict differences interactively
Voir les lignes en conflit de façon interactive
Before deciding how to attack a conflict interactively, odds are that you'd like to see exactly what is in conflict, and the diff command (d) is what you'll use for this:
…
Select: (p) postpone, (df) diff-full, (e) edit,
(h)elp for more options : d
--- .svn/text-base/sandwich.txt.svn-base Tue Dec 11 21:33:57 2007
+++ .svn/tmp/tempfile.32.tmp Tue Dec 11 21:34:33 2007
@@ -1 +1,5 @@
-Just buy a sandwich.
+<<<<<<< .mine
+Go pick up a cheesesteak.
+=======
+Bring me a taco!
+>>>>>>> .r32
…
Avant de décider comment résoudre un conflit de manière interactive, il est probable que vous vouliez voir exactement les lignes en conflit. La commande diff (d) est faite pour ça :
…
Sélectionner : (p) report, (df) diff-complet, (e) édite,
(h) aide pour plus d'options : d
--- .svn/text-base/sandwich.txt.svn-base mar. Dec 11 21:33:57 2007
+++ .svn/tmp/tempfile.32.tmp mar. Dec 11 21:34:33 2007
@@ -1 +1,5 @@
-Achète-moi un sandwich.
+<<<<<<< .mine
+Va chercher un hamburger.
+=======
+Apporte moi un taco !
+>>>>>>> .r32
…
Resolving conflict differences interactively
Resolving conflict differences interactively
There are four different ways to resolve conflicts interactively—two of which allow you to selectively merge and edit changes, and two of which allow you to simply pick a version of the file and move along.
If you wish to choose some combination of your local changes, you can use the “edit” command (e) to manually edit the file with conflict markers in a text editor (determined by the EDITOR environment variable). Editing the file by hand in your favorite text editor is a somewhat low-tech way of remedying conflicts (see the section called “Merging conflicts by hand” for a walkthrough), so some people like to use fancy graphical merge tools instead.
Il y a quatre façons de résoudre un conflit avec l'interface interactive : deux d'entre elles vous permettent de fusionner et d'éditer les modifications de manière interactive, et les deux autres vous permettent simplement de choisir une version du fichier parmi celles proposées et de passer à la suite.
Si vous désirez choisir une combinaison de vos modifications locales, vous pouvez utiliser la commande "édite" (e) pour éditer manuellement le fichier avec des marqueurs indiquant les conflits dans un éditeur de texte (déterminé par la valeur de la variable d'environnement EDITOR). L'édition manuelle de ce fichier avec votre éditeur préféré peut sembler quelque peu "bas de gamme" (voir la section "Résoudre les conflits à la main" pour une description détaillée), c'est pourquoi certains préfèrent utiliser des outils graphiques plus évolués et spécialisés dans la fusion de documents.
To use a merge tool, you need to either set the SVN_MERGE environment variable or define the merge-tool-cmd option in your Subversion configuration file (see the section called “Configuration Options” for more details). Subversion will pass four arguments to the merge tool: the BASE revision of the file, the revision of the file received from the server as part of the update, the copy of the file containing your local edits, and the merged copy of the file (which contains conflict markers). If your merge tool is expecting arguments in a different order or format, you'll need to write a wrapper script for Subversion to invoke. After you've edited the file, if you're satisfied with the changes you've made, you can tell Subversion that the edited file is no longer in conflict by using the “resolve” command (r).
If you decide that you don't need to merge any changes, but just want to accept one version of the file or the other, you can either choose your changes (a.k.a. “mine”) by using the “mine-full” command (mf) or choose theirs by using the “theirs-full” command (tf).
Pour utiliser un outil de fusion, vous devez soit configurer la variable d'environnement SVN_MERGE, soit définir l'option merge-tool-cmd du fichier de configuration Subversion (voir la section "Options de Configuration" pour plus de détails). Subversion passera quatre arguments à l'outil de fusion : le fichier dans sa révision "BASE", la version du fichier envoyée par le serveur lors de la mise à jour, une copie du fichier contenant vos propres modifications et une copie fusionnée du fichier (contenant des marqueurs de conflits). Si votre outil attend les arguments dans un ordre ou un format différents, vous devrez écrire un script de transformation que Subversion appellera. Après avoir édité le fichier, si vous êtes satisfait de vos changements, vous pouvez indiquer à Subversion que le fichier n'est plus en conflit en utilisant la commande "résolu" (r).
Si vous décidez qu'il n'y a pas lieu d'effectuer de fusion, et si choisir l'une ou l'autre des versions proposées du fichier vous convient, vous pouvez soit opter pour vos changements (i.e. "mon fichier") en utilisant la commande "mien complet" (mf) ou opter pour la version des autres collaborateurs en utilisant la commande "autre complet" (tf).

