Da Anonimo (non verificato) , 29 Aprile 2026

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 status attraversa il working tree.
  • git log, git blame e calcoli di merge-base attraversano grafi di commit.
  • git fetch negozia con il server.
  • git gc ripacka 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.