English ▾ Themen ▾ Neueste Version ▾ git-maintenance zuletzt aktualisiert in 2.52.0

NAME

git-maintenance - Führt Aufgaben zur Optimierung von Git-Repository-Daten aus

SYNOPSIS

git maintenance run [<options>]
git maintenance start [--scheduler=<scheduler>]
git maintenance (stop|register|unregister) [<options>]

BESCHREIBUNG

Führt Aufgaben zur Optimierung von Git-Repository-Daten aus, wodurch andere Git-Befehle beschleunigt und der Speicherbedarf für das Repository reduziert wird.

Git-Befehle, die Repository-Daten hinzufügen, wie z. B. git add oder git fetch, sind für eine reaktionsschnelle Benutzererfahrung optimiert. Diese Befehle benötigen keine Zeit für die Optimierung der Git-Daten, da sich solche Optimierungen über die gesamte Größe des Repositorys skalieren, während diese Benutzerbefehle jeweils eine relativ kleine Aktion ausführen.

Der Befehl git maintenance bietet Flexibilität bei der Optimierung des Git-Repositorys.

UNTERBEFEHLE

run

Führt eine oder mehrere Wartungsaufgaben aus. Wenn ein oder mehrere --task-Optionen angegeben sind, werden diese Aufgaben in dieser Reihenfolge ausgeführt. Andernfalls werden die Aufgaben durch die Konfigurationsoptionen bestimmt, bei denen maintenance.<task>.enabled wahr ist. Standardmäßig ist nur maintenance.gc.enabled wahr.

start

Startet die Wartung des aktuellen Repositorys. Dies führt dieselben Konfigurationsaktualisierungen durch wie der Unterbefehl register, und aktualisiert dann den Hintergrundplaner, um git maintenance run --scheduled stündlich auszuführen.

stop

Hält den Hintergrundwartungsplan an. Das aktuelle Repository wird nicht aus der Liste der gewarteten Repositories entfernt, falls die Hintergrundwartung später neu gestartet wird.

register

Initialisiert Git-Konfigurationswerte, damit jede geplante Wartung für dieses Repository ausgeführt wird. Dies fügt das Repository zur Konfigurationsvariable maintenance.repo in der globalen Konfiguration des aktuellen Benutzers oder in der durch die Option --config-file angegebenen Konfiguration hinzu und aktiviert einige empfohlene Konfigurationswerte für maintenance.<task>.schedule. Die aktivierten Aufgaben sind für die Ausführung im Hintergrund sicher, ohne Vordergrundprozesse zu stören.

Der Unterbefehl register setzt auch den Konfigurationswert maintenance.strategy auf incremental, falls dieser Wert noch nicht gesetzt ist. Die incremental-Strategie verwendet den folgenden Zeitplan für jede Wartungsaufgabe

  • gc: deaktiviert.

  • commit-graph: stündlich.

  • prefetch: stündlich.

  • loose-objects: täglich.

  • incremental-repack: täglich.

git maintenance register deaktiviert auch die Vordergrundwartung, indem maintenance.auto = false im aktuellen Repository gesetzt wird. Diese Konfigurationseinstellung bleibt nach einem git maintenance unregister-Befehl bestehen.

unregister

Entfernt das aktuelle Repository aus der Hintergrundwartung. Dies entfernt nur das Repository aus der konfigurierten Liste. Es stoppt nicht die Ausführung der Hintergrundwartungsprozesse.

Der Unterbefehl unregister meldet einen Fehler, wenn das aktuelle Repository noch nicht registriert ist. Verwenden Sie die Option --force, um auch dann Erfolg zu erzielen, wenn das aktuelle Repository nicht registriert ist.

AUFGABEN

commit-graph

Der commit-graph-Job aktualisiert die commit-graph-Dateien inkrementell und verifiziert anschließend, dass die geschriebenen Daten korrekt sind. Das inkrementelle Schreiben ist sicher neben gleichzeitigen Git-Prozessen, da es .graph-Dateien, die in der vorherigen commit-graph-chain-Datei enthalten waren, nicht ablaufen lässt. Sie werden bei einem späteren Lauf aufgrund der Ablaufverzögerung gelöscht.

prefetch

