Obstacles à l'utilisation de Git Flow dans Subversion

10

Mon équipe au travail démarre un nouveau projet, en utilisant Subversion comme VCS (vous pouvez considérer cet ensemble dans la pierre aux fins de cette question). Nous en sommes encore aux premières étapes du projet et essayons de nous mettre d'accord sur un modèle de branchement. Notre projet précédent était basé sur un modèle de version non standard qui entraînait des problèmes lors de la gestion des correctifs et correctifs des versions existantes.

J'ai trouvé différents modèles de branchement assez compliqués, mais un modèle que je comprends assez clairement est git flow . Je suis curieux de voir à quel point il serait difficile / indésirable d'implémenter une variante de cela dans Subversion. De toute évidence, il y aurait une certaine différence en termes de personnes collaborant dans les succursales. Les branches de fonctionnalités devraient être centralisées plutôt que limitées aux référentiels locaux, mais les autres concepts du modèle devraient être reproductibles dans Subversion si je comprends bien.

Quels seraient les inconvénients ou les défis de cette approche. Ce que j'ai entendu, c'est que dans SVN "la fusion coûte cher" par rapport à Git. Mais je ne suis pas tout à fait clair sur ce que cela signifie dans la pratique ou comment cela affecterait notre capacité à utiliser un modèle de branchement de type Git Flow.

Quelles seraient les plus grandes préoccupations avec cette approche. Existe-t-il une approche tout aussi claire et plus naturelle dans Subversion?

Ben McCormick
la source

Réponses:

12

Gitflow est basé sur les meilleures pratiques de versioning et de branchement de code source. Un très bon article à ce sujet est Advanced SCM Branching Strategies

Le point soulevé par Vance dans l'article lié est que les différentes branches ont des rôles différents . Il identifie les rôles de:

  1. Mainline (toutes les succursales d'ici)
  2. Développement (où le travail de développement est effectué)
  3. Maintenance (où les travaux de maintenance sont effectués)
  4. Accumulation (Rassembler les choses en vue de la sortie)
  5. Empaquetage (empaquetant la construction pour la version)

Dans gitflow, ce sont:

  1. Développer
  2. branches caractéristiques
  3. Branches de correctifs
  4. Libérer les branches
  5. Maître

L'article sur la ramification a été écrit en pensant à Perforce. Perforce est un VCS centralisé, tout comme svn. Les modèles de branchement qu'il décrit correspondent parfaitement à svn.

La clé à réaliser est que ce n'est pas comment gitflow est porté sur svn, mais plutôt comment appliquer les mêmes concepts fondamentaux de branchement et les rôles des branches à différentes structures VCS.

Je recommanderais fortement la lecture de l'article, je ne peux pas lui faire grand cas. La façon dont les choses sont décrites ici est basée sur une philosophie de construction trunk / mainline à laquelle vous trouverez facilement le mappage de svn.


la source
1
Revenir aux idées menant la conception de gitflow est une amélioration intelligente de la question d'origine!
user40989
@ user40989 Je ne sais pas si Vincent Driessen (nvie) a lu l'article ou non qui a mis en avant ce concept de branchement, ou s'il l'a redécouvert par lui-même. Quoi qu'il en soit, la reconnaissance des rôles nécessaires pour un flux de travail à travers le contrôle de version permet de voir facilement les similitudes entre les approches et les meilleures pratiques.