Strumenti lineari, repo esponenziali
Git fu originariamente messo a punto per il kernel Linux — grande per gli standard del 2005 ma minuscolo per quelli odierni. I repo moderni possono contenere milioni di file, centinaia di gigabyte di storia, e decine di migliaia di ref.
Dove va il tempo
git statusattraversa il working tree.git log,git blamee calcoli di merge-base attraversano grafi di commit.git fetchnegozia con il server.git gcripacka ogni oggetto.- L'index viene letto e scritto molte volte.
Misurare
GIT_TRACE2_PERF=1 git status
GIT_TRACE2_EVENT=/tmp/trace.json git status
git -c trace2.eventTarget=/tmp/trace git fetch
Toolbox di performance
- commit-graph: dati di raggiungibilita precalcolati.
- changed-path Bloom filter.
- multi-pack-index.
- bitmap di raggiungibilita.
- fsmonitor.
- partial clone e sparse index.
- geometric repack.
- protocol v2.
- git maintenance.
Vittorie rapide
git config feature.manyFiles true
git config core.fsmonitor true
git config core.untrackedCache true
git config index.version 4
git maintenance start
Errori comuni
Tunare prima di misurare. Saltare git maintenance start.