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 |