Markus Michalski FAQ

git-sync-all: Technische Details

Aufbau von git-sync-all: Module, Ausführungsreihenfolge, Dry-Run-Wrapper, Subshell-Isolation, Lock-Datei, Dateistruktur, Tests und CI.

English Version

Zurück zur Übersicht

git-sync-all: Technische Details

Dateistruktur

git-sync-all/
├── bin/git-sync-all           Einstiegspunkt
├── lib/
│   ├── core.sh                Strict Mode, Logging, Farben, Lock, Cleanup
│   ├── config.sh              Defaults, Config laden, Validierung, --init-config
│   ├── cli.sh                 Argumente, Hilfe, Version, Alias
│   ├── repo-discovery.sh      Repository-Suche, Filter, Remote-Prüfung
│   ├── git-ops.sh             Git-Operationen, Dry-Run-Wrapper
│   ├── sync.sh                Sync-Ablauf, Rückfragen, Status, Zusammenfassung
│   ├── inventory.sh           repos.yml, --verify, Aufräumen, --init-inventory
│   └── issues.sh              GitHub-Issues über gh
├── config/
│   ├── config.conf.example
│   └── repos.yml.example
├── tests/                     Test-Skripte
├── Makefile                   install, uninstall, link, test, lint, format
└── install.ps1                Windows-Installer

Ausführungsreihenfolge

graph TD
    A[parse_args] --> B[load_config]
    B --> C[apply_cli_overrides]
    C --> D[setup_environment: Farben, git-Prüfung, Lock]
    D --> E{Modus}
    E -->|--verify| F[parse_inventory und verify_inventory]
    E -->|--issues| G[parse_inventory und show_issues]
    E -->|Standard| H[discover_repos]
    H --> I{--status?}
    I -->|ja| J[show_status]
    I -->|nein| K[sync_all]
    J --> L[print_summary]
    K --> L
    L --> M{Failed größer 0?}
    M -->|ja| N[Exit 1]
    M -->|nein| O[Exit 0]

--help, --version, --init-config, --setup-alias und --init-inventory beenden das Tool bereits in parse_args. Der Lock wird vor allen Modi erworben, also auch für --status, --verify und --issues.

Module

Datei Aufgabe
bin/git-sync-all Löst den eigenen Pfad (auch über Symlinks) auf, lädt alle Bibliotheken und steuert main().
lib/core.sh set -euo pipefail, Farben, Logging nach stderr, Cleanup-Trap, Git-Prüfung, Lock-Datei.
lib/config.sh Standardwerte, Laden der Config per source, Validierung, --init-config.
lib/cli.sh parse_args, apply_cli_overrides, Hilfetext, --setup-alias.
lib/repo-discovery.sh find-Suche nach .git-Verzeichnissen, Include-/Exclude-Filter, Remote-Prüfung.
lib/git-ops.sh Alle Git-Aufrufe, Konflikt-Erkennung, Abbruch von Rebase und Merge, Stash.
lib/sync.sh sync_repository, sync_all, Rückfragen, Statustabelle, Zusammenfassung.
lib/inventory.sh Inventar-Parser, verify_inventory, Erkennung und Löschung nicht gelisteter Repositories.
lib/issues.sh show_issues über die GitHub CLI.

Entwurfsentscheidungen

Tests und CI

make test startet tests/run-tests.sh, das alle tests/test-*.sh ausführt. Die Tests decken CLI-Parsing, Config, Repository-Suche, Git-Operationen, Konfliktbehandlung, Inventar und den Windows-Installer ab. make lint führt ShellCheck aus, make format prüft mit shfmt -i 4 -ci -bn, make check führt alles zusammen aus. Die GitHub-Actions-Pipeline läuft ShellCheck, shfmt, PSScriptAnalyzer für install.ps1 und die Tests auf Ubuntu sowie Windows.