En utilisant TortoiseSVN, comment fusionner les changements du tronc vers une branche et vice versa?

132

J'ai lu sur le branchement / fusion avec Subversion 1.5 en utilisant l'excellent livre gratuit Contrôle de version avec Subversion . Je pense que je comprends comment utiliser le client de ligne de commande Subversion pour effectuer les actions dont j'ai le plus souvent besoin, à savoir:

Mettre à jour la branche avec les modifications du 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 tronc

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

svn merge - réintégrer http://svn.myurl.com/proj/branches/mybranch

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

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

D'après ce que je peux comprendre, 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 qu'elle ne peut donc pas continuer, et j'ai donc dû utiliser l'option n ° 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 dois-je utiliser pour chacune et pourquoi?

ÉDITER

Grâce à des tests «à vide», j'ai constaté que l'opération Subversion en ligne de commande

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

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

Ryan Taylor
la source
Les liens n'ont pas été trouvés! = /
Leonardo Costa

Réponses:

28

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. fusion sourceWCPATH1 @ N sourceWCPATH2 @ M [WCPATH]
  3. fusionner [-c M [, N ...] | -r N: M ...] SOURCE [@REV] [WCPATH]
  4. merge --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 activent 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 1.5+ ou à la méthode un 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 avec une branche parente (généralement un tronc) 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 lorsque vous voulez sortir du comportement de branchement normal. (Par exemple, comparer différentes versions, puis fusionner la différence avec une autre branche)

Bert Huijben
la source
quelqu'un pourrait-il m'aider s'il vous plaît avec stackoverflow.com/questions/51657636/… . C'est une question importante pour notre équipe, nous avons besoin d'idées autour d'elle.
ankur
249

Je n'ai pas pu suivre correctement les autres réponses, voici plus un guide des nuls ...

Vous pouvez le faire dans les deux sens pour aller trunk -> branchou branch -> trunk. Je règle toujours d'abord trunk -> branchles conflits là-bas, puis je fusionne branch -> trunk.

Fusionner le tronc dans une branche / étiquette

  1. Vérifier la branche / étiquette
  2. Faites un clic droit sur la racine de la branche | Tortoise SVN | Fusionner ...
  3. Type de fusion: fusionne une plage de révisions | Cliquez sur Suivant' entrez la description de l'image ici
  4. Fusionner la plage de révision: sélectionnez l'URL du répertoire de lignes réseau que vous avez copié dans la branche / la balise. Entrez les révisions à fusionner ou laissez le champ vide pour fusionner toutes les révisions | cliquez sur Suivant' entrez la description de l'image ici
  5. Options de fusion: je viens de les laisser par défaut | cliquez sur "Fusionner" entrez la description de l'image ici
  6. Cela fusionnera les révisions dans la branche / balise extraite
  7. Puis validez les modifications fusionnées dans la branche / la balise
icc97
la source
4
J'ai laissé de côté "Plage de révision à fusionner" et j'ai fait un "Test de fusion". C'était ce dont j'avais besoin: la plage était automatiquement définie pour moi (à partir du moment où la branche a été faite jusqu'à la dernière révision de la branche)
Lian
Excellente réponse - concise et facile à suivre. Cela a fonctionné pour moi, mais quand je voulais juste fusionner un seul fichier de configuration, pour une raison quelconque, j'ai dû le faire deux fois. Tout va bien maintenant. Cheers
Ailier
@Lian J'ai fait la même chose pour fusionner du tronc en branche; laissez la plage de révision vide si vous souhaitez que la dernière version des fichiers du tronc soit fusionnée avec les fichiers de branche.
Ailier
2
La version actuelle de Tortoise SVN a maintenant une option pour fusionner toutes les révisions au lieu de laisser la plage de révision vide à l'étape 4.
The Unknown Dev
1
@Onkar Certains conflits se produiront presque toujours. Si vous avez deux branches, par exemple trunket branch, alors en vous assurant de fusionner les modifications de trunkà branchdès que possible, vous éviterez autant que possible les conflits. Cela signifie que lors de la fusion branchà trunkne devrait pas y avoir de conflits.
icc97
12

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

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

La même chose dans le sens inverse pour fusionner une branche dans le tronc.

À propos de l'indicateur --reintegrate, consultez le manuel ici: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html#tsvn-dug-merge-reintegrate

Davide Gualano
la source
1

Jetez un œ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 permettra de fusionner les modifications, mais elle ne se "souvient" pas de ce que vous avez déjà fusionné. Il ne fournit pas non plus un moyen pratique d'exclure un ensemble de modifications de la fusion. svnmerge.py automatise une partie du travail et le simplifie. Svnmerge crée également un message de validation avec les messages de journal de toutes les choses qu'il a fusionnées.

Liudvikas Bukys
la source
6
svnmerge.py a été développé sur Subversion 1.4 et versions antérieures. Subversion 1.5 a introduit le suivi des fusions dans le produit principal.
Bert Huijben
0

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

Denis
la source