Par Anonyme (non vérifié) , 29 avril 2026

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 status parcourt l'arbre de travail.
  • git log, git blame et calculs de merge-base parcourent les graphes de commits.
  • git fetch négocie avec le serveur sur de nombreux changements de ref.
  • git gc repacke 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.