Question

A l'entreprise où je travaille pour gérer notre code source que nous utilisons la subversion et TortoiseSVN. Chaque projet est dérivé du tronc. Lorsque nous avons besoin d'intégrer les différents projets pour une version, nous créons une branche de libération qui contient le code qui sera intégré, testé et déployé à la production. En général, nous avons une seule branche de sortie.

Récemment, cependant, certains des éléments dans l'un des projets a été retardé et ont été programmés pour entrer dans la prochaine version. En conséquence, une personne a demandé que soit créé une deuxième branche de sortie pour maintenir les modifications retardées et les empêcher de se fusionner dans la version actuelle.

Jusqu'à présent, cela nous a causé beaucoup de chagrin et beaucoup de conflits d'arbres depuis quelques éléments de la branche de sortie future dépendent des éléments dans la branche de la version actuelle. La seule façon que nous avons pu résoudre ces problèmes était d'attendre que la version actuelle a été déployée, fusionner la branche de libération dans le coffre, fusionner le tronc dans la branche de future version, puis fusionner les changements de branche de projet dans la branche de sortie future .

En raison de ce problème, nous avons dû recommander que nous ne devrions jamais avoir plus d'une branche de sortie, car il provoque la fusion des problèmes.

Cependant, je me demande si cela est la bonne façon d'aller. Est-ce que quelqu'un sait s'il est possible de gérer les branches de libération multiples dans la subversion? Certes, il doit être possible de gérer des fonctionnalités qui sont retardés sans compromettre sa capacité à faire des fusions.

Quelqu'un là-bas ont une expérience en ce qui concerne le scénario que je vous ai présenté que vous seriez prêt à partager? Je voudrais savoir comment je peux améliorer la façon dont les rejets sont gérés à mon lieu de travail si cela ne se reproduise pas.

Était-ce utile?

La solution

Pour être honnête, je ne suis pas tout à fait sûr comment votre système fonctionne à partir de la description. Cependant, je l'ai eu à gérer des projets avec plusieurs versions live dans le passé. La façon dont nous avons fait était:

  1. Rien n'est libéré qui n'est pas dans le coffre d'abord.
  2. Chaque version reçoit sa propre branche de version.
  3. La seule façon de mettre à jour une branche de version est de fusionner à partir du tronc.

De cette façon, nous pourrions cerise chercher des fonctionnalités qui étaient dans la version. L'utilisation de suivi de fusion, il nous a également laissé construire une page Web qui nous a montré graphiquement ce qui se passait où.

L'essentiel est d'avoir une branche totalement intégrée, vous pouvez choisir de -. C'est ma définition du tronc

Ce n'est pas un système parfait. Si vous versions sauté, puis dépendances a rendu les choses difficiles, et nous avons vraiment besoin de la chose graphique pour nous montrer ce qui était là, mais semblait globalement bien fonctionner.

Voir aussi ma réponse .

Autres conseils

Ce n'est pas là où excelle la tortue. Pour ce faire, des scénarios de fusion complexes et la branche dont vous avez besoin quelque chose comme spécification de configuration Clearcase pour faire votre contrôle de version.

Si vous utilisez la tortue que vous souhaitez conserver le meilleur tronc ainsi, puis soit exécuter l'intégration continue sur le tronc, ou pour créer des branches pour chaque fonction, les réinsèrent lorsque le développement de fonctionnalités est terminée. Si vous faites cela, alors vous n'aurez le code sur le tronc qui est testé. Ensuite, vous choisissez un point de sortie, faites votre intégration et ramener nécessaires dans votre coffre fixe, mais permet également à vos équipes de poursuivre leur développement.

Je pense que vous voulez suivi de fusion, soit par svnmerge.py, soit par la fusion de Subversion suivi builtin 1.5. Cela vous permet de bloquer certains changements d'être fusionnés dans une branche, ce qui pourrait alors se faire à tous les changements liés aux fonctionnalités que vous souhaitez seulement d'intégrer dans la prochaine version.

Vous voulez presque toujours des changements sur la première branche retardée d'être présent en deuxième position. Ainsi, la deuxième branche de sortie devrait être de la première branche de sortie, et les changements de la première devrait périodiquement être fusionné vers le haut. Idéalement par les mêmes personnes qui les ont fait en premier lieu.

Spepladder ramification fonctionne bien dans ce cas (?) -. Simplement abandonner le tronc et monter

Mon entreprise a eu des problèmes similaires.

Nous avions retarder un projet d'une version - nous l'appellerons 2.0 - plusieurs mois. Entre-temps, nous avons eu des problèmes de production sur la branche actuelle - que nous appellerons 1,5 - qui justifiait plus les rejets. Nous ne pouvions pas utiliser le tronc, car il avait les traits frappés d'embargo, nous avons donc commencé la ramification des branches. Notre version 1.6 ramifié de 1,5, pas de coffre. Autre que la convention nommant le 1.6 version est vraiment rien de plus que 1.5.1. Étant donné que c'est SOP pas, nous avons été très prudent de documenter ce que nous faisons.

Je ne suis pas impatient au point de fusion, où nous apportons enfin ensemble la branche 1.6 et 2.0. Nous ne pouvons pas fusionner les modifications sur 1,6 retour sur tronc ou 2.0, parce que tout simplement fait QA sur les problèmes 2.0 pis. Nous courons Subversion 1.4.6, donc aucune aide du logiciel -. Ce sera tout fusion manuelle

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