Aller au contenu
Développement medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Workflows distribués Git

8 min de lecture

Git est distribué : chaque développeur possède une copie complète du dépôt. Cette architecture permet plusieurs modèles de collaboration. Ce guide présente les trois principaux workflows distribués et vous aide à choisir celui qui correspond à votre équipe ou projet.

Prérequis : Remotes fondamentaux et Merge et conflits.

  • Comprendre les 3 workflows distribués : centralisé, integration-manager, dictateur
  • Identifier le workflow adapté à votre taille d’équipe et votre projet
  • Contribuer à un projet open source avec le workflow fork + PR
  • Gérer les remotes multiples (origin, upstream) dans un contexte de fork

Le modèle le plus simple : un seul dépôt partagé, tout le monde pousse sur les mêmes branches.

Dépôt central (origin)
┌──────────┐
│ main │
└────┬─────┘
┌─────┼─────┐
▼ ▼ ▼
Dev A Dev B Dev C

Tous les développeurs clonent le même dépôt et poussent directement sur main (ou develop) :

Fenêtre de terminal
git clone https://gitlab.com/team/project.git
# ... travailler ...
git pull --rebase origin main
git push origin main

Si un collègue a poussé entre-temps, Git rejette le push. Il faut d’abord intégrer ses changements (pull --rebase ou pull), puis repousser.

  • Petites équipes (2-5 personnes)
  • Projets internes simples
  • Équipes habituées à SVN qui migrent vers Git
  • Pas de revue de code formelle avant l’intégration
  • Conflits fréquents si l’équipe grandit
  • Un commit cassé sur main impacte tout le monde

C’est le modèle standard de l’open source (GitHub, GitLab). Un mainteneur contrôle le dépôt principal. Les contributeurs passent par un fork et des pull/merge requests.

Dépôt principal (blessed)
┌──────────┐
│ mainteneur│
└────┬─────┘
│ merge PR
┌────┴─────┐
▼ ▼
Fork Dev A Fork Dev B
(origin) (origin)
  1. Le contributeur forke le dépôt principal

  2. Il clone son fork et ajoute le dépôt principal comme upstream :

    Fenêtre de terminal
    git clone https://github.com/moi/project.git
    git remote add upstream https://github.com/original/project.git
  3. Il crée une branche feature, travaille, pousse sur son fork :

    Fenêtre de terminal
    git switch -c fix/typo-readme
    # ... modifications ...
    git push -u origin fix/typo-readme
  4. Il ouvre une pull request vers le dépôt principal

  5. Le mainteneur review, demande des changements si nécessaire, puis merge

  6. Le contributeur synchronise son fork :

    Fenêtre de terminal
    git fetch upstream
    git switch main
    git merge upstream/main
    git push origin main
  • Projets open source
  • Équipes où la revue de code est obligatoire
  • Quand les contributeurs n’ont pas les droits d’écriture sur le dépôt principal
  • Le mainteneur contrôle ce qui entre dans le projet
  • Chaque contribution est revue avant intégration
  • Les contributeurs travaillent de manière indépendante

Utilisé par les très grands projets (le noyau Linux). Un dictateur bienveillant intègre le travail de lieutenants, qui eux-mêmes intègrent les contributions des développeurs.

Blessed repo
┌────────────┐
│ Dictateur │
└──┬─────┬───┘
│ │
┌──────┘ └──────┐
▼ ▼
Lieutenant A Lieutenant B
(sous-système) (sous-système)
▲ ▲ ▲ ▲
│ │ │ │
Dev 1 Dev 2 Dev 3 Dev 4
  1. Les développeurs soumettent leur travail au lieutenant de leur sous-système
  2. Le lieutenant intègre, teste, puis soumet au dictateur
  3. Le dictateur intègre dans le dépôt de référence (blessed repo)
  4. Tout le monde synchronise depuis le blessed repo
  • Projets très larges (centaines de contributeurs)
  • Noyau Linux, certains projets GNU

Ce workflow est rarement pertinent pour les projets courants. Il est présenté ici pour compréhension.

CritèreCentraliséIntegration-ManagerDictator
Taille d’équipe2-55-100+100+
Revue de codeOptionnelleObligatoire (PR)Multi-niveaux
ComplexitéFaibleMoyenneÉlevée
ContrôlePartagéMainteneurHiérarchique
Cas d’usageProjets internesOpen source, équipesNoyau Linux

Quel que soit le workflow, ces règles facilitent l’intégration de vos contributions :

  1. Un sujet par branche : ne mélangez pas un bugfix et une feature dans la même PR
  2. Commits atomiques : chaque commit fait une chose et la fait bien
  3. Rebasez avant de soumettre : git rebase upstream/main pour éviter les conflits au mainteneur
  4. Messages clairs : décrivez le « quoi » et le « pourquoi »
  5. Testez : assurez-vous que votre code fonctionne avant de soumettre
  6. Respectez les conventions du projet (linting, format des commits, etc.)
SymptômeCause probableSolution
Push rejeté sur le dépôt originalPas les droits d’écriturePoussez sur votre fork, puis ouvrez une PR
Fork désynchroniséPas de fetch upstreamgit fetch upstream && git merge upstream/main
PR avec conflitsBranche pas à jourgit rebase upstream/main puis force-push sur votre fork
Trop de commits dans la PRHistorique brouillongit rebase -i pour squasher avant soumission
  • Centralisé : simple, tout le monde pousse sur le même dépôt (petites équipes)
  • Integration-Manager : fork + PR + revue, le standard de l’open source
  • Dictator & Lieutenants : hiérarchique, pour les très grands projets
  • Bonnes pratiques : une branche par sujet, commits atomiques, rebase avant soumission
  • La plupart des équipes utilisent le workflow Integration-Manager avec des merge requests

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn