Markus Michalski FAQ

git-sync-all: Fehlerbehebung

Häufige Probleme mit git-sync-all und ihre Ursachen: Lock-Datei, Config-Fehler, wirkungslose Flags, fehlgeschlagener Pull, Stash-Konflikte, nicht gefundene Repositories.

English Version

Zurück zur Übersicht

git-sync-all: Fehlerbehebung

"Another instance is running"

[ERROR] Another instance is running (PID 12345). Remove /run/user/1000/git-sync-all.lock if stale.

Eine zweite Instanz läuft, oder die Lock-Datei gehört einem Prozess, der noch existiert. Das Tool entfernt Lock-Dateien, deren PID nicht mehr läuft, selbst. Prüfe mit ps -p 12345, ob der Prozess lebt, und lösche die Datei sonst von Hand. Der Pfad ist ${XDG_RUNTIME_DIR:-/tmp}/git-sync-all.lock.

"Config error: directory not found"

[ERROR] Config error: directory not found: /home/du/projekte (SYNC_BASE_DIRS)

Mindestens ein Eintrag in SYNC_BASE_DIRS existiert nicht. Das Tool prüft die Verzeichnisse aus der Config, bevor es Verzeichnis-Argumente auswertet. Ein übergebenes Verzeichnis hilft deshalb nicht, solange der Standardwert ~/projekte fehlt. Lege das Verzeichnis an oder setze SYNC_BASE_DIRS in der Config-Datei auf einen vorhandenen Pfad.

--yes oder --no-tags zeigt keine Wirkung

Die Config-Datei überschreibt diese Flags, wenn sie die Variable selbst setzt. Die aus der Beispieldatei kopierte Datei tut das. Kommentiere SYNC_AUTO_CONFIRM, SYNC_TAGS, SYNC_COLOR und SYNC_CONFLICT_STRATEGY aus, oder setze die Werte in der Datei. Siehe Rangfolge.

"Unknown option: -vv"

Kurzoptionen lassen sich nicht zusammenfassen. -v schaltet bereits die Debug-Ausgabe ein (Stufe 2). Zwei -v ergeben Stufe 3, die die Validierung ablehnt, solange die Config-Datei SYNC_VERBOSITY nicht selbst setzt.

Commit-Nachricht endet mit }

Der aktuelle Code hängt an die Commit-Vorlage ein } an. Das betrifft jede automatisch erzeugte Nachricht. Du kannst es nicht über die Config verhindern, die Nachricht lässt sich nur im interaktiven Prompt überschreiben.

"Pull failed"

[ERROR]   Pull failed
[WARN]    Aborting rebase to restore clean state...
[OK]      Rebase aborted, repo restored

Der Pull ist an Konflikten oder an einer Remote-Verbindung gescheitert. Das Tool hat Rebase oder Merge abgebrochen, das Repository ist im Zustand von vorher. Hole die Änderungen von Hand:

cd ~/projekte/mein-projekt
git status
git pull --rebase origin <branch>

Löse Konflikte, setze mit git rebase --continue fort und starte danach git-sync-all erneut. Meldet das Tool Failed to abort rebase, führe git rebase --abort im Repository selbst aus.

"Stash pop has conflicts"

Nach einem erfolgreichen Pull konnten die gestashten Änderungen nicht sauber zurückgespielt werden. Löse die Konflikte in den Dateien und führe danach git stash drop aus. Schlägt der Pull selbst fehl, versucht das Tool, den Stash zurückzuspielen. Misslingt das, bleiben deine Änderungen in git stash list.

Der Lauf geht nach q weiter

Die Antwort q beendet nur das aktuelle Repository (Aborted by user, gezählt als Failed). Der Lauf wird mit den übrigen Repositories fortgesetzt und endet mit Exit-Code 1. Zum Stoppen des ganzen Laufs drückst du Strg+C.

Repository fehlt in der Ausgabe

Alle Repositories mit Änderungen werden Skipped

Ohne Terminal und ohne bestätigte Auto-Modus-Einstellung überspringt das Tool jedes Repository mit Änderungen und meldet Non-interactive mode, skipping. Verwende --yes oder eine Config mit SYNC_AUTO_CONFIRM=true.

Warnung zur Git-Version

[WARN]  Git version 2.15 detected. Recommend >= 2.17 for --prune-tags support.

Das Tool läuft weiter. Aktualisiere Git, wenn du Tag-Synchronisierung brauchst.

Lokale Tags verschwinden, oder werden nicht gelöscht

Das Entfernen lokaler Tags hängt an fetch.prune oder remote.<name>.prune in deiner Git-Konfiguration, nicht an git-sync-all. Siehe Sync-Ablauf.