Die prefetch-Aufgabe aktualisiert das Objektverzeichnis mit den neuesten Objekten aus allen registrierten Remote-Repositories. Für jedes Remote-Repository wird ein git fetch-Befehl ausgeführt. Die konfigurierte Refspec wird modifiziert, um alle angeforderten Refs innerhalb von refs/prefetch/ zu platzieren. Tags werden ebenfalls nicht aktualisiert.

Dies geschieht, um die Remote-Tracking-Branches nicht zu stören. Die Endbenutzer erwarten, dass diese Refs unverändert bleiben, es sei denn, sie initiieren einen Fetch. Mit der Prefech-Aufgabe werden die für einen späteren echten Fetch benötigten Objekte jedoch bereits abgerufen, wodurch der echte Fetch schneller wird. Im Idealfall wird dies lediglich zu einer Aktualisierung einer Reihe von Remote-Tracking-Branches ohne Objektübertragung.

Die Konfiguration remote.<name>.skipFetchAll kann verwendet werden, um ein bestimmtes Remote-Repository vom Prefetch auszuschließen.

gc

Bereinigt unnötige Dateien und optimiert das lokale Repository. "GC" steht für "Garbage Collection", aber diese Aufgabe führt viele kleinere Aufgaben aus. Diese Aufgabe kann bei großen Repositories kostspielig sein, da sie alle Git-Objekte in eine einzige Pack-Datei neu verpackt. Sie kann auch in einigen Situationen störend sein, da sie veraltete Daten löscht. Weitere Details zur Garbage Collection in Git finden Sie unter git-gc[1].

loose-objects

Der loose-objects-Job bereinigt lose Objekte und packt sie in Pack-Dateien. Um Race Conditions mit gleichzeitigen Git-Befehlen zu vermeiden, folgt er einem zweistufigen Prozess. Erstens löscht er alle losen Objekte, die bereits in einer Pack-Datei vorhanden sind; gleichzeitige Git-Prozesse werden stattdessen die Pack-Datei für die Objekt-Daten untersuchen. Zweitens erstellt er eine neue Pack-Datei (beginnend mit "loose-"), die eine Charge von losen Objekten enthält.

Die Chargengröße beträgt standardmäßig fünfzigtausend Objekte, um zu verhindern, dass der Job bei einem Repository mit vielen losen Objekten zu lange dauert. Verwenden Sie die Konfigurationsoption maintenance.loose-objects.batchSize, um diese Größe anzupassen, einschließlich des Werts 0, um das Limit aufzuheben.

Die gc-Aufgabe schreibt nicht erreichbare Objekte als lose Objekte, die von einem späteren Schritt bereinigt werden sollen, nur wenn sie nicht erneut in eine Pack-Datei aufgenommen werden; aus diesem Grund wird nicht empfohlen, die Aufgaben loose-objects und gc gleichzeitig zu aktivieren.

incremental-repack

Der incremental-repack-Job verpackt das Objektverzeichnis neu, indem er die Funktion multi-pack-index verwendet. Um Race Conditions mit gleichzeitigen Git-Befehlen zu vermeiden, folgt er einem zweistufigen Prozess. Erstens ruft er git multi-pack-index expire auf, um Pack-Dateien zu löschen, die nicht von der multi-pack-index-Datei referenziert werden. Zweitens ruft er git multi-pack-index repack auf, um mehrere kleine Pack-Dateien auszuwählen und sie in eine größere neu zu verpacken. Anschließend aktualisiert er die multi-pack-index-Einträge, die auf die kleinen Pack-Dateien verweisen, sodass sie auf die neue Pack-Datei verweisen. Dies bereitet die kleinen Pack-Dateien für die Löschung bei der nächsten Ausführung von git multi-pack-index expire vor. Die Auswahl der kleinen Pack-Dateien erfolgt so, dass die erwartete Größe der großen Pack-Datei mindestens der Chargengröße entspricht; siehe die Option --batch-size für den Unterbefehl repack in git-multi-pack-index[1]. Die Standard-Chargengröße ist null, was ein Sonderfall ist, bei dem versucht wird, alle Pack-Dateien in eine einzige Pack-Datei zu verpacken.

pack-refs

