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 ?
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 ?
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).
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. :)
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 ?
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 .
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.
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
Seuls les logs sont différents. Le journal sur la branche sera plus détaillé, contenant le véritable auteur par exemple.
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).
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.
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.