Question

Lorsqu'une branche est réintégrée dans le coffre, cette branche est-elle effectivement morte?

Pouvez-vous apporter des modifications à la branche après la réintégration et les réintégrer ultérieurement dans le coffre?

Était-ce utile?

La solution

Vous pouvez le faire techniquement, votre branche n’est ni morte ni désactivée, mais il est déconseillé de fusionner d’une branche à une autre après la réintégration.

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

En gros, il est possible de fusionner à nouveau vos modifications dans le tronc, mais comme la réintégration vous oblige à fusionner d'un tronc à l'autre avant l'opération de réintégration, vous serez confronté à une fusion réflexive / cyclique, ce qui est très problématique. dans Subversion 1.5.
Selon cet 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 portant le même nom (ou un nom différent).

Il s'agit d'un comportement connu de Subversion qui sera traité dans les versions futures (probablement dans la version 1.6)

Autres conseils

En fait, vous devez effectuer une fusion - enregistrement uniquement à partir du tronc dans votre branche de la révision créée par la validation - reintegrate :

$ 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 succursale maintenant

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

Après avoir réintégré une branche dans le coffre, effectuez l'une des opérations suivantes:

  • Supprimer votre branche . C’est la solution la plus simple, mais il est plus difficile de consulter l’historique de la branche.

  • Parler votre branche ne doit pas fusionner le commit de réintégration . Si vous réintégrez le tronc et le validez en tant que révision X, vous pouvez exécuter cette commande sur votre branche: svn merge --record-only -c X url-tronc . Toutefois, cela ne devrait pas être le cas si vous apportez des modifications dans le cadre du commit, autres que la fusion elle-même. Toute autre modification ne sera jamais rétablie dans votre branche.

Quelques conseils sur la fusion des modifications si quelqu'un modifiait la branche plusieurs fois (avant la 1.5): N'oubliez pas à quelle révision vous avez effectué la fusion ! Notez les numéros de révision quelque part, ou (ce qui est plus facile) créez une balise . (Vous pouvez bien sûr le découvrir plus tard, mais c'est un PITA.)

Exemple:

Vous avez une structure de référentiel comme celle-ci:

/your_project
  /trunk
  /branches
  /tags

Supposons qu’il s’agit d’une application Web et que vous avez prévu de créer une version. Vous créeriez une balise, et à partir de celle-ci (ou du tronc) une branche dans laquelle vous faites les corrections de bugs:

/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 coffre. Toutes les corrections de bogues ne se produiraient que dans la branche correctif et avant chaque version, vous créez une balise de la version actuelle (à partir de la branche correctif).

Supposons que vous avez corrigé un grand nombre de corrections de bogues et les avez publiées sur le serveur de production et que vous avez désespérément besoin de l'une de ces fonctionnalités dans le coffre 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 coffre (en supposant que vous soyez dans votre copie de travail):

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

C’est ce dont vous devez vous souvenir. Vous avez déjà fusionné les modifications apportées 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 de trunk, mais les dernières modifications de vos corrections de bugs sont toujours manquantes:

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

Vous avez maintenant tous les modifications fusionnées sur votre coffre et vous pouvez effectuer votre libération (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

Comme tout le monde l’a déjà dit ici: la branche n’est pas morte et s’engage auprès de la branche peut continuer sans problème.

Parfois, vous souhaitez supprimer la branche après la fusion. La seule solution fiable consiste à supprimer la branche. L'inconvénient est qu'il est alors plus difficile de retrouver la succursale si vous souhaitez l'examiner, par exemple pour des raisons historiques. Ainsi, beaucoup de gens quittent le " important " branches qui traînent et avoir un accord de ne pas les changer. J'aimerais qu'il y ait un moyen de marquer une branche morte / en lecture seule, afin que personne ne puisse s'y engager jusqu'à nouvel ordre.

Non, la branche est toujours en vie, mais, à ce moment, elle est exactement la même chose que le tronc. Si vous continuez à développer sur la branche, vous êtes libre de re-fusionner ultérieurement avec le tronc.

Vous pouvez fusionner autant de fois que vous le souhaitez d'une branche à une autre ou d'une branche à une autre.

Tout d’abord, vous devez mettre à niveau votre client et votre serveur Subversion si vous utilisez toujours Subversion 1.7 ou une version antérieure. Il n'y a aucune raison d'utiliser de très anciennes versions de Subversion. À partir de 2016, la version actuelle est Subversion 1.9. SVN 1.8 est également pris en charge maintenant et reçoit toujours des corrections de bugs.

Le problème que vous posez a été résolu dans Subversion 1.8. À compter de SVN 1.8, l'option - Réintégrer a été obsolète . La réintégration des fusions est maintenant effectuée automatiquement . Voir Notes de version de Subversion 1.8 liées à l'amélioration .

À lire SVNBook 1.8 | Réintégration d'une branche :

  

Si vous choisissez de ne pas supprimer votre branche après sa réintégration dans le   tronc, vous pouvez continuer à effectuer des fusions de synchronisation à partir du tronc, puis   réintégrer la branche à nouveau. Si vous faites cela, seules les modifications effectuées sur   vos branches après la première réintégration sont fusionnées avec le tronc.

     

...

     

Seule Subversion 1.8 prend en charge cette réutilisation d’une branche de fonctionnalité. Plus tôt   versions nécessitent une manipulation spéciale avant qu'une branche de fonctionnalité puisse être   réintégré plus d'une fois. Voir la version précédente de ce chapitre   pour plus d'informations:    http://svnbook.red -bean.com/fr/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate

Lorsque vous effectuez une fusion, vous spécifiez la cible. Vous pouvez fusionner les différences de TreeA et TreeB en TreeC si vous le souhaitez. Comme Chris l’implique, votre question n’a pas vraiment de sens. Si vous fusionnez votre branche dans le coffre, la branche reste intacte. Si la branche n’est plus nécessaire par la suite, vous pouvez la supprimer.

Vous pouvez continuer à développer sur la branche. La fonctionnalité dont vous aurez besoin est suivi de fusion qui se trouve dans Subversion 1.5, cela signifie que les fusions supplémentaires à partir de la branche incluent uniquement les nouvelles modifications.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top