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.
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-inventoryläuft vor dem Laden der Config-Datei. Die erzeugte Inventar-Liste stammt deshalb aus dem Standardverzeichnis$HOME/projekte(oder aus einer gesetzten UmgebungsvariableSYNC_BASE_DIRS), nicht ausSYNC_BASE_DIRSder Config-Datei oder von--config.
Format
all:
- git-sync-all
- dotfiles
work:
- shopware6-sepa-67
external:
- osticket: https://github.com/osTicket/osTicket
- Eine Gruppe beginnt in der ersten Spalte mit
name:. Erlaubt sind Buchstaben, Ziffern,_und-. - Einträge stehen als
- namedarunter.nameist der Verzeichnisname des Repositories, kein Pfad. - name: https://...hinterlegt eine Clone-URL (nurhttp://oderhttps://).- Kommentare beginnen mit
#. Gruppennamen sind frei wählbar,allist nur der Standard.
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:
- Eintrag mit URL:
git clone <url> <erstes Basisverzeichnis>/<name> - Eintrag ohne URL und bekannter GitHub-Benutzer (
SYNC_GITHUB_USERodergh api userbei angemeldetergh):gh repo clone <benutzer>/<name> <Verzeichnis> - Sonst nur der Name.
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.
--yeswird hier bewusst ignoriert, jedes Repository wird einzeln abgefragt. Ohne Terminal werden die Repositories nur aufgelistet. Mit--dry-runwerden 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 alsnot on GitHub.