Lo strato di trasporto
Il protocollo wire di Git storicamente intervalla messaggi client e server su una connessione stateful. stateless-connect (introdotto per il protocollo v2 su HTTP) disaccoppia le richieste cosi ognuna e instradabile in modo indipendente.
Flussi stateless
GIT_TRACE_PACKET=1 GIT_TRACE_CURL=1 \
git -c protocol.version=2 fetch origin 2>&1 | head -50
Vantaggi HTTP/2
Il multiplexing HTTP/2 consente a piu richieste stateless di condividere una connessione.
Tuning dello strato HTTP
[http]
version = HTTP/2
postBuffer = 524288000
lowSpeedLimit = 1000
lowSpeedTime = 30
minSessions = 4
maxRequestBuffer = 100M
Parallelismo fetch
git config fetch.parallel 0
git config submodule.fetchJobs 0
Smart vs dumb HTTP
"Smart" HTTP supporta la negoziazione (la via moderna); "dumb" HTTP serve solo .git/objects come file statici.
Errori comuni
Forzare HTTP/1.1 con http.version=HTTP/1.1 su un host che supporta HTTP/2.
Diagnosticare
GIT_CURL_VERBOSE=1 git fetch 2>&1 | head -30
GIT_TRACE_PACKET=1 git fetch 2>&1 | grep -i version