Die pack-refs-Aufgabe sammelt die losen Referenzdateien und fasst sie in einer einzigen Datei zusammen. Dies beschleunigt Operationen, die viele Referenzen durchlaufen müssen. Weitere Informationen finden Sie unter git-pack-refs[1].

reflog-expire

Die reflog-expire-Aufgabe löscht alle Einträge im Reflog, die älter als der Ablaufschwellenwert sind. Weitere Informationen finden Sie unter git-reflog[1].

rerere-gc

Die rerere-gc-Aufgabe ruft eine Garbage Collection für veraltete Einträge im rerere-Cache auf. Weitere Informationen finden Sie unter git-rerere[1].

worktree-prune

Die worktree-prune-Aufgabe löscht veraltete oder fehlerhafte Worktrees. Weitere Informationen finden Sie unter git-worktree[1].

OPTIONEN

--auto

In Kombination mit dem Unterbefehl run werden Wartungsaufgaben nur ausgeführt, wenn bestimmte Schwellenwerte erreicht sind. Beispielsweise wird die gc-Aufgabe ausgeführt, wenn die Anzahl der losen Objekte die in der gc.auto-Konfiguration gespeicherte Anzahl überschreitet, oder wenn die Anzahl der Pack-Dateien die gc.autoPackLimit-Konfigurationseinstellung überschreitet. Nicht kompatibel mit der Option --schedule.

--schedule

In Kombination mit dem Unterbefehl run werden Wartungsaufgaben nur ausgeführt, wenn bestimmte zeitliche Bedingungen erfüllt sind, wie sie durch den Konfigurationswert maintenance.<task>.schedule für jede <task> festgelegt sind. Dieser Konfigurationswert gibt die Anzahl der Sekunden seit der letzten Ausführung der Aufgabe an, gemäß dem Konfigurationswert maintenance.<task>.lastRun. Die getesteten Aufgaben sind diejenigen, die durch die Option(en) --task=<task> bereitgestellt werden, oder diejenigen, bei denen maintenance.<task>.enabled auf wahr gesetzt ist.

--quiet

Berichtet keinen Fortschritt oder andere Informationen über stderr.

--task=<task>

Wenn diese Option ein- oder mehrmals angegeben wird, werden nur die angegebenen Aufgaben in der angegebenen Reihenfolge ausgeführt. Wenn keine --task=<task>-Argumente angegeben sind, werden nur die Aufgaben berücksichtigt, bei denen maintenance.<task>.enabled auf true konfiguriert ist. Die Liste der akzeptierten <task>-Werte finden Sie im Abschnitt AUFGABEN.

--scheduler=auto|crontab|systemd-timer|launchctl|schtasks

In Kombination mit dem Unterbefehl start wird der Scheduler für die stündliche, tägliche und wöchentliche Ausführung von git maintenance run angegeben. Mögliche Werte für <scheduler> sind auto, crontab (POSIX), systemd-timer (Linux), launchctl (macOS) und schtasks (Windows). Wenn auto angegeben ist, wird der entsprechende plattformspezifische Scheduler verwendet; unter Linux wird systemd-timer verwendet, wenn verfügbar, andernfalls crontab. Standard ist auto.

FEHLERBEHEBUNG

Der Befehl git maintenance wurde entwickelt, um Muster der Repository-Wartung zu vereinfachen und gleichzeitig die Wartezeit des Benutzers während Git-Befehlen zu minimieren. Eine Vielzahl von Konfigurationsoptionen steht zur Verfügung, um diesen Prozess anzupassen. Die Standard-Wartungsoptionen konzentrieren sich auf Operationen, die auch bei großen Repositories schnell abgeschlossen werden.

Benutzer können feststellen, dass geplante Wartungsaufgaben nicht so häufig wie beabsichtigt ausgeführt werden. Jeder git maintenance run-Befehl sperrt die Objektdatenbank des Repositorys, und dies verhindert, dass andere gleichzeitige git maintenance run-Befehle auf demselben Repository ausgeführt werden. Ohne diese Schutzmaßnahme könnten konkurrierende Prozesse das Repository in einem unvorhersehbaren Zustand hinterlassen.

