Par Anonyme (non vérifié) , 29 avril 2026

Pourquoi v2

Le protocole v0/v1 envoyait la publicité complète des refs du serveur au début de chaque fetch — un payload proportionnel au nombre de refs. Sur des repos avec des dizaines de milliers de refs, cela dominait le temps de transfert. Le protocole v2 (défaut en Git 2.26+) permet au client de demander des refs spécifiques par nom.

Vérifier qu'il est activé

GIT_TRACE_PACKET=1 git ls-remote origin 2>&1 | head -10
git config protocol.version 2
git config --global protocol.version 2

Exigences serveur

  • HTTP : Git 2.18+ sur le serveur.
  • SSH : Git 2.18+ aux deux extrémités.
  • Certains hôtes legacy peuvent nécessiter uploadpack.allowFilter=true.

Capabilities

GIT_TRACE_PACKET=1 git fetch 2>&1 | grep -i 'capabilit\|fetch='

Impact pratique

Sur le repo Linux (~50k refs), un fetch frais sur v0 passait 4-8 secondes en publicité ; v2 réduit à moins d'une seconde.

Sideband et progrès

git fetch --quiet
git -c progress.delay=999 fetch

Erreurs courantes

Forcer la version 0 du protocole dans des fichiers config anciens.

Combiner avec

  • Algorithme de négociation : fetch.negotiationAlgorithm=skipping.
  • Bitmaps d'atteignabilité côté serveur.
  • Filtrage de refs : fetch.refSpecs.