69 votes

Réintégration des branches de Subversion

Lorsqu'une branche est réintégrée au tronc, cette branche est-elle effectivement morte ?

Pouvez-vous apporter des modifications à la branche après la réintégration et les fusionner à nouveau dans le tronc à une date ultérieure ?

0 votes

Je suppose que vous devriez réviser la réponse acceptée car elle n'est plus vraie. Le problème n'existe pas dans les clients Subversion modernes.

80voto

Pini Reznik Points 1099

Vous pouvez le faire techniquement, votre branche n'est pas morte ni désactivée, mais il n'est pas recommandé de fusionner de la branche au tronc après la réintégration.

Vous pouvez trouver une discussion complète sur la raison de cela, ici : Subversion fusionner réintégrer

En gros, cela signifie qu'il est possible de fusionner à nouveau vos modifications dans le tronc, mais comme la réintégration vous oblige à fusionner du tronc à la branche avant l'opération de réintégration, vous serez confronté à la fusion réfléchie/cyclique qui est très problématique dans Subversion 1.5.
Selon l'article, il est recommandé de supprimer votre branche réintégrée immédiatement après la réintégration et d'en créer une nouvelle avec le même nom (ou un nom différent) à la place.

Il s'agit d'un comportement connu de Subversion qui sera traité dans une prochaine version (probablement dans la 1.6).


13 votes

Quelqu'un sait-il si le problème de réintégration a été résolu dans Subversion 1.6 ?

13 votes

J'ai abordé la question de svn v1.6 dans la section stackoverflow.com/questions/3309602 . La version courte : Oui, vous pouvez réintégrer plusieurs fois. :)

0 votes

Pini, votre lien vers "Subversion merge reintegrate" semble être cassé ou au moins nécessiter une certaine authentification à collabnet. Savez-vous si l'article est accessible ailleurs sans authentification ?

19voto

krico Points 2368

En fait, vous devez faire un --record-only fusionner depuis le tronc dans votre branche de la révision qui a été créée par la commande --reintegrate commettre :

$ cd trunk
$ svn merge --reintegrate ^my-branch 
$ svn commit

Committed revision 555. 
# This revision is ^^^^ important

Et maintenant vous l'enregistrez

$ cd my-branch
$ svn merge --record-only -c 555 ^trunk 
$ svn commit

Vous êtes heureux de garder la branche maintenant

Plus d'informations sont disponibles dans Chapitre 4. Branchement et fusion, fusion avancée .

0 votes

La réponse est dépassée.

8voto

JW. Points 17361

Après avoir réintégré une branche dans le tronc, vous devez faire l'une des deux choses suivantes :

  • Supprimer votre branche . C'est le plus simple, mais il est plus difficile de voir l'historique de la branche.

  • Dites à votre branche de ne pas fusionner le commit de reintegrate . Si vous réintégrez le tronc, et le commitez en tant que révision X, vous pouvez exécuter cette commande sur votre branche : svn merge --record-only -c X url-to-trunk . Cependant, vous ne devriez pas faire cela si vous avez fait des changements dans le cadre de la livraison, autres que la fusion elle-même. Toute autre modification ne sera jamais répercutée dans votre branche.

4voto

Mauli Points 4397

Quelques conseils sur la fusion des modifications si quelqu'un apporte des modifications à la branche plusieurs fois (avant 1.5) : Rappelez-vous à quelle révision vous avez fait la fusion ! Soit vous notez les numéros de révision quelque part, o (ce qui est plus facile) faire une étiquette . (Vous pouvez bien sûr le découvrir plus tard, mais c'est un PITA).

Ejemplo:

Vous avez une disposition du référentiel comme ceci :

/your_project
  /trunk
  /branches
  /tags

Disons qu'il s'agit d'une application web, et que vous avez prévu de faire une version. Vous créerez une étiquette, et à partir de celle-ci (ou du tronc) une branche dans laquelle vous effectuerez les corrections de bogues :

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0

En procédant ainsi, vous pouvez intégrer les nouvelles fonctionnalités dans le tronc. Toutes les corrections de bogues se produiraient uniquement dans la branche de correction de bogues et avant chaque version, vous faites un tag de la version actuelle (maintenant de la branche de correction de bogues).

Supposons que vous ayez corrigé un certain nombre de bogues et que vous les ayez publiés sur le serveur de production, et que vous ayez désespérément besoin d'une de ces fonctionnalités dans le tronc actuel :

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2

Vous pouvez maintenant simplement intégrer les changements entre 1.0.0 et 1.0.2 dans votre tronc (en supposant que vous êtes dans votre copie de travail) :

svn merge http://rep/your_project/tag/1.0.0 http://rep/your_project/tag/1.0.2 .

Voici ce que vous devez retenir. Vous avez déjà fusionné les changements entre 1.0.0 et 1.0.2 sur le tronc. Supposons qu'il y ait plus de changements dans la version de production actuelle :

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4

Vous êtes maintenant prêt à publier la nouvelle version à partir du tronc, mais les dernières modifications de vos corrections de bogues sont encore manquantes :

svn merge http://rep/your_project/tag/1.0.2 http://rep/your_project/tag/1.0.4 .

Maintenant, vous avez todo Les changements sont fusionnés sur votre tronc, et vous pouvez faire votre version (n'oubliez pas de la tester d'abord).

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
    /1.1.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4
    /1.1.0

2voto

Ben Hoffstein Points 44398

Non, la branche est toujours vivante, mais, à ce moment-là, elle est exactement la même que le tronc. Si vous continuez à développer sur la branche, vous êtes libre de fusionner à nouveau avec le tronc plus tard.

2 votes

Seuls les logs sont différents. Le journal sur la branche sera plus détaillé, contenant le véritable auteur par exemple.

2 votes

Veuillez consulter la réponse de Pini Reznik et l'article qui y est référencé pour connaître la raison pour laquelle vous devriez no continuer à utiliser la branche (même si c'est techniquement possible).

3 votes

Sérieusement, ne le fais pas. Ça va te causer un monde de douleur. Supprime la branche, recrée-la. Je vous enverrai un bocal scellé de mes larmes de chagrin d'il y a deux semaines si vous ne me croyez pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X