Hero Flow Git
A la recherche du flow git parfait ?
Index
Objectifs et critères
- Rebase flow
- Simple to learn
- Scalable (people and tech)
- Hotfix and cherry pick flexibility
- Versioning
Flows historiques
1. Git flow avec rebase (variante du Git flow classique)
Processus :
- Branches principales :
master
(production) etdevelop
(staging) - Branches de fonctionnalités créées à partir de
develop
- Avant de merger une feature, rebase sur develop :
git rebase develop feature/x
- Merge dans
develop
via fast-forward - Branches hotfix créées depuis
master
, rebasées, puis mergées dansmaster
etdevelop
Avantages :
- Historique linéaire et propre
- Facilite l'identification des problèmes par commit
- Évite les commits de merge superflus
- Chaque commit passe les tests avant d'intégrer develop
Inconvénients :
- Réécrit l'historique (problématique pour collaboration)
- Conflits potentiellement complexes lors du rebase
- Nécessite une bonne discipline d'équipe

Flows historiques
1. Flow Hero pure creation
Git flow personnalisé avec rebase
Structure des branches :
- Deux branches principales :
develop
(staging) etmain
(production) - Branches de fonctionnalités créées à partir de
develop
Processus de développement :
- Création de branches features depuis
develop
- Développement sur la branche feature
- Rebase de la feature sur
develop
avant intégration - Merge de la feature dans
develop
(staging)
Gestion des correctifs et déploiements : - Hotfix appliqués sur
develop
puis cherry-pick surmain
- Mise en production via deux méthodes :
- Si pas de conflits :
git merge shacommit
(du commit validé en staging) - Si conflits dus aux hotfixes/cherry-picks :
git reset --hard shacommit
sur main
- Si pas de conflits :
Avantages
- Simplicité structurelle : Seulement deux branches principales à gérer, ce qui réduit la complexité globale
- Historique plus propre sur develop : L'utilisation du rebase pour les features évite les commits de merge et maintient un historique linéaire dans l'environnement de staging
- Réactivité pour les correctifs critiques : Le cherry-pick permet de déployer rapidement des correctifs en production sans attendre un cycle complet
- Flexibilité de déploiement : Deux méthodes disponibles selon la situation (merge ou reset)
- Validation en staging systématique : Toutes les fonctionnalités passent par l'environnement de staging avant production
Inconvénients
- Divergence entre main et develop : Le cherry-pick des hotfixes crée une divergence entre les branches, complexifiant les mises en production ultérieures
- Utilisation du reset --hard risquée : Cette approche est destructive et peut entraîner des pertes d'historique sur la branche main
- Difficulté pour les nouveaux membres : La combinaison de différentes stratégies Git peut être déroutante pour les nouveaux développeurs
- Impossible de protéger la branche main

Nouveau flow
1. Release Flow avec Rebase
Principes fondamentaux
Le Release Flow est basé sur le principe que le code doit toujours être prêt pour une release, avec un déploiement continu des fonctionnalités sur la branche principale, et une séparation claire entre le développement et les versions publiées.
Structure détaillée des branches
-
Branche
main
(parfois appeléemaster
)- Centre de tout le développement
- Toujours dans un état déployable
- Reçoit toutes les nouvelles fonctionnalités via rebase et merge
-
Branches de fonctionnalité (
feature/nom-fonctionnalité
)- Créées à partir de
main
- Durée de vie relativement courte (jours à semaines)
- Rebasées régulièrement sur
main
pour éviter les divergences
- Créées à partir de
-
Branches de release (
release/v1.x.x
)- Créées à partir de
main
à un moment précis - Représentent une version spécifique du produit
- Ne reçoivent que des correctifs de bugs, jamais de nouvelles fonctionnalités
- Créées à partir de
-
Branches de hotfix (
hotfix/description-bug
)- Créées à partir de la branche de release concernée
- Appliquées à la release spécifique
- Éventuellement portées (cherry-pick) vers
main
si le bug y est aussi présent
AvantageS
-
Support multi-version robuste
- Capacité à maintenir plusieurs versions en production simultanément
- Corrections ciblées sans risquer d'introduire de nouvelles fonctionnalités
-
Clarté de l'historique
- Chaque version possède son propre historique linéaire
- Facilite l'audit et la traçabilité des changements
-
Isolation des risques
- Les branches de release isolent les versions stables du développement actif
- Minimise les risques lors des déploiements
-
Flexibilité de release
- Permet des cycles de release prévisibles ou à la demande
- Compatible avec les contraintes réglementaires strictes
-
Scalabilité pour grandes équipes
- Workflow adopté par Microsoft pour des projets impliquant des centaines de développeurs
- Limite les interférences entre équipes
Inconvénients
-
Overhead de maintenance
- Ressources nécessaires pour maintenir plusieurs versions
- Synchronisation requise entre correctifs sur différentes branches
-
Risque de drift
- Les branches de release peuvent diverger significativement de
main
- Complexité croissante des cherry-picks avec le temps
- Les branches de release peuvent diverger significativement de
-
Complexité infra
- Implémentation d'environnement distincts
- Flow CI et versionning

Conclusion / Questions

Minimal
By Adam Soto
Minimal
- 36