Markus Michalski FAQ

git-sync-all: Konfiguration

Alle Konfigurationsvariablen von git-sync-all mit Standardwerten, Validierung, Commit-Nachricht-Platzhaltern und der tatsächlichen Rangfolge von CLI, Umgebung und Config-Datei.

English Version

Zurück zur Übersicht

git-sync-all: Konfiguration

Config-Datei

Der Pfad ist ${XDG_CONFIG_HOME:-$HOME/.config}/git-sync-all/config.conf. Mit --config DATEI verwendest du eine andere Datei. Existiert die angegebene Datei nicht, läuft das Tool ohne Fehlermeldung mit den Standardwerten weiter.

git-sync-all --init-config

Der Befehl kopiert die Beispieldatei config/config.conf.example an den XDG-Pfad. Fehlt die Beispieldatei (Kopie-Installation), schreibt er eine kurze eingebaute Konfiguration. Die eingebaute Variante setzt SYNC_CONFLICT_STRATEGY und SYNC_COMMIT_BODY nicht. Existiert die Datei schon, ändert der Befehl nichts.

Die Config-Datei ist ein Shell-Skript und wird mit source geladen. Alles darin wird ausgeführt. Lege sie nur an Orten ab, auf die niemand außer dir Schreibrechte hat.

Variablen

Variable Standard Beschreibung
SYNC_BASE_DIRS $HOME/projekte Zu durchsuchende Verzeichnisse, durch Doppelpunkt getrennt. Jedes Verzeichnis muss existieren.
SYNC_SCAN_DEPTH 3 Suchtiefe unterhalb jedes Basisverzeichnisses. 1 bedeutet nur direkte Unterverzeichnisse. Ganzzahl ab 1.
SYNC_EXCLUDE leer Verzeichnisnamen von Repositories, die übersprungen werden. Doppelpunkt-getrennte Glob-Muster.
SYNC_INCLUDE leer Wenn gesetzt, werden nur Repositories mit passendem Verzeichnisnamen synchronisiert.
SYNC_COMMIT_MSG chore: auto-sync from {hostname} Vorlage der Commit-Nachricht (Platzhalter siehe unten).
SYNC_COMMIT_BODY Automatic synchronization of uncommitted changes. Zweiter Absatz der Commit-Nachricht. Nur eine ausdrückliche leere Zuweisung in der Config-Datei entfernt den Body. Eine leere Umgebungsvariable setzt wieder den Standard.
SYNC_AUTO_CONFIRM false true beantwortet alle Rückfragen automatisch (wie --yes).
SYNC_PULL_STRATEGY rebase rebase (git pull --rebase) oder merge (git pull). Andere Werte sind ein Fehler.
SYNC_TAGS true Tags pro Repository per git fetch --tags --prune-tags holen.
SYNC_REMOTE origin Name des Remotes. Repositories ohne diesen Remote werden übersprungen.
SYNC_CONFLICT_STRATEGY skip Verhalten im Auto-Modus bei überlappenden Änderungen: skip, stash oder commit.
SYNC_INVENTORY_FILE leer Pfad zur repos.yml. Leer bedeutet XDG-Pfad ${XDG_CONFIG_HOME:-$HOME/.config}/git-sync-all/repos.yml.
SYNC_VERIFY_GROUP all Standardgruppe für --verify und --issues. Mehrere Gruppen mit Komma.
SYNC_GITHUB_USER leer GitHub-Benutzername für die Clone-Hinweise bei --verify. Fehlt er, fragt das Tool gh api user ab.
SYNC_COLOR auto auto (nur im Terminal), true/yes/on/always oder false/no/off/never.
SYNC_VERBOSITY 1 0 leise, 1 normal, 2 Debug. Andere Werte sind ein Fehler.

SYNC_GITHUB_USER steht nicht in der Beispieldatei, wird aber aus der Config oder der Umgebung gelesen.

Validierung

Beim Start prüft das Tool: jedes Verzeichnis in SYNC_BASE_DIRS existiert, SYNC_PULL_STRATEGY ist rebase oder merge, SYNC_VERBOSITY ist 0, 1 oder 2, SYNC_SCAN_DEPTH ist eine positive Ganzzahl und SYNC_CONFLICT_STRATEGY ist skip, stash oder commit. Bei einem Verstoß endet das Tool mit Config error: ... und Exit-Code 1.

Beispiel

SYNC_BASE_DIRS="$HOME/projekte:$HOME/arbeit"
SYNC_SCAN_DEPTH=3
SYNC_EXCLUDE="vendor:node_modules"
SYNC_COMMIT_MSG="chore: auto-sync from {hostname} on {date}"
SYNC_PULL_STRATEGY="rebase"
SYNC_AUTO_CONFIRM=false

Platzhalter in der Commit-Nachricht

Platzhalter Ersetzt durch
{hostname} Ausgabe von hostname
{date} Aktuelles Datum als YYYY-MM-DD
{repo} Name des aktuellen Arbeitsverzeichnisses, aus dem du das Tool startest

{repo} ist nicht der Name des Repositories, das gerade synchronisiert wird, sondern das Verzeichnis, in dem du git-sync-all aufgerufen hast. Außerdem hängt der aktuelle Code an jede automatisch erzeugte Commit-Nachricht ein überzähliges } an (zum Beispiel chore: auto-sync from workstation}). Das gilt für die Standardvorlage und für Vorlagen aus der Config-Datei. Setzt du SYNC_COMMIT_MSG nur als Umgebungsvariable und nicht in der Config, sind es sogar zwei (}}).

Rangfolge der Einstellungen

Die tatsächliche Reihenfolge hängt davon ab, welche Quelle die Variable setzt.

Einstellung Wer gewinnt
Verzeichnisse als Argumente, --include, --exclude, -v, -q Immer die Kommandozeile
--yes, --no-tags, --no-color, --conflict-strategy Die Kommandozeile, aber nur wenn die Config-Datei die Variable nicht selbst setzt
Umgebungsvariablen (SYNC_...) Die Umgebung, aber nur wenn die Config-Datei die Variable nicht selbst setzt
Config-Datei Überschreibt die eingebauten Standardwerte

Die aus config/config.conf.example kopierte Datei setzt unter anderem SYNC_AUTO_CONFIRM, SYNC_TAGS, SYNC_COLOR und SYNC_CONFLICT_STRATEGY ausdrücklich. Mit dieser Datei haben --yes, --no-tags, --no-color und --conflict-strategy keine Wirkung, und gleichnamige Umgebungsvariablen werden überschrieben. Die eingebaute Ersatz-Konfiguration einer Kopie-Installation setzt SYNC_AUTO_CONFIRM, SYNC_TAGS und SYNC_COLOR ebenfalls, aber nicht SYNC_CONFLICT_STRATEGY. Kommentiere die betreffenden Zeilen aus, oder pflege eine eigene Datei für Cron-Läufe und übergib sie mit --config.

--no-pull, --no-push, --no-commit und --dry-run sind reine Kommandozeilen-Schalter ohne Config-Variable und wirken immer.

Mehrere Konfigurationen

git-sync-all --config ~/.config/git-sync-all/work.conf ~/arbeit
git-sync-all --config ~/.config/git-sync-all/cron.conf

Siehe auch Verwendung für alle Optionen und Sicherheit für die Hinweise zum Laden der Config.