Der Hintergrundwartungsplan führt git maintenance run-Prozesse auf stündlicher Basis aus. Jeder Lauf führt die "stündlichen" Aufgaben aus. Um Mitternacht führt dieser Prozess auch die "täglichen" Aufgaben aus. Um Mitternacht am ersten Tag der Woche führt dieser Prozess auch die "wöchentlichen" Aufgaben aus. Ein einzelner Prozess durchläuft jedes registrierte Repository und führt die geplanten Aufgaben für diese Frequenz aus. Die Prozesse werden pro Client auf eine zufällige Minute der Stunde terminiert, um die Last zu verteilen, die mehrere Clients erzeugen könnten (z. B. durch Prefetching). Abhängig von der Anzahl der registrierten Repositories und ihrer Größe kann dieser Prozess länger als eine Stunde dauern. In diesem Fall können mehrere git maintenance run-Befehle gleichzeitig auf demselben Repository ausgeführt werden und auf die Sperre der Objektdatenbank kollidieren. Dies führt dazu, dass eine der beiden Aufgaben nicht ausgeführt wird.

Wenn Sie feststellen, dass einige Wartungsfenster länger als eine Stunde dauern, sollten Sie die Komplexität Ihrer Wartungsaufgaben reduzieren. Beispielsweise ist die gc-Aufgabe wesentlich langsamer als die incremental-repack-Aufgabe. Dies geht jedoch auf Kosten einer etwas größeren Objektdatenbank. Erwägen Sie, teurere Aufgaben seltener auszuführen.

Expertenbenutzer können ihre eigenen Wartungsaufgaben mit einem anderen Zeitplan als dem über git maintenance start und Git-Konfigurationsoptionen verfügbaren Zeitplan planen. Diese Benutzer sollten sich der Sperre der Objektdatenbank bewusst sein und wissen, wie gleichzeitige git maintenance run-Befehle funktionieren. Darüber hinaus sollte der Befehl git gc nicht mit git maintenance run-Befehlen kombiniert werden. git gc modifiziert die Objektdatenbank, nimmt aber die Sperre nicht auf die gleiche Weise wie git maintenance run ein. Verwenden Sie, wenn möglich, git maintenance run --task=gc anstelle von git gc.

Die folgenden Abschnitte beschreiben die Mechanismen, die zur Ausführung der Hintergrundwartung durch git maintenance start eingerichtet werden, und wie diese angepasst werden können.

KOMMUNALE WARTUNG AUF POSIX-SYSTEMEN

Der Standardmechanismus zur Planung von Hintergrundaufgaben auf POSIX-Systemen ist cron(8). Dieses Werkzeug führt Befehle basierend auf einem vorgegebenen Zeitplan aus. Die aktuelle Liste der vom Benutzer geplanten Aufgaben finden Sie, indem Sie crontab -l ausführen. Der von git maintenance start geschriebene Zeitplan ist ähnlich wie dieser

# BEGIN GIT MAINTENANCE SCHEDULE
# The following schedule was created by Git
# Any edits made in this region might be
# replaced in the future by a Git command.

0 1-23 * * * "/<path>/git" --exec-path="/<path>" for-each-repo --config=maintenance.repo maintenance run --schedule=hourly
0 0 * * 1-6 "/<path>/git" --exec-path="/<path>" for-each-repo --config=maintenance.repo maintenance run --schedule=daily
0 0 * * 0 "/<path>/git" --exec-path="/<path>" for-each-repo --config=maintenance.repo maintenance run --schedule=weekly

# END GIT MAINTENANCE SCHEDULE

Die Kommentare werden als Region verwendet, um den von Git geschriebenen Zeitplan zu markieren. Alle Änderungen innerhalb dieser Region werden von git maintenance stop vollständig gelöscht oder von git maintenance start überschrieben.

Der crontab-Eintrag gibt den vollständigen Pfad zur git-Ausführungsdatei an, um sicherzustellen, dass der ausgeführte git-Befehl derselbe ist, mit dem git maintenance start aufgerufen wurde, unabhängig von PATH. Wenn derselbe Benutzer git maintenance start mit mehreren Git-Ausführungsdateien ausführt, wird nur die neueste Ausführungsdatei verwendet.

