GitFlow c'est nul, mais on l'a cherché

date: Nov 30 2025 5 min de lecture

GitFlow c'est pas un choix technique. C'est un pansement culturel pour les boîtes pas prêtes à livrer comme des grands.

.git.devops.ci/cd.opinion

Branches GitFlow

Tout le monde adore parler de Trunk-Based Development comme si c’était la solution miracle universelle, jusqu’au moment où il faut réellement envoyer quelque chose en production sans traîner trois fonctionnalités non validées dans les pattes

Parce que oui, dans le monde merveilleux du TBD, on merge tout sur main, on déploie vingt fois par jour, et tout le monde vit heureux grâce à une CI divine, des feature flags impeccables et une équipe de développeurs qui ne cassent jamais rien (on les cherche encore)

Le problème concret

Dans la vraie vie, la nôtre:

  • Les features et les hotfix passent par les mêmes UAT, validées par la QA
  • Les UAT testent qu’une version à la fois (magie)
  • Tout ce qui entre dans l’environnement UAT est potentiellement éligible pour la production

Et là, ça devient amusant:

  • Une feature terminée mais pas encore validée ?
  • Un hotfix urgent à livrer ?
  • Les deux doivent passer en UAT ?

Félicitations: en TBD tu livres les deux. Parce que tout est dans main. Parce qu’il n’y a rien d’autre. Parce que c’est “moderne”

Et si tu voulais juste déployer le hotfix sans embarquer la feature ? Eh bien… tant pis. TBD te répond que tu aurais dû avoir des feature flags, une discipline de fer et un pipeline de tests E2E sponsorisé par Google

Le problème structurel

Le problème principal est structurel: si la feature et le hotfix partagent le même pipeline UAT, alors un modèle trunk-based ne permet pas de livrer l’un sans l’autre

Et tant que tes QA doivent tester une version unique dans un environnement unique avant prod, le fameux “une seule branche pour les gouverner toutes” se transforme en:

“une seule branche pour bloquer tout le monde”

Trunk-based development

D’où l’existence, surprise, d’une branche d’intégration (develop, staging, peu importe). Pas par amour du vintage GitFlow, mais juste pour ne pas livrer en prod des trucs que personne n’a validés

Pourquoi GitFlow existe

GitFlow compense des réalités organisationnelles:

  • La QA c’est une équipe à part avec une étape de validation
  • Les releases c’est toutes les semaines ou tous les mois, pas tous les jours
  • Les déploiements en prod ça fait flipper
  • Les feature flags ça existe pas ou c’est à moitié fait
  • La couverture de tests est trop faible pour faire confiance à la CI
  • Le codebase c’est un monolithe bien couplé

Si ton orga a ces caractéristiques, trunk-based va foirer. Tu vas shipper du code pas testé. Tu vas bloquer des hotfixes derrière des features pas validées. Tu vas casser la prod

Donc tu prends GitFlow. Des branches longue durée. Une branche develop comme tampon. Des branches release pour stabiliser. Ça marche. C’est lent, mais ça marche

L’évaluation honnête

Si t’as besoin de GitFlow, demande-toi pourquoi:

“On a besoin d’une branche develop parce que la QA teste avant la prod” → Ton process QA supporte pas la livraison continue

“On a besoin de branches release pour stabiliser” → Ta couverture de tests est pas assez bonne pour shipper depuis main

“On peut pas shipper un hotfix sans des features pas liées” → T’as pas de feature flags, ou ton UAT c’est un goulot d’étranglement

“Les merges sur main c’est risqué” → Ton pipeline de déploiement est pas fiable

Rien de tout ça c’est des problèmes Git. C’est des problèmes d’orga. GitFlow les rend juste vivables

L’approche pragmatique

J’utilise GitFlow-light sur des projets où trunk-based serait suicidaire. Pas parce que j’adore ça. Parce que l’alternative c’est pire

Quand t’as:

  • Des gates QA manuelles
  • Des cycles de release hebdo
  • Un seul environnement UAT
  • Zéro infra de feature flags

Alors oui, une branche develop t’évite de shipper de la merde. Une branche release te laisse stabiliser. Les branches hotfix te laissent bypass la queue

C’est optimal ? Non. Ça marche ? Oui

Sortir de GitFlow

GitFlow c’est pas l’objectif. C’est un compromis le temps de régler les vrais problèmes

Pour tuer GitFlow, il te faut:

  1. Des feature flags pour que le travail incomplet puisse se cacher dans main
  2. De la couverture de tests pour faire confiance à la CI
  3. Une CI rapide pour la faire tourner à chaque commit
  4. Plusieurs environnements UAT ou de la validation en parallèle
  5. Des changements plus petits pour que les merges restent simples
  6. L’adhésion culturelle que shipper petit c’est mieux que shipper gros

Ça prend des mois ou des années. C’est pas un changement d’outil. C’est un changement d’organisation

En attendant, GitFlow te permet de livrer. Imparfait, mais tu livres

Le mot de la fin

GitFlow c’est nul. Les merge conflicts c’est nul. La gestion des branches c’est nul. Le drift c’est nul

Mais on a appelé GitFlow parce qu’on était pas prêts pour l’alternative. Faut pas blâmer le pansement pour la blessure

Le problème c’est pas Git. C’est que TBD part du principe que t’as une infra et des process que la plupart des boîtes ont tout simplement pas. Et tant que c’est pas le cas, cette branche develop c’est pas de la pensée legacy, c’est de la survie

Vous avez aimé cet article ? Partagez-le !

Sofiane Djerbi
Sofiane Djerbi

Architecte Cloud & Kubernetes, Expert FinOps.

Commentaires