Outils linéaires, repos exponentiels
Git était à l'origine réglé pour le noyau Linux — gros pour 2005 mais petit pour aujourd'hui. Les repos modernes peuvent contenir des millions de fichiers, des centaines de gigaoctets d'historique et des dizaines de milliers de refs. Beaucoup d'opérations Git étaient O(taille de l'arbre) ou O(historique) par défaut.
Où va le temps
git statusparcourt l'arbre de travail.git log,git blameet calculs de merge-base parcourent les graphes de commits.git fetchnégocie avec le serveur sur de nombreux changements de ref.git gcrepacke chaque objet.- L'index est lu et écrit plusieurs fois par commande.
Mesurer
GIT_TRACE2_PERF=1 git status
GIT_TRACE2_EVENT=/tmp/trace.json git status
git -c trace2.eventTarget=/tmp/trace git fetch
La boîte à outils de performance
- commit-graph.
- filtres Bloom de chemins changés.
- multi-pack-index.
- bitmaps d'atteignabilité.
- fsmonitor.
- partial clone et sparse index.
- repack géométrique.
- protocole v2.
- git maintenance.
Gains rapides
git config feature.manyFiles true
git config core.fsmonitor true
git config core.untrackedCache true
git config index.version 4
git maintenance start
Erreurs courantes
Régler avant de mesurer. Activer des fonctionnalités sans les comprendre.