Workflows collaboratifs#
Git est un outil remarquablement flexible : il ne prescrit aucun workflow particulier. Contrairement à des systèmes comme SVN ou le modèle centralisé impose une façon de travailler, Git laisse les équipes libres de définir leurs propres conventions de collaboration. Cette liberté est à la fois une force et un piège : sans workflow clairement établi, une équipe risque de sombrer dans le chaos des branches orphelines, des conflits à répétition et des historiques illisibles.
Ce chapitre présente les workflows les plus répandus dans l’industrie du logiciel. Chacun répond à des besoins spécifiques en termes de taille d’équipe, de fréquence de déploiement et de rigueur dans la gestion des versions. L’objectif n’est pas de désigner un workflow « supérieur » aux autres, mais de comprendre les compromis de chacun pour choisir celui qui convient le mieux à un contexte donné.
Workflow centralisé#
Définition 35 (Workflow centralisé)
Dans le workflow centralisé, tous les développeurs travaillent directement sur une seule branche partagée, généralement main. Chaque développeur clone le dépôt, effectue ses modifications localement, puis pousse (push) ses commits directement sur main. Il n’y a pas de branches de fonctionnalité, pas de pull requests, pas de revue de code formelle. C’est le modèle le plus proche du fonctionnement classique de SVN.
Ce workflow a le mérite de la simplicité. Un seul flux linéaire, aucune stratégie de branchement à comprendre, aucune politique de fusion à respecter. Pour un développeur seul ou une équipe de deux ou trois personnes travaillant sur un projet simple, il peut être tout à fait suffisant.
Mais ses limites apparaissent rapidement dès que l’équipe grandit :
Conflits fréquents. Plusieurs développeurs poussant sur la même branche simultanément génèrent inévitablement des conflits.
Branche principale instable. Un commit défectueux poussé sur
mainaffecte immédiatement toute l’équipe.Absence de revue de code. Rien n’empèche du code de mauvaise qualité d’atteindre la branche principale.
Remarque 34
Le workflow centralisé reste pertinent pour les projets personnels, les prototypes rapides ou les très petites équipes où la communication informelle compense l’absence de processus formel. Dès qu’une équipe dépasse trois personnes ou que le projet nécessite une certaine stabilité, il est fortement recommandé de migrer vers un workflow basé sur les branches.
Feature Branch workflow#
Définition 36 (Feature Branch workflow)
Le Feature Branch workflow repose sur un principe simple : chaque nouvelle fonctionnalité, chaque correctif, chaque modification est developpée dans sa propre branche, isolée de main. Une fois le travail terminé et révisé, la branche est fusionnée dans main via une pull request (ou merge request). La branche main ne reçoit jamais de commit direct ; elle n’évolue que par fusion de branches de fonctionnalité validées.
Le cycle de travail se déroule ainsi :
Créer une branche à partir de
main:git switch -c feature/ma-fonctionnaliteDévelopper sur cette branche avec des commits réguliers et atomiques.
Pousser la branche sur le dépôt distant :
git push -u origin feature/ma-fonctionnaliteOuvrir une pull request pour demander la revue de code par un ou plusieurs collègues.
Réviser et itérer : les relecteurs commentent, l’auteur corrige, jusqu’à approbation.
Fusionner la pull request dans
main.Supprimer la branche de fonctionnalité, devenue inutile.
Remarque 35
Le Feature Branch workflow est de loin le workflow le plus répandu dans le développement logiciel moderne. Il est adopté par défaut sur GitHub, GitLab et Bitbucket, qui fournissent tous une interface dédiée aux pull requests. Ce workflow offre un excellent équilibre entre simplicité et rigueur : il introduit la revue de code et l’isolation des fonctionnalités sans imposer la complexité d’un modèle comme Gitflow.
Le diagramme illustre deux branches de fonctionnalité évoluant en parallèle. Chacune part de main, accumule ses propres commits, puis est fusionnée via une pull request (losanges verts). L’isolation garantit que le travail sur le login ne perturbe pas celui sur le panier, et réciproquement. La branche main reste stable car elle ne reçoit que du code révisé et approuvé.
Gitflow#
Définition 37 (Gitflow)
Gitflow est un modèle de branchement formalisé, propose par Vincent Driessen en 2010. Il définit cinq types de branches ayant chacune un rôle précis :
main: contient uniquement les versions de production. Chaque commit surmaincorrespond à une release.develop: branche d’intégration où convergent toutes les fonctionnalités. C’est la base de travail quotidienne.feature/*: branches de fonctionnalité. Elles partent dedevelopet y retournent une fois terminées.release/*: branches de préparation d’une release. Elles partent dedevelop, reçoivent les derniers correctifs, puis sont fusionnées dansmainetdevelop.hotfix/*: branches de correctif urgent. Elles partent demain, corrigent un bug critique en production, puis sont fusionnées dansmainetdevelop.
Le cycle de vie Gitflow suit un schéma précis :
Le développement courant se fait sur des branches
feature/*créées à partir dedevelop.Quand suffisamment de fonctionnalités sont prêtes, on crée une branche
release/*à partir dedeveloppour stabiliser la version : corrections de bugs, mise à jour de la documentation, ajustement des numéros de version.Une fois stabilisée, la branche de release est fusionnée dans
main(avec un tag de version) et dansdevelop(pour réintegrer les correctifs).Si un bug critique est découvert en production, on crée une branche
hotfix/*à partir demain, on corrige, puis on fusionne dansmainetdevelop.
Remarque 36
Gitflow est bien adapté aux projets avec des cycles de release planifiés (versions trimestrielles, mensuelles, etc.) et où plusieurs versions doivent être maintenues en parallèle. Cependant, sa complexité est souvent excessive pour les projets en déploiement continu, ou chaque commit sur main est potentiellement déployé en production. Dans ce cas, la distinction entre main et develop perd son sens, et les branches de release deviennent superflues. Vincent Driessen lui-même a ajouté une note è son article original reconnaissant que Gitflow n’est pas toujours le bon choix.
Le diagramme met en évidence le flux unidirectionnel du code dans Gitflow. Les fonctionnalités naissent en bas (branches feature/*), remontent vers develop, puis transitent par une branche release/* avant d’atteindre main en haut. Les hotfixes suivent un chemin d’urgence direct depuis main, avec une réintegration dans develop pour ne pas perdre le correctif.
Trunk-based development#
Définition 38 (Trunk-based development)
Le trunk-based development (développement sur le tronc) est un workflow où tous les développeurs intègrent leur travail directement dans une branche unique, généralement main, appelée le tronc (trunk). Les branches, quand elles existent, sont extrêmement éphémères : elles vivent quelques heures, rarement plus d’une journée. L’intégration continue (CI) est exécutée à chaque commit sur le tronc, garantissant que la branche principale reste toujours dans un état déployable.
Le trunk-based development repose sur plusieurs pratiques complémentaires :
Branches à courte durée de vie. Une branche de fonctionnalité ne doit pas vivre plus de 24 heures. Cela force les développeurs à décomposer leur travail en petits incréments intégrables rapidement.
Feature flags. Les fonctionnalités en cours de développement sont masquées derrière des drapeaux de fonctionnalité (feature flags) qui permettent de les activer ou désactiver en production sans modifier le code. Cela permet de fusionner du code incomplet dans
mainsans affecter les utilisateurs.Intégration continue rigoureuse. Chaque commit sur
maindéclenche une suite de tests automatisés. Si un test échoue, la correction est prioritaire.
Exemple 10 (Feature flags)
Imaginons une application web à laquelle on ajoute un nouveau système de recommandations. Plutôt que de développer la fonctionnalité pendant trois semaines dans une branche isolée, le trunk-based development préconise d’intégrer le code jour après jour dans main, protégé par un feature flag :
if feature_flags.is_enabled("new_recommendations", user=current_user):
show_new_recommendations(user=current_user)
else:
show_classic_recommendations(user=current_user)
Le flag peut être activé pour 5% des utilisateurs pour un test A/B, puis progressivement étendu à 100% une fois la fonctionnalité validée.
Remarque 37
Le trunk-based development est le workflow adopté par Google, Meta (Facebook), Microsoft et d’autres grandes entreprises technologiques. Google, par exemple, gère un monorepo de plus de deux milliards de lignes de code ou des dizaines de milliers de developpeurs commitent directement sur le tronc. Ce workflow exige cependant une culture d’ingénierie mature : couverture de tests élevée, intégration continue rapide et fiable, revue de code systématique, et capacité à déployer et annuler rapidement. Sans ces prérequis, le trunk-based development peut rapidement devenir chaotique.
Forking workflow#
Définition 39 (Forking workflow)
Le forking workflow est un modèle où chaque contributeur fork (copie) le dépôt principal dans son propre espace de noms. Le contributeur travaille dans son fork — créant des branches, effectuant des commits — puis soumet une pull request de son fork vers le dépôt original (appele upstream). Les mainteneurs du projet révisent la pull request et décident de la fusionner ou non. A aucun moment le contributeur n’a besoin d’un accès en écriture au dépôt principal.
Ce workflow est le standard de facto pour les projets open source. Sur GitHub, forker un dépôt est une opération en un clic qui crée une copie complète du dépôt dans le compte de l’utilisateur. La configuration des remotes est la suivante :
origin: le fork personnel du contributeur (accès en lecture et écriture).upstream: le dépòt original du projet (accès en lecture seule, en général).
Exemple 11 (Contribuer à un projet open source)
Voici le flux typique pour contribuer à un projet open source sur GitHub :
Forker le dépôt via l’interface de GitHub.
Cloner son fork :
git clone https://github.com/mon-compte/projet.gitAjouter le remote upstream :
git remote add upstream https://github.com/auteur/projet.gitCréer une branche de fonctionnalité :
git switch -c fix/correction-typoDévelopper, commiter, pousser vers son fork :
git push origin fix/correction-typoOuvrir une pull request depuis son fork vers le dépôt upstream.
Synchroniser regulièrement avec upstream :
git fetch upstream && git merge upstream/main
Remarque 38
Le forking workflow ajoute une couche d’isolation essentielle pour les projets open source. Les contributeurs externes n’ont pas besoin d’accès en écriture au dépôt principal, ce qui élimine tout risque de modification accidentelle ou malveillante. Les mainteneurs conservent un contrôle total sur ce qui est fusionné dans le projet. Ce modèle permet à des milliers de contributeurs de collaborer sur un même projet — le noyau Linux, par exemple, reçoit des contributions de plus de 15 000 développeurs via ce type de workflow.
Choisir son workflow#
Le choix d’un workflow dépend de plusieurs facteurs. Le tableau suivant propose un guide de décision rapide.
Critère |
Workflow recommandé |
|---|---|
Développeur solo ou équipe de 2-3 personnes |
Feature Branch (simplicité avec un minimum de rigueur) |
Equipe de taille moyenne (5-20 personnes) |
Feature Branch ou Trunk-based selon la maturite CI/CD |
Projet open source avec contributeurs externes |
Forking workflow |
Releases planifiées (v1.0, v1.1, v2.0, …) |
Gitflow |
Déploiement continu (plusieurs déploiements par jour) |
Trunk-based development |
Projet très simple ou prototype rapide |
Centralisé (mais migrer vite vers Feature Branch) |
Remarque 39
En pratique, de nombreuses équipes adoptent un workflow hybride qui emprunte des éléments à plusieurs modèles. Par exemple, une équipe peut utiliser le Feature Branch workflow avec la convention de nommage de Gitflow (feature/*, fix/*, docs/*) sans avoir de branche develop séparée. Ou encore, une équipe en trunk-based development peut autoriser des branches de quelques jours pour les refactorings majeurs. Le meilleur workflow est celui que toute l’équipe comprend et applique de facon cohérente. Un workflow sophistiqué mal compris est pire qu’un workflow simple bien suivi.
Résumé#
Le tableau suivant récapitule les caractéristiques des quatre workflows principaux.
Workflow |
Branche principale |
Branches supplémentaires |
Revue de code |
Complexité |
Cas d’usage typique |
|---|---|---|---|---|---|
Centralisé |
|
Aucune |
Non |
Très faible |
Projets personnels, prototypes |
Feature Branch |
|
|
Pull request |
Faible |
Equipes de toute taille |
Gitflow |
|
|
Pull request |
Elevée |
Releases planifiées |
Trunk-based |
|
Branches éphémères (heures) |
Pre-commit ou PR rapide |
Moyenne |
Déploiement continu |
Forking |
|
Branches dans les forks |
Pull request inter-forks |
Moyenne |
Open source |
Aucun workflow n’est universellement supérieur aux autres. Le workflow centralisé convient aux projets simples ; le Feature Branch workflow offre un bon compromis entre rigueur et simplicité ; Gitflow structure les releases planifiées ; le trunk-based development accélère le déploiement continu ; et le forking workflow sécurise la collaboration open source. Le plus important n’est pas de choisir le workflow « parfait », mais d’en choisir un, de s’assurer que toute l’équipe le comprend, et de l’appliquer avec constance.