Diese Befehle verwenden git for-each-repo --config=maintenance.repo, um git maintenance run --schedule=<frequency> für jedes Repository auszuführen, das in der mehrwertigen Konfigurationsoption maintenance.repo aufgeführt ist. Diese werden typischerweise aus der benutzerspezifischen globalen Konfiguration geladen. Der git maintenance-Prozess bestimmt dann, welche Wartungsaufgaben für jedes Repository mit jeder <frequency> gemäß den Konfigurationsoptionen maintenance.<task>.schedule konfiguriert sind. Diese Werte werden aus den globalen oder Repository-Konfigurationswerten geladen.

Wenn die Konfigurationswerte nicht ausreichen, um Ihren gewünschten Hintergrundwartungsplan zu erreichen, können Sie Ihren eigenen Zeitplan erstellen. Wenn Sie crontab -e ausführen, wird ein Editor mit Ihrem benutzerspezifischen cron-Zeitplan geladen. In diesem Editor können Sie Ihre eigenen Zeitplanzeilen hinzufügen. Sie könnten damit beginnen, den oben aufgeführten Standardzeitplan anzupassen, oder Sie können die crontab(5)-Dokumentation für erweiterte Zeitplantechniken lesen. Bitte verwenden Sie die vollständigen Pfade und die --exec-path-Techniken aus dem Standardzeitplan, um sicherzustellen, dass Sie die richtigen Binärdateien in Ihrem Zeitplan ausführen.

KOMMUNALE WARTUNG AUF LINUX SYSTEMD-SYSTEMEN

Obwohl Linux cron unterstützt, kann cron je nach Distribution ein optionales Paket sein, das nicht unbedingt installiert ist. Auf modernen Linux-Distributionen werden Systemd-Timer es ersetzen.

Wenn Benutzer-Systemd-Timer verfügbar sind, werden sie als Ersatz für cron verwendet.

In diesem Fall erstellt git maintenance start Benutzer-Systemd-Timer-Units und startet die Timer. Die aktuelle Liste der vom Benutzer geplanten Aufgaben finden Sie, indem Sie systemctl --user list-timers ausführen. Die von git maintenance start geschriebenen Timer sind ähnlich wie diese

$ systemctl --user list-timers
NEXT                         LEFT          LAST                         PASSED     UNIT                         ACTIVATES
Thu 2021-04-29 19:00:00 CEST 42min left    Thu 2021-04-29 18:00:11 CEST 17min ago  git-maintenance@hourly.timer git-maintenance@hourly.service
Fri 2021-04-30 00:00:00 CEST 5h 42min left Thu 2021-04-29 00:00:11 CEST 18h ago    git-maintenance@daily.timer  git-maintenance@daily.service
Mon 2021-05-03 00:00:00 CEST 3 days left   Mon 2021-04-26 00:00:11 CEST 3 days ago git-maintenance@weekly.timer git-maintenance@weekly.service

Für jede Option --schedule=<frequency> wird ein Timer registriert.

Die Definition der Systemd-Units kann in den folgenden Dateien inspiziert werden

~/.config/systemd/user/git-maintenance@.timer
~/.config/systemd/user/git-maintenance@.service
~/.config/systemd/user/timers.target.wants/git-maintenance@hourly.timer
~/.config/systemd/user/timers.target.wants/git-maintenance@daily.timer
~/.config/systemd/user/timers.target.wants/git-maintenance@weekly.timer

git maintenance start überschreibt diese Dateien und startet den Timer erneut mit systemctl --user. Daher sollten alle Anpassungen durch Erstellen einer Drop-in-Datei vorgenommen werden, d. h. einer Datei mit der Endung .conf im Verzeichnis ~/.config/systemd/user/git-maintenance@.service.d.

git maintenance stop stoppt die Benutzer-Systemd-Timer und löscht die oben genannten Dateien.

Weitere Details finden Sie unter systemd.timer(5).

KOMMUNALE WARTUNG AUF MACOS-SYSTEMEN

Obwohl macOS technisch cron unterstützt, erfordert die Verwendung von crontab -e erhöhte Berechtigungen, und der ausgeführte Prozess hat keinen vollständigen Benutzerkontext. Ohne vollständigen Benutzerkontext können Git und seine Anmeldeinformationshelfer nicht auf gespeicherte Anmeldeinformationen zugreifen, sodass einige Wartungsaufgaben nicht funktionsfähig sind.

