Warum maintenance, nicht gc
git maintenance (Git 2.31+) ist der moderne, task-orientierte Ersatz fur gc --auto. Es fuhrt spezifische Tasks (commit-graph, prefetch, incremental-repack, loose-objects, pack-refs, gc) auf optimierten Schedules im Hintergrund aus.
Starten
git maintenance start
git maintenance start --scheduler=systemd
git maintenance start --scheduler=launchctl
git maintenance start --scheduler=schtasks
Inspektion und Stoppen
git maintenance status
git maintenance stop
git maintenance unregister
Tasks und Schedules
| Task | Default Schedule | Was es tut |
|---|---|---|
| commit-graph | stundlich | Aktualisiert den Commit-Graph |
| prefetch | stundlich | Fetcht in versteckte Refs |
| loose-objects | taglich | Packt loose Objekte |
| incremental-repack | taglich | Geometrisches Repack + MIDX |
| pack-refs | wochentlich | Packt loose Refs |
| gc | standardmassig aus | Vollstandiges gc |
Manuelle Ausfuhrungen
git maintenance run --task=commit-graph
git maintenance run --task=incremental-repack
git maintenance run --auto
Konfiguration pro Task
[maintenance]
auto = false
strategy = incremental
[maintenance "commit-graph"]
enabled = true
[maintenance "incremental-repack"]
enabled = true
auto = 100
[maintenance "loose-objects"]
enabled = true
batchSize = 50
Auto-gc deaktivieren
git config gc.auto 0
Haufige Fehler
Vergessen, git maintenance start nach Klonen eines grossen Repos auszufuhren.
Logs
Auf systemd: journalctl --user -u git-maintenance.service. Auf macOS: ~/Library/Logs/git-maintenance.log.