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.