Stattdessen interagiert git maintenance start mit dem launchctl-Tool, das die empfohlene Methode zur Planung von zeitgesteuerten Jobs unter macOS ist. Die Planung von Wartungsarbeiten über git maintenance (start|stop) erfordert einige launchctl-Funktionen, die nur in macOS 10.11 oder neuer verfügbar sind.

Ihre benutzerspezifischen geplanten Aufgaben werden als XML-formatierte .plist-Dateien in ~/Library/LaunchAgents/ gespeichert. Sie können die aktuell registrierten Aufgaben mit dem folgenden Befehl anzeigen

$ ls ~/Library/LaunchAgents/org.git-scm.git*
org.git-scm.git.daily.plist
org.git-scm.git.hourly.plist
org.git-scm.git.weekly.plist

Für jede Option --schedule=<frequency> wird eine Aufgabe registriert. Um zu überprüfen, wie das XML-Format jeden Zeitplan beschreibt, öffnen Sie eine dieser .plist-Dateien in einem Editor und inspizieren Sie das Element <array> nach dem Element <key>StartCalendarInterval</key>.

git maintenance start überschreibt diese Dateien und registriert die Aufgaben erneut mit launchctl. Daher sollten alle Anpassungen durch Erstellen eigener .plist-Dateien mit eindeutigen Namen vorgenommen werden. Ebenso wird der Befehl git maintenance stop die Aufgaben mit launchctl abmelden und die .plist-Dateien löschen.

Weitere Informationen zu erweiterten Anpassungen Ihrer Hintergrundaufgaben finden Sie unter launchctl.plist(5).

KOMMUNALE WARTUNG AUF WINDOWS-SYSTEMEN

Windows unterstützt cron nicht und verfügt stattdessen über ein eigenes System zur Planung von Hintergrundaufgaben. Der Befehl git maintenance start verwendet den Befehl schtasks, um Aufgaben an dieses System zu übermitteln. Sie können alle Hintergrundaufgaben über die Task-Planer-Anwendung überprüfen. Die von Git hinzugefügten Aufgaben haben Namen der Form Git Maintenance (<frequency>). Die Task-Planer-GUI bietet Möglichkeiten, diese Aufgaben zu überprüfen, aber Sie können die Aufgaben auch in XML-Dateien exportieren und die Details dort anzeigen.

Beachten Sie, dass diese Hintergrundaufgaben, da Git eine Konsolenanwendung ist, ein Konsolenfenster erstellen, das für den aktuellen Benutzer sichtbar ist. Dies kann manuell geändert werden, indem die Option "Ausführen, auch wenn der Benutzer nicht angemeldet ist" im Task-Planer ausgewählt wird. Diese Änderung erfordert die Eingabe eines Passworts, weshalb git maintenance start diese Option nicht standardmäßig auswählt.

Wenn Sie die Hintergrundaufgaben anpassen möchten, benennen Sie die Aufgaben bitte um, damit zukünftige Aufrufe von git maintenance (start|stop) Ihre benutzerdefinierten Aufgaben nicht überschreiben.

KONFIGURATION

Alles unterhalb dieser Zeile in diesem Abschnitt wird selektiv aus der git-config[1]-Dokumentation übernommen. Der Inhalt ist derselbe wie dort zu finden.

maintenance.auto

Diese boolesche Konfigurationsoption steuert, ob einige Befehle git maintenance run --auto ausführen, nachdem sie ihre normale Arbeit erledigt haben. Standardmäßig ist sie auf true gesetzt.

maintenance.autoDetach

Viele Git-Befehle lösen nach dem Schreiben von Daten in das Repository eine automatische Wartung aus. Diese boolesche Konfigurationsoption steuert, ob diese automatische Wartung im Vordergrund stattfinden soll oder ob der Wartungsprozess sich abkoppeln und im Hintergrund weiterlaufen soll.

Wenn sie nicht gesetzt ist, wird der Wert von gc.autoDetach als Fallback verwendet. Standardmäßig ist sie auf true gesetzt, wenn beide nicht gesetzt sind, was bedeutet, dass der Wartungsprozess sich abkoppelt.

maintenance.strategy

