Markus Michalski FAQ

git-sync-all: Repository-Inventar

Repository-Inventar repos.yml von git-sync-all: Format, Gruppen, Clone-URLs, --verify mit Löschangebot für nicht gelistete Repositories und --issues für offene GitHub-Issues.

English Version

Zurück zur Übersicht

git-sync-all: Repository-Inventar

Das Inventar ist eine YAML-artige Datei repos.yml, die auflistet, welche Repositories auf einer Maschine vorhanden sein sollen. --verify prüft das gegen die Festplatte, --issues fragt für die gelisteten Repositories offene GitHub-Issues ab.

Speicherort

Das Tool wählt die Datei in dieser Reihenfolge: --inventory DATEI, dann SYNC_INVENTORY_FILE, dann ${XDG_CONFIG_HOME:-$HOME/.config}/git-sync-all/repos.yml. Fehlt die Datei, endet das Tool mit Inventory file not found.

git-sync-all --init-inventory

Der Befehl legt die Datei immer am XDG-Pfad an. Ist die Beispieldatei config/repos.yml.example vorhanden (Symlink-Installation), wird sie kopiert. Sonst erzeugt das Tool eine Datei mit Gruppe all aus den gefundenen Repositories. Anschließend öffnet es die Datei im Editor, wenn das Terminal interaktiv ist. Eine bestehende Datei bleibt unverändert.

--init-inventory läuft vor dem Laden der Config-Datei. Die erzeugte Inventar-Liste stammt deshalb aus dem Standardverzeichnis $HOME/projekte (oder aus einer gesetzten Umgebungsvariable SYNC_BASE_DIRS), nicht aus SYNC_BASE_DIRS der Config-Datei oder von --config.

Format

all:
  - git-sync-all
  - dotfiles

work:
  - shopware6-sepa-67

external:
  - osticket: https://github.com/osTicket/osTicket

Das Tool sucht jeden Namen in allen SYNC_BASE_DIRS bis zur Tiefe SYNC_SCAN_DEPTH nach einem Verzeichnis mit diesem Namen, das .git enthält.

Gruppen wählen

--group NAME filtert auf eine Gruppe und lässt sich wiederholen (--group work --group personal). Eine einzelne Angabe mit Komma (--group work,personal) funktioniert ebenfalls. Ohne --group gilt SYNC_VERIFY_GROUP (Standard all). Gibt es die Gruppe nicht, listet das Tool die vorhandenen Gruppen auf und endet mit Exit-Code 0.

--verify

git-sync-all --verify
git-sync-all --verify --group work

Für jeden Eintrag gibt das Tool [OK] name → pfad oder [ERROR] name → NOT FOUND aus. Fehlende Repositories listet es am Ende mit einem Clone-Hinweis:

Der Exit-Code ist 1, wenn Repositories fehlen, sonst 0.

Nicht gelistete Repositories

Danach vergleicht --verify alle Repositories auf der Festplatte mit allen Gruppen des Inventars, unabhängig vom --group-Filter. Für jedes nicht gelistete Repository fragt das Tool Remove <name> from disk? (<Pfad>) [y/n/q] und führt bei y rm -rf auf dem Verzeichnis aus.

Die Löschung entfernt das komplette Verzeichnis samt lokaler, nicht gepushter Commits und Dateien. --yes wird hier bewusst ignoriert, jedes Repository wird einzeln abgefragt. Ohne Terminal werden die Repositories nur aufgelistet. Mit --dry-run werden sie aufgelistet und nichts wird gelöscht.

--include und --exclude gelten für --verify nicht. Die Erkennung betrachtet jedes Repository mit .git-Verzeichnis unter den Basisverzeichnissen, auch solche ohne Remote.

--issues

git-sync-all --issues
git-sync-all --issues --group work -v

Voraussetzung ist die GitHub CLI gh, angemeldet über gh auth login. Sonst endet das Tool mit einem Fehler. Für jeden Inventar-Eintrag sucht es das Repository auf der Festplatte und liest den GitHub-Eigentümer und -Namen aus der URL des Remotes (SYNC_REMOTE). Die Tabelle zeigt pro Repository die Zahl offener Issues, -- ohne Issues, not found oder not on GitHub. Mit -v erscheinen Nummer und Titel. Der Exit-Code ist 1, wenn mindestens ein Repository offene Issues hat.

Pro Repository werden höchstens 10 Issues abgefragt, die angezeigte Zahl überschreitet 10 daher nie. Repositories, deren Name einen Punkt enthält (zum Beispiel meine-seite.net), erkennt die URL-Auswertung nicht und zeigt sie als not on GitHub.