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 merge — Appliquer les différences entre deux sources à une copie de travail.

Synopsis

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]

Description

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.

  • 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] Astuce

    Plusieurs -c et -r peuvent être spécifiés, de même que vous pouvez mélanger des intervalles croissants et des intervalles décroissants (les intervalles sont compactés en interne à leur représentation minimum avant que la fusion ne commence, ce qui conduire à ce qu'il n'y ait pas de fusion ou des confilts qui arrêtent l'opération avant que toutes les révisions demandées ne soient fusionnées).

  • 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] Astuce

L'option --ignore-ancestry fera en sorte que Suivi de fusions soit désactivé et effectuera la fusion comme svn diff, ignorant la généalogie des fichiers pour calculer la fusion.

Options

Exemples

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