Workflows Git — aperçu et comparatif
Introduction — pourquoi des workflows ?
- Un workflow définit comment une équipe utilise Git (branches, merges, PRs, releases).
- Objectifs : clarté, collaboration, qualité, intégration continue.
Vocabulaire clé
- Workflow : ensemble de pratiques et règles pour utiliser Git.
- pull request (PR) : demande de fusion d’une branche dans une autre, souvent avec revue de code.
- merge request : synonyme de PR (GitLab).
- CI : intégration continue, automatisation des tests et builds, déclenchée par des pushes/PRs.
- CD : livraison continue, déploiement automatisé en production, souvent après CI réussie.
1) Workflow centralisé (style SVN)
- Idée : une branche principale (
main/master) et tout le monde push/pull dessus.
Diagramme :
Developers -> commit -> push -> origin/main
Commandes typiques :
git checkout main
git pull
git add .
git commit -m "..."
git push origin mainAvantages : simple, facile à comprendre pour débutants. Inconvénients : risque élevé de conflits, intégrité limitée, pas de revue obligatoire.
2) Feature branch workflow (branche par fonctionnalité)
- Chaque fonctionnalité ou bugfix a sa propre branche
feature/x. - Fusion via merge ou PR dans
main.
Diagramme :
main ---o-----o---------o
\ /
feature1 o-----o
Commandes :
# créer et basculer
git checkout -b feature/ma-fonctionnalite
# pousser
git push -u origin feature/ma-fonctionnalite
# après review et tests
git checkout main
git merge --no-ff feature/ma-fonctionnalite
git push origin mainAvantages : isole le travail, facilite revue et CI. Inconvénients : branches longues peuvent diverger; nécessité de synchroniser (rebase/merge).
3) Gitflow (Vincent Driessen)
- Branches principales :
main(release) etdevelop(intégration) - Branches support :
feature/,release/,hotfix/
Diagramme :
main ----o----------o
\ /
develop ---o--o--o
/ \
feature1 release
Commandes (exemple simplifié) :
# feature
git checkout develop
git checkout -b feature/x
# push feature
git push -u origin feature/x
# finish feature
git checkout develop
git merge --no-ff feature/x
# release
git checkout -b release/1.2 develop
git checkout main
git merge --no-ff release/1.2
git tag -a v1.2Avantages : clair pour projets avec versions/stabilisation. Conserve historique de releases. Inconvénients : plus complexe, lourdeur pour déploiements rapides.
4) GitHub Flow (simplifié, PR-based)
- Branche courte depuis
main, ouvrir Pull Request, revue, merge, déploiement continu. - Pas de
developni branche de release.
Diagramme :
main ---o---o---o
\ /
PR-merge
Bon pour équipes produisant déploiements fréquents (CI/CD). Favorise petites PRs.
5) Forking workflow (open-source)
- Chaque contributeur fork le repo principal, travaille dans son fork, ouvre Pull Request vers le repo parent.
Diagramme :
Upstream (org/repo)
^
| Pull Request
Fork (user/repo) <- clone
Commandes :
# clone du fork
git clone git@github.com:utilisateur/repo.git
git remote add upstream git@github.com:org/repo.git
# synchroniser
git fetch upstream
git checkout main
git merge upstream/mainAvantages : sécurité (pas d’accès direct), isolation des contributeurs. Inconvénients : overhead pour synchroniser forks.
6) Trunk-based development (TBD)
- Tout le monde intègre fréquemment (plusieurs fois par jour) sur
main(outrunk), via petites branches très courtes. - Favorise feature flags, CI rapide, releases continues.
Avantages : réduit divergence, facilite CI/CD. Inconvénients : nécessite tests solides, discipline et feature flags.
Comparatif rapide
- Centralisé : très simple, pas recommandé pour équipes collaboratives.
- Feature branch : bon compromis pour la plupart des équipes.
- GitHub Flow : léger, idéal pour déploiements continus.
- Gitflow : adapté aux équipes avec releases planifiées.
- Forking : idéal pour contributions open-source.
- Trunk-based : requis pour livraison continue à grande échelle.
Choix pragmatique
- Petite équipe / produit en évolution rapide : GitHub Flow ou Feature Branch.
- Projet Open Source : Forking + PR.
- Produit avec releases planifiées : Gitflow.
- Organisation visant CI/CD mature : Trunk-based + feature flags.
Intégration CI/CD
- Chaque push sur une branche active déclenche pipelines (tests, lint, builds).
- PRs doivent passer la pipeline avant merge.
- Protect branch rules : exiger revue, tests verts, pas de push direct.
Bonnes pratiques transversales
- PRs petites et ciblées
- Messages de commit clairs
- Rébase interactif pour nettoyer l’historique local si nécessaire
- Protéger branches critiques (main, develop)
- Utiliser templates de PR et checklist de revue
Exercices pratiques (atelier)
- Exercice 1 — Feature Branch
- Init un repo, créez
mainetfeature/x, faites 3 commits, poussez et mergez via PR (ou simulate local merge). Vérifiezgit log --graph.
- Exercice 2 — Gitflow (simulé)
- Depuis
develop, créezfeature/a, terminez-la, ouvrezrelease/1.0, corrigez un bug, créezhotfix/1.0.1et mergez.
- Exercice 3 — Fork & sync
- Forkez un petit repo public, clonez votre fork, ajoutez un remote
upstream, synchronisez votre main puis proposez un PR.
Commandes utiles (résumé)
# branches
git checkout -b feature/x
git branch --all
# push
git push -u origin feature/x
# merge
git checkout main
git merge --no-ff feature/x
# rebase
git checkout feature/x
git fetch origin
git rebase origin/main
# sync fork
git remote add upstream <url>
git fetch upstream
git merge upstream/main
Pièges fréquents
- Rebaser une branche partagée publiquement
- Pousser sur
mainsans revue - PRs trop larges
- Manquer de tests automatiques
Ressources et lecture
- GitHub Flow — https://guides.github.com/introduction/flow/
- Vincent Driessen Gitflow — http://nvie.com/posts/a-successful-git-branching-model/
- Trunk-based development — https://trunkbaseddevelopment.com/
- Pro Git — https://git-scm.com/book/fr/v2
Conclusion & prochaines étapes
- Choisissez un workflow adapté à votre équipe et formalisez-le dans le README du projet.
- Configurez règles de branche et CI pour l’automatisation.
??? note “Notes” Proposer aux étudiants d’installer un repo d’exemples pour pratiquer chaque workflow.
Fin
Questions ? Voulez-vous que je crée un dépôt de démonstration contenant des branches et scripts pour pratiquer automatiquement ces workflows ?