Aller au contenu

Workflows Git

Choisir un workflow adapté a votre équipe — trunk-based, GitFlow ou GitHub Flow.


Pourquoi un workflow

Sans convention partagee, chaque développeur branche, merge et deploie a sa façon. Le résultat : des conflits permanents, un historique illisible et des déploiements imprévisibles.

Un workflow Git définit :

  • quand créer une branche
  • depuis quoi brancher
  • comment reintegrer le code
  • qui valide avant le merge

Trunk-Based Development

Tout le monde travaille sur une seule branche (main ou trunk). Les développeurs poussent de petits changements directement ou via des branches a très courte durée de vie (< 1 jour).

gitGraph
    commit id: "feat A"
    branch short-lived
    commit id: "feat B part 1"
    commit id: "feat B part 2"
    checkout main
    merge short-lived id: "merge feat B"
    commit id: "feat C"
    commit id: "fix D"

Quand l'utiliser

Critère Trunk-based
Taille d'équipe Petite a moyenne (2-15 devs)
Cadence de release Continue (plusieurs fois par jour)
CI/CD Obligatoire — chaque push doit être deployable
Feature flags Souvent nécessaires pour les features longues

Avantages

  • Intégration continue réelle — pas de branches qui divergent pendant des semaines
  • Conflits de merge rares et petits
  • Historique lineaire et lisible

Risques

  • Nécessité une CI solide — un push casse bloque tout le monde
  • Les features longues demandent des feature flags (voir Feature flags)

GitFlow

Modèle formalise par Vincent Driessen en 2010. Deux branches permanentes (main et develop) et trois types de branches temporaires (feature/*, release/*, hotfix/*).

gitGraph
    commit id: "v1.0" tag: "v1.0"
    branch develop
    commit id: "dev 1"
    branch feature/auth
    commit id: "auth 1"
    commit id: "auth 2"
    checkout develop
    merge feature/auth id: "merge auth"
    branch release/1.1
    commit id: "bump version"
    checkout main
    merge release/1.1 id: "v1.1" tag: "v1.1"
    checkout develop
    merge release/1.1 id: "sync develop"

Quand l'utiliser

Critère GitFlow
Taille d'équipe Moyenne à grande (10+ devs)
Cadence de release Planifiee (toutes les 2-6 semaines)
Versions multiples Oui — maintenance de plusieurs releases en parallèle
Compliance Quand les releases doivent être tracables et signees

Avantages

  • Séparation claire entre code en développement et code en production
  • Support natif des hotfixes sans perturber le développement
  • Historique structure par release

Risques

  • Complexe — beaucoup de branches a gérer
  • Les feature branches longues divergent et génèrent des conflits massifs
  • Merge hell sur les grosses releases

GitHub Flow

Simplification de GitFlow : une seule branche permanente (main), des feature branches et des pull requests.

gitGraph
    commit id: "init"
    branch feature/login
    commit id: "login 1"
    commit id: "login 2"
    checkout main
    merge feature/login id: "PR #1"
    branch feature/dashboard
    commit id: "dashboard 1"
    checkout main
    merge feature/dashboard id: "PR #2"
    commit id: "hotfix"

Quand l'utiliser

Critère GitHub Flow
Taille d'équipe Toute taille
Cadence de release Continue ou semi-continue
CI/CD Obligatoire
Complexité Faible — facile à apprendre

Avantages

  • Simple a comprendre et a enseigner
  • Les pull requests centralisent la review et la CI
  • Compatible avec la plupart des plateformes (GitHub, GitLab, Gitea)

Risques

  • Pas de mécanisme natif pour les releases planifiees
  • Les feature branches longues posent les mêmes problèmes qu'avec GitFlow

GitLab Flow

Variante de GitHub Flow avec des branches d'environnement (staging, production) pour gérer la promotion du code.

graph LR
    FB["feature branch"] -->|"MR"| M["main"]
    M -->|"merge"| S["staging"]
    S -->|"merge"| P["production"]

Quand l'utiliser

Quand vous avez besoin de la simplicité de GitHub Flow mais avec un contrôle explicite sur les environnements de déploiement.


Comparatif

Critère Trunk-based GitFlow GitHub Flow GitLab Flow
Complexité Faible Élevée Faible Moyenne
Cadence de release Continue Planifiee Continue Continue
Branches permanentes 1 2 1 2-3
Feature flags Souvent Rarement Parfois Parfois
CI/CD requis Oui Recommande Oui Oui
Versions en parallèle Non Oui Non Non

Conseil

Commencez par GitHub Flow. C'est le workflow le plus simple qui fonctionne pour la majorité des équipes. Passez a trunk-based quand votre CI est assez solide, ou a GitFlow quand vous avez besoin de releases planifiees avec maintenance parallèle.


Outils

Outil Description Lien
git branch Gestion native des branches Inclus avec Git
git-flow Extension CLI pour automatiser le workflow GitFlow github.com/nvie/gitflow
gh (GitHub CLI) Créer des PR, gérer des issues depuis le terminal cli.github.com
glab CLI GitLab — MR, pipelines, issues gitlab.com/gitlab-org/cli