La couche transport
Le protocole de transport de Git entrelace historiquement les messages client et serveur sur une connexion à état. stateless-connect (introduit pour le protocole v2 sur HTTP) découple les requêtes pour que chacune soit routable indépendamment.
Flux sans état
GIT_TRACE_PACKET=1 GIT_TRACE_CURL=1 \
git -c protocol.version=2 fetch origin 2>&1 | head -50
Bénéfices HTTP/2
Le multiplexing HTTP/2 permet à plusieurs requêtes sans état de partager une connexion.
Régler la couche HTTP
[http]
version = HTTP/2
postBuffer = 524288000
lowSpeedLimit = 1000
lowSpeedTime = 30
minSessions = 4
maxRequestBuffer = 100M
Parallélisme fetch
git config fetch.parallel 0
git config submodule.fetchJobs 0
HTTP smart vs dumb
"Smart" HTTP supporte la négociation ; "dumb" HTTP sert juste .git/objects comme fichiers statiques. Préférez toujours smart.
Erreurs courantes
Forcer HTTP/1.1 avec http.version=HTTP/1.1 sur un hôte qui supporte HTTP/2.
Diagnostic
GIT_CURL_VERBOSE=1 git fetch 2>&1 | head -30
GIT_TRACE_PACKET=1 git fetch 2>&1 | grep -i version