Perche v2
Il protocollo v0/v1 inviava l'intera pubblicita dei ref del server all'inizio di ogni fetch — un payload proporzionale al numero di ref. Su repo con decine di migliaia di ref, questo dominava il tempo di trasferimento. Il protocollo v2 (default da Git 2.26+) consente al client di richiedere ref specifici per nome.
Verificare se attivo
GIT_TRACE_PACKET=1 git ls-remote origin 2>&1 | head -10
git config protocol.version 2
git config --global protocol.version 2
Requisiti server
- HTTP: Git 2.18+ sul server.
- SSH: Git 2.18+ su entrambe le estremita.
Capacita
GIT_TRACE_PACKET=1 git fetch 2>&1 | grep -i 'capabilit\|fetch='
Impatto pratico
Sul repo Linux (~50k ref), un fetch fresco su v0 spendeva 4-8 secondi in pubblicita; v2 lo riduce a meno di un secondo.
Sideband e progresso
git fetch --quiet
git -c progress.delay=999 fetch
Errori comuni
Forzare protocol version 0 in vecchi file di config.
Combinare con
- Algoritmo di negoziazione:
fetch.negotiationAlgorithm=skipping. - Bitmap di raggiungibilita sul server.
- Filtro ref:
fetch.refSpecs.