Por qué v2
El protocolo v0/v1 enviaba la publicidad completa de refs del servidor al inicio de cada fetch — un payload proporcional al número de refs. En repos con decenas de miles de refs, esto dominaba el tiempo de transferencia. El protocolo v2 (default en Git 2.26+) permite al cliente solicitar refs específicas por nombre.
Verificar que está activado
GIT_TRACE_PACKET=1 git ls-remote origin 2>&1 | head -10
git config protocol.version 2
git config --global protocol.version 2
Requisitos del servidor
- HTTP: Git 2.18+ en el servidor.
- SSH: Git 2.18+ en ambos extremos.
- Algunos hosts legacy pueden necesitar
uploadpack.allowFilter=true.
Capabilities
GIT_TRACE_PACKET=1 git fetch 2>&1 | grep -i 'capabilit\|fetch='
Impacto práctico
En el repo de Linux (~50k refs), un fetch fresco sobre v0 gastaba 4-8 segundos en publicidad; v2 lo reduce a menos de un segundo.
Sideband y progreso
git fetch --quiet
git -c progress.delay=999 fetch
Errores comunes
Forzar versión 0 del protocolo en archivos config viejos.
Combinar con
- Algoritmo de negociación:
fetch.negotiationAlgorithm=skipping. - Bitmaps de alcanzabilidad en el servidor.
- Filtrado de refs:
fetch.refSpecs.