Da Anonimo (non verificato) , 29 Aprile 2026

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.