git-sync-all: Sicherheit
Sicherheitsrelevantes Verhalten von git-sync-all: Auto-Commit mit git add -A, Push ohne Rückfrage, Löschung bei --verify, Config als Shell-Skript, Lock-Datei und Zugangsdaten.
git-sync-all: Sicherheit
Diese Seite fasst zusammen, welche Operationen Daten verändern oder löschen können und was du dagegen tun kannst.
Was das Tool nicht tut
- Es pusht nie mit
--forceund schreibt keine veröffentlichte Historie um. - Es wechselt keine Branches und führt kein
git resetodergit cleanaus. - Es pusht keine Tags.
- Es speichert keine Zugangsdaten. Pull und Push laufen über deine vorhandene Git-Konfiguration (SSH-Agent, Credential-Helper).
Operationen mit Wirkung
| Operation | Wann | Schutz |
|---|---|---|
git add -A und git commit |
Bei Änderungen im Arbeitsverzeichnis, nach Rückfrage oder mit --yes |
--dry-run, --no-commit, .gitignore |
git push <remote> <branch> |
Bei lokalen Commits vor dem Upstream | --no-push, --dry-run |
git pull --rebase oder git pull |
Wenn der Upstream neue Commits hat | Automatischer Abbruch von Rebase und Merge bei Fehlern, --no-pull |
git stash push --include-untracked und git stash pop |
Stash-Pfad, --no-commit bei Remote-Änderungen |
Bei Pop-Konflikten bleiben die Änderungen im Stash |
git fetch --tags --prune-tags |
Pro Repository, solange Tags aktiv sind | --no-tags. Löscht lokale Tags nur bei fetch.prune=true oder remote.<name>.prune=true |
rm -rf <Repository> |
Nur bei --verify und y |
Einzelabfrage, ignoriert --yes, nicht ohne Terminal, nicht im Dry-Run |
Auto-Commit nimmt alles mit
git add -A stagt jede geänderte und jede nicht verfolgte Datei, die .gitignore nicht ausschließt. Liegen im Arbeitsverzeichnis Zugangsdaten, .env-Dateien oder große Binärdateien, die nicht ignoriert werden, landen sie im Commit und beim Push im Remote. Mit --yes oder SYNC_AUTO_CONFIRM=true gibt es keine Rückfrage und keinen Blick auf die Dateiliste. Prüfe vor dem ersten automatischen Lauf deine .gitignore-Dateien und starte mit --dry-run.
Löschung bei --verify
--verify kann ganze Repository-Verzeichnisse löschen, die nicht im Inventar stehen. Unpushed Commits und uncommittete Dateien gehen dabei verloren. Antworte nur dann mit y, wenn du sicher bist, dass das Repository entbehrlich ist. Alles Weitere steht unter Inventar.
Die Config-Datei wird ausgeführt
Die Config-Datei wird mit source geladen, ein Shell-Skript mit deinen Rechten. Verwende --config nur mit Dateien, denen du vertraust, und achte darauf, dass niemand sonst die Datei beschreiben kann.
Lock-Datei
Das Tool legt ${XDG_RUNTIME_DIR:-/tmp}/git-sync-all.lock mit seiner PID an und entfernt sie beim Beenden. Läuft eine Instanz, beendet sich die zweite mit einem Fehler. Eine veraltete Lock-Datei (PID läuft nicht mehr) wird automatisch entfernt. Ohne XDG_RUNTIME_DIR liegt die Datei in /tmp, einem Verzeichnis, das alle lokalen Benutzer beschreiben können.
Eine zweite Instanz, die wegen der laufenden ersten abbricht, löscht beim Beenden deren Lock-Datei. Eine dritte Instanz kann dann trotz laufender erster starten. Der Lock schützt daher nicht zuverlässig vor parallelen Läufen.
Netzwerkzugriffe
Das Tool spricht ausschließlich mit den Git-Remotes der Repositories. Nur --issues und die Clone-Hinweise von --verify rufen zusätzlich die GitHub CLI gh auf (gh auth status, gh issue list, gh api user).
Empfehlungen
- Teste neue Setups mit
--dry-run. - Für Cron eine eigene Config mit
SYNC_AUTO_CONFIRM=trueundSYNC_CONFLICT_STRATEGY="skip"verwenden. - Mit
--no-commit --no-pushbleibt es bei Fetch und Pull, wobei bei Remote-Änderungen ein temporärer Stash entsteht. - Fehlgeschlagene Stash-Pops im Repository mit
git stash listkontrollieren.