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 merge — Appliquer les différences entre deux sources à une copie de travail.
svn merge SOURCE[@REV] [CIBLE_COPIE_TRAVAIL]
svn merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [CIBLE_COPIE_TRAVAIL]
svn merge SOURCE1[@N] SOURCE2[@M] [CIBLE_COPIE_TRAVAIL]
Dans les trois formes,
CIBLE_COPIE_TRAVAIL
désigne le chemin de
la copie de travail qui reçoit les différences. Si vous omettez
CIBLE_COPIE_TRAVAIL
, les modifications
sont appliquées dans le répertoire de travail courant, à moins que
les sources n'aient un nom de répertoire identique qui correspond à
un nom de fichier dans le répertoire courant. Dans ce cas, les
différences sont appliquées à ce fichier.
Dans les deux première formes,
SOURCE
peut être soit une URL, soit une
copie de travail (dans ce cas, l'URL correspondante est utilisée).
Si la révision pivot REV
n'est pas
spécifiée, alors HEAD
est pris par défaut. Dans
la troisième forme, les mêmes règles s'appliquent pour
SOURCE1
,
SOURCE2
,
M
et
N
avec pour seule différence que si une
source est un chemin de la copie de travail, alors la révision pivot
doit être spécifiée explicitement.
Fusions automatiques
La première forme est appelée « fusion
automatique » et est utilisée pour effectuer des fusions de
« synchronisation » et
« réintégration ». Les fusions de
« synchronisation » fusionnent les modifications
éligibles vers une branche
(CIBLE_COPIE_TRAVAIL
) depuis la
branche ancêtre (SOURCE
). Les
modifications « éligibles » sont définies comme celles
qui n'ont pas déjà été fusionnées à partir de
SOURCE
vers
CIBLE_COPIE_TRAVAIL
. Lisez
la section intitulée « Garder une branche synchronisée » pour
une explication en profondeur.
Les fusions de « réintégrations » consistent à
fusionner les modifications faites sur une branche fonctionnelle
(SOURCE
) en retour vers la branche
ancêtre (CIBLE_COPIE_TRAVAIL
). Lisez
la section intitulée « Réintegration d'une branche » et
la section intitulée « Branches fonctionnelles » pour les
explications.
Fusions avec sélection à la main
La deuxième forme est appelée une fusion avec
« sélection à main »
(cherry-pick en anglais) et est
utilisée pour fusionner un ensemble explicite de modifications
d'une branche vers une autre. SOURCE
dans la révision REV
est comparée à
ce qu'elle était entre les révisions N
et M
pour chaque intervalle de
révisions spécifié. Voir la section intitulée « Sélection à la main » pour plus de
précisions.
Astuce | |
---|---|
Plusieurs |
Fusions à deux URL
Dans la troisième forme, appelée « fusion à deux 2
URL », les différences entre
SOURCE1
à la révision
N
et
SOURCE2
à la révision
M
sont calculées et appliquées à
CIBLE_COPIE_TRAVAIL
. Les révisions
par défaut sont HEAD
si elles sont
omises.
Si Suivi de fusions
est actif, alors Subversion conserve des métadonnées traçant les
opérations de fusion (la propriété svn:mergeinfo
)
quand les deux sources sont reliées par un ancêtre commun (si la
première source est un ancêtre de la deuxième ou vice-versa). Ce
comportement est garanti lorsqu'il s'agit d'une fusion automatique.
Subversion prendra soin de vérifier les métadonnées déjà existantes
de la cible dans la copie de travail pour déterminer quelles
révisions doivent être fusionnées et ainsi éviter d'appliquer
plusieurs fois des modifications.
Contrairement à svn diff, la commande de fusion prend en compte la généalogie d'un fichier pour calculer ce qu'il faut faire. C'est particulièrement important lorsqu'il s'agit de fusionner des modifications d'une branche vers une autre alors que vous avez renommé un fichier dans une branche mais pas dans l'autre.
Astuce | |
---|---|
L'option |
Réintègrer une branche vers le tronc, en considérant que la copie
de travail du tronc est à jour, l'option --verbose
affichant des informations complémentaires sur ce que fait la fusion
avant d'appliquer réellement les différences ; c'est utile
lors des grosses opérations qui peuvent prendre un certain
temps :
$ svn merge ^/branches/branche-améliorations-calc trunk --verbose checking branch relationship... calculating automatic merge... --- Merging --- Fusion de r12 à r37 dans 'trunk': U trunk/calc/brosse.c --- Stockage des informations de fusion (mergeinfo) de r12 à r37 dans 'trunk': U trunk $ # compilation, tests, vérifications ... $ svn commit trunk -m "Réintégration des améliorations de calc dans le tronc !" Envoi trunk Envoi trunk/calc/brush.c Transmission des données . Révision 38 propagée.
« Sélectionner à la main » une simple modification sur un fichier :
$ svn merge ^/trunk/calc/brosse.c branches/1.x/calc/brosse.c -c38 --- Fusion de r38 dans 'branches/1.x/calc/brosse.c': U branches/1.x/calc/brosse.c --- Stockage des informations de fusion (mergeinfo) de r38 dans 'brosse.c': G branches/1.x/calc/brosse.c
Fusionner les différences entre deux branches sans relations dans une troisième branche :
$ svn merge ^/vendor-drop/vendor-1.0 ^/vendor-drop/vendor-1.1 \ trunk --ignore-ancestry --- Fusion des différences des URLs du dépôt vers 'trunk' : U trunk/draw/draw.py