Diese String-Konfigurationsoption bietet eine Möglichkeit, eine von mehreren empfohlenen Strategien für die Repository-Wartung anzugeben. Dies beeinflusst, welche Aufgaben während git maintenance run ausgeführt werden, vorausgesetzt, es werden keine --task=<task>-Argumente angegeben. Diese Einstellung beeinflusst sowohl manuelle Wartung, Automatikwartung als auch geplante Wartung. Die ausgeführten Aufgaben können je nach Wartungstyp unterschiedlich sein.

Die Wartungsstrategie kann weiter angepasst werden, indem maintenance.<task>.enabled und maintenance.<task>.schedule gesetzt werden. Wenn diese Werte gesetzt sind, werden sie anstelle der von maintenance.strategy bereitgestellten Standardwerte verwendet.

Die möglichen Strategien sind

  • none: Diese Strategie bedeutet, dass überhaupt keine Aufgaben ausgeführt werden. Dies ist die Standardstrategie für geplante Wartung.

  • gc: Diese Strategie führt die gc-Aufgabe aus. Dies ist die Standardstrategie für manuelle Wartung.

  • geometric: Diese Strategie führt eine geometrische Neuverpackung von Pack-Dateien durch und hält Hilfsdatenstrukturen auf dem neuesten Stand. Die Strategie verfallen Daten im Reflog und entfernt nicht mehr auffindbare Worktrees. Wenn die geometrische Neuverpackungsstrategie entscheiden würde, eine Alles-in-eins-Neuverpackung durchzuführen, dann generiert die Strategie eine Cruft-Pack für alle nicht erreichbaren Objekte. Objekte, die bereits Teil einer Cruft-Pack sind, werden abgelaufen.

    Diese Neuverpackungsstrategie ist ein vollständiger Ersatz für die gc-Strategie und wird für große Repositories empfohlen.

  • incremental: Diese Einstellung optimiert die Durchführung kleiner Wartungsaktivitäten, die keine Daten löschen. Dies plant die gc-Aufgabe nicht, sondern führt die prefetch- und commit-graph-Aufgaben stündlich, die loose-objects- und incremental-repack-Aufgaben täglich und die pack-refs-Aufgabe wöchentlich aus. Die manuelle Repository-Wartung verwendet die gc-Aufgabe.

maintenance.<task>.enabled

Diese boolesche Konfigurationsoption steuert, ob die Wartungsaufgabe mit dem Namen <task> ausgeführt wird, wenn keine --task-Option an git maintenance run übergeben wird. Diese Konfigurationswerte werden ignoriert, wenn eine --task-Option vorhanden ist. Standardmäßig ist nur maintenance.gc.enabled auf true gesetzt.

maintenance.<task>.schedule

Diese Konfigurationsoption steuert, ob die angegebene <task> während eines Befehls git maintenance run --schedule=<frequency> ausgeführt wird oder nicht. Der Wert muss einer der folgenden sein: "hourly", "daily" oder "weekly".

maintenance.commit-graph.auto

Diese Integer-Konfigurationsoption steuert, wie oft die commit-graph-Aufgabe im Rahmen von git maintenance run --auto ausgeführt werden soll. Wenn Null, wird die commit-graph-Aufgabe nicht mit der Option --auto ausgeführt. Ein negativer Wert erzwingt die einmalige Ausführung der Aufgabe. Andernfalls bedeutet ein positiver Wert, dass der Befehl ausgeführt werden soll, wenn die Anzahl der erreichbaren Commits, die sich nicht in der Commit-Graph-Datei befinden, mindestens dem Wert von maintenance.commit-graph.auto entspricht. Der Standardwert ist 100.

maintenance.loose-objects.auto

Diese Integer-Konfigurationsoption steuert, wie oft die loose-objects-Aufgabe im Rahmen von git maintenance run --auto ausgeführt werden soll. Wenn Null, wird die loose-objects-Aufgabe nicht mit der Option --auto ausgeführt. Ein negativer Wert erzwingt die einmalige Ausführung der Aufgabe. Andernfalls bedeutet ein positiver Wert, dass der Befehl ausgeführt werden soll, wenn die Anzahl der losen Objekte mindestens dem Wert von maintenance.loose-objects.auto entspricht. Der Standardwert ist 100.

