Exemple concret
Dans une même équipe, il n’est pas rare de voir coexister plusieurs stratégies de branching, chacune adaptée à un produit spécifique.
Par exemple, une application métier critique avec plusieurs versions maintenues peut suivre un modèle proche de Git Flow, avec des branches feature, release et hotfix, afin de sécuriser les mises en production, organiser les phases de validation et gérer les correctifs en parallèle. Ce cadre apporte de la visibilité et du contrôle sur des cycles de livraison plus longs. Ce type d’organisation devient particulièrement pertinent dès lors que plusieurs versions doivent coexister et être maintenues dans le temps.
À l’inverse, lorsqu’une application ne maintient qu’une seule version active en production, un modèle plus simple comme release branches only peut suffire.
À une autre échelle, un repository de librairies partagées (NuGet) adopte généralement une approche Trunk Based Development avec une branche principale unique, des branches courtes et un fort niveau d’automatisation. Chaque commit suit une convention stricte (Conventional Commits), permettant de piloter automatiquement le versioning via semantic-release. À chaque merge sur la branche principale, la CI analyse les changements, calcule la nouvelle version et publie automatiquement les packages sur une registry (ex: Nexus, GitLab, JFrog, etc...).
Ici, le choix n’est pas technique : il reflète des contraintes produits différentes, notamment en termes de nombre de versions à maintenir, de fréquence de livraison et de niveau d’automatisation.
Ces approches ne sont pas incohérentes : elles répondent à des enjeux différents.