web-dev-qa-db-fra.com

Comment utiliser TortoiseSVN pour fusionner les modifications du tronc en une branche et inversement

J'ai lu des articles sur la création de branches/la fusion avec Subversion 1.5 en utilisant l'excellent et gratuit Contrôle de version avec Subversion book. Je pense comprendre comment utiliser le client de ligne de commande Subversion pour effectuer les actions dont j'ai le plus souvent besoin, à savoir:

Mise à jour de la branche avec les modifications apportées au tronc

À partir du répertoire de travail de la branche, exécutez: 

svn merge http://svn.myurl.com/proj/trunk

Fusionner la branche dans le coffre

À partir du répertoire de travail du coffre, exécutez:

svn merge --reintegrate http://svn.myurl.com/proj/branches/mybranch

Cependant, nous utilisons TortoiseSVN 1.5 comme interface avec Subversion. Je voudrais savoir comment mieux effectuer ces opérations avec TortoiseSVN. La nouvelle boîte de dialogue propose trois options différentes dans le menu principal. 

  1. Fusionner une gamme de révisions
  2. Réintégrer une branche
  3. Fusionner deux arbres différents

D'après ce que je peux en déduire, TortoiseSVN exécute toujours svn avec la syntaxe suivante.

svn merge [--dry-run] --force From_URL @ revN To_URL @ revM PATH

De plus, la réintégration d'une branche échoue souvent avec un message indiquant que certaines cibles n'ont pas été fusionnées et ne peuvent donc pas continuer. J'ai donc dû utiliser l'option 3.

Mes questions sont:

  1. Comment utiliser TortoiseSVN 1.5 pour fusionner les modifications du tronc vers une branche?
  2. Comment utiliser TortoiseSVN 1.5 pour fusionner la branche avec le tronc, avec et sans la méthode de réintégration?
  3. Laquelle des options ci-dessus devrais-je utiliser pour chacune, et pourquoi?

MODIFIER

Lors de tests "à sec", j'ai constaté que l'opération de subversion en ligne de commande

svn merge http://svn.myurl.com/proj/trunk

est analogue à l'option n ° 1 (Fusionner une plage de révisions) dans TortoiseSVN, tant que je laisse la plage de révision vierge.

128
Ryan Taylor

Le comportement dépend de la version de votre référentiel. Subversion 1.5 permet 4 types de fusion:

  1. fusionner sourceURL1 [@N] sourceURL2 [@M] [WCPATH]
  2. fusionner sourceWCPATH1 @ N sourceWCPATH2 @ M [WCPATH]
  3. fusionner [-c M [ N ...] | -r N: M ...] SOURCE [@REV] [WCPATH]
  4. fusion --reintegrate SOURCE [@REV] [WCPATH]

Subversion avant 1.5 n'autorisait que les 2 premiers formats.

Techniquement, vous pouvez effectuer toutes les fusions avec les deux premières méthodes, mais les deux dernières permettent le suivi des fusions de Subversion 1.5.

Les options de TortoiseSVN fusionnent une plage ou des révisions mappées à la méthode 3 lorsque votre référentiel est supérieur à 1,5 ou à la méthode 1 lorsque votre référentiel est plus ancien.

Lors de la fusion de fonctionnalités vers une branche de version/maintenance, vous devez utiliser la commande "Fusionner une plage de révisions". 

Ce n'est que lorsque vous souhaitez fusionner toutes les fonctionnalités d'une branche en une branche parente (généralement une ligne principale) que vous devriez envisager d'utiliser 'Réintégrer une branche'.

Et la dernière commande, Fusion de deux arbres différents, n’est utile que si vous souhaitez sortir du comportement de branchement normal. (Par exemple, comparer différentes versions puis fusionner la différence avec une autre branche)

28
Bert Huijben

Je ne pouvais pas bien suivre les autres réponses, voici plus d'un guide pour les nuls ... 

Vous pouvez faire cela dans les deux sens pour utiliser trunk -> branch ou branch -> trunk. Je commence toujours par trunk -> branch à résoudre les conflits, puis à fusionner branch -> trunk.

Fusionner le tronc dans une branche/un tag

  1. Commander la branche/tag
  2. Faites un clic droit sur la racine de la branche | Tortue SVN | Fusionner ...
  3. Type de fusion: Fusionner une plage de révisions | Cliquez sur Suivant'enter image description here
  4. Fusionner la plage de révision: Sélectionnez l'URL du répertoire de lignes que vous avez copié dans la branche/balise. Entrez les révisions à fusionner ou laissez le champ vide pour fusionner toutes les révisions | cliquez sur Suivant'enter image description here
  5. Options de fusion: Je viens de les laisser par défaut | cliquez sur 'Fusionner' enter image description here
  6. Cela va fusionner les révisions dans la branche/balise extraite
  7. Puis validez les modifications fusionnées dans la branche/balise
242
icc97

Vous devriez utiliser "fusionner une plage de révision".

Pour fusionner les modifications du tronc en une branche, dans la copie de travail de la branche, choisissez "fusionner la plage de révisions" et entrez l'URL de la ligne ainsi que les révisions de début et de fin à fusionner.

La même chose dans le sens opposé pour fusionner une branche dans le coffre.

Pour le drapeau --reintegrate, consultez le manuel ici: http://tortoisesvn.net/docs/release/TortoiseSVN_fr/tsvn-dug-merge.html#tsvn-dug-merge-reintegrate

11
Davide Gualano

Jetez un coup d'œil à svnmerge.py . C'est en ligne de commande, ne peut pas être invoqué par TortoiseSVN, mais c'est plus puissant. De la FAQ :

La subversion traditionnelle vous laissera fusionner les modifications, mais pas "souviens-toi" de ce que tu as déjà fusionné . Il ne fournit pas non plus une solution pratique moyen d'exclure un jeu de modifications d'être fusionné. svnmerge.py automatise une partie de le travail, et le simplifie. Svnmerge crée également un message de validation avec le enregistrer les messages de toutes les choses qu'il fusionné.

1
Liudvikas Bukys

Maj-clic droit sur le dossier et sélectionnez TortoiseSVN -> Fusionner tout

0
Denis