La capa de transporte
El protocolo de cable de Git históricamente intercala mensajes cliente y servidor sobre una conexión con estado. stateless-connect (introducido para protocolo v2 sobre HTTP) desacopla las solicitudes para que cada una sea ruteable independientemente.
Flujos sin estado
GIT_TRACE_PACKET=1 GIT_TRACE_CURL=1 \
git -c protocol.version=2 fetch origin 2>&1 | head -50
Beneficios HTTP/2
El multiplexing HTTP/2 permite que múltiples solicitudes sin estado compartan una conexión.
Ajustar la capa HTTP
[http]
version = HTTP/2
postBuffer = 524288000
lowSpeedLimit = 1000
lowSpeedTime = 30
minSessions = 4
maxRequestBuffer = 100M
Paralelismo de fetch
git config fetch.parallel 0
git config submodule.fetchJobs 0
HTTP smart vs dumb
"Smart" HTTP soporta negociación; "dumb" HTTP solo sirve .git/objects como archivos estáticos. Siempre prefiere smart.
Errores comunes
Forzar HTTP/1.1 con http.version=HTTP/1.1 en un host que soporta HTTP/2.
Diagnosticar
GIT_CURL_VERBOSE=1 git fetch 2>&1 | head -30
GIT_TRACE_PACKET=1 git fetch 2>&1 | grep -i version