Die Transportschicht
Git's Wire-Protokoll verschachtelt historisch Client- und Server-Nachrichten uber eine zustandsbehaftete Verbindung. stateless-connect (eingefuhrt fur Protokoll v2 uber HTTP) entkoppelt Anfragen, sodass jede unabhangig routbar ist.
Stateless-Flows
GIT_TRACE_PACKET=1 GIT_TRACE_CURL=1 \
git -c protocol.version=2 fetch origin 2>&1 | head -50
HTTP/2-Vorteile
HTTP/2-Multiplexing erlaubt mehreren Stateless-Anfragen, eine Verbindung zu teilen.
Tuning der HTTP-Schicht
[http]
version = HTTP/2
postBuffer = 524288000
lowSpeedLimit = 1000
lowSpeedTime = 30
minSessions = 4
maxRequestBuffer = 100M
Fetch-Parallelitat
git config fetch.parallel 0
git config submodule.fetchJobs 0
Smart vs Dumb HTTP
"Smart" HTTP unterstutzt Verhandlung (der moderne Pfad); "Dumb" HTTP serviert nur .git/objects als statische Dateien.
Haufige Fehler
HTTP/1.1 mit http.version=HTTP/1.1 auf einem Host erzwingen, der HTTP/2 unterstutzt.
Diagnose
GIT_CURL_VERBOSE=1 git fetch 2>&1 | head -30
GIT_TRACE_PACKET=1 git fetch 2>&1 | grep -i version