Pe depozite de cod uriașe (monorepo-uri cu sute de mii de commit-uri sau milioane de fișiere), comenzi de bază precum git status, git log sau git fetch pot deveni perceptibil de lente. Începând cu Git 2.29, a fost introdusă comanda git maintenance, care configurează sarcini automate de fundal (prin cron sau systemd timers) pentru a menține depozitul optimizat la viteză maximă.
Activarea mentenanței automate în fundal
# În interiorul depozitului dorit, rulați o singură dată:
git maintenance start
# Ce face această comandă:
# 1. Înregistrează depozitul curent în lista globală de mentenanță (~/.gitconfig).
# 2. Configurează sarcini automate de sistem (cron sau systemd timer) care rulează
# în fundal fără a întrerupe activitatea dezvoltatorului!
Sarcinile de Optimizare Rulate Automat
| Sarcină (Task) | Frecvență Implicită | Ce Optimizează |
|---|---|---|
prefetch |
La fiecare 1 oră | Descarcă în avans modificările noi de pe serverul remote în referințe speciale (refs/prefetch/) fără a atinge branch-urile locale, făcând viitorul git fetch instantaneu! |
commit-graph |
La fiecare 1 oră | Generează fișierul binar .git/objects/info/commit-graph, accelerând comenzile git log --graph de 5 până la 10 ori. |
loose-objects |
Zilnic | Comprimă fișierele individuale de obiecte libere în fișiere pachet (packfiles). |
incremental-repack |
Zilnic | Reorganizează packfile-urile pentru a preveni fragmentarea stocării pe disc. |
Rularea manuală a mentenanței
# Dacă vrei să forțezi optimizarea imediată a grafului de commit-uri:
git maintenance run --task=commit-graph
# Oprirea mentenanței pentru depozitul curent:
git maintenance stop