maintenance.loose-objects.batchSize

Diese Integer-Konfigurationsoption steuert die maximale Anzahl loser Objekte, die während der loose-objects-Aufgabe in eine Pack-Datei geschrieben werden. Der Standardwert ist fünfzigtausend. Verwenden Sie den Wert 0, um kein Limit anzugeben.

maintenance.incremental-repack.auto

Diese Integer-Konfigurationsoption steuert, wie oft die Aufgabe incremental-repack als Teil von git maintenance run --auto ausgeführt werden soll. Wenn der Wert Null ist, wird die Aufgabe incremental-repack nicht mit der Option --auto ausgeführt. Ein negativer Wert erzwingt die Ausführung der Aufgabe bei jedem Aufruf. Andernfalls bedeutet ein positiver Wert, dass der Befehl ausgeführt werden soll, wenn die Anzahl der Packdateien, die sich nicht im Multi-Pack-Index befinden, mindestens dem Wert von maintenance.incremental-repack.auto entspricht. Der Standardwert ist 10.

maintenance.geometric-repack.auto

Diese Integer-Konfigurationsoption steuert, wie oft die Aufgabe geometric-repack als Teil von git maintenance run --auto ausgeführt werden soll. Wenn der Wert Null ist, wird die Aufgabe geometric-repack nicht mit der Option --auto ausgeführt. Ein negativer Wert erzwingt die Ausführung der Aufgabe bei jedem Aufruf. Andernfalls bedeutet ein positiver Wert, dass der Befehl entweder ausgeführt werden soll, wenn Packdateien zusammengeführt werden müssen, um die geometrische Progression beizubehalten, oder wenn mindestens so viele lose Objekte vorhanden sind, die in eine neue Packdatei geschrieben würden. Der Standardwert ist 100.

maintenance.geometric-repack.splitFactor

Diese Integer-Konfigurationsoption steuert den Faktor, der für die geometrische Folge verwendet wird. Weitere Details finden Sie in der Option --geometric= in git-repack[1]. Der Standardwert ist 2.

maintenance.reflog-expire.auto

Diese Integer-Konfigurationsoption steuert, wie oft die Aufgabe reflog-expire als Teil von git maintenance run --auto ausgeführt werden soll. Wenn der Wert Null ist, wird die Aufgabe reflog-expire nicht mit der Option --auto ausgeführt. Ein negativer Wert erzwingt die Ausführung der Aufgabe bei jedem Aufruf. Andernfalls bedeutet ein positiver Wert, dass der Befehl ausgeführt werden soll, wenn die Anzahl der abgelaufenen Reflog-Einträge im "HEAD"-Reflog mindestens dem Wert von maintenance.loose-objects.auto entspricht. Der Standardwert ist 100.

maintenance.rerere-gc.auto

Diese Integer-Konfigurationsoption steuert, wie oft die Aufgabe rerere-gc als Teil von git maintenance run --auto ausgeführt werden soll. Wenn der Wert Null ist, wird die Aufgabe rerere-gc nicht mit der Option --auto ausgeführt. Ein negativer Wert erzwingt die Ausführung der Aufgabe bei jedem Aufruf. Andernfalls bedeutet jeder positive Wert, dass der Befehl ausgeführt wird, wenn das Verzeichnis "rr-cache" existiert und mindestens einen Eintrag hat, unabhängig davon, ob dieser veraltet ist oder nicht. Diese Heuristik kann in Zukunft verfeinert werden. Der Standardwert ist 1.

maintenance.worktree-prune.auto

Diese Integer-Konfigurationsoption steuert, wie oft die Aufgabe worktree-prune als Teil von git maintenance run --auto ausgeführt werden soll. Wenn der Wert Null ist, wird die Aufgabe worktree-prune nicht mit der Option --auto ausgeführt. Ein negativer Wert erzwingt die Ausführung der Aufgabe bei jedem Aufruf. Andernfalls bedeutet ein positiver Wert, dass der Befehl ausgeführt werden soll, wenn die Anzahl der bereinigbaren Arbeitsverzeichnisse den Wert überschreitet. Der Standardwert ist 1.

GIT

Teil der git[1] Suite