# fix-submodule-branches.sh Bash-Script zum rekursiven Prüfen von Git-Submodulen und Umschalten von `detached HEAD` auf den passenden Branch. ## Verhalten Für jedes Submodul gilt: 1. Wenn in `.gitmodules` ein `branch` konfiguriert ist, wird **dieser** verwendet. 2. Wenn **kein** `branch` konfiguriert ist, wird der **Default-Branch von `origin`** verwendet. 3. Standardmäßig wird **nur bei `detached HEAD`** umgeschaltet. 4. Optional kann mit `--force-switch` auch von einem anderen Branch auf den Ziel-Branch gewechselt werden. 5. Submodule mit **uncommitted changes** werden aus Sicherheitsgründen **übersprungen**. 6. Verschachtelte Submodule werden rekursiv verarbeitet. ## Voraussetzungen - Bash - Git ## Nutzung ```bash chmod +x fix-submodule-branches.sh ./fix-submodule-branches.sh [optionen] [root-dir] ``` ## Optionen - `-n`, `--dry-run` Zeigt nur an, was ausgeführt würde. - `--force-switch` Wechselt auch dann auf den Ziel-Branch, wenn das Submodul bereits auf einem anderen Branch steht. - `--init-missing` Initialisiert fehlende/nicht initialisierte Submodule automatisch. - `-h`, `--help` Zeigt die Hilfe an. ## Beispiele ```bash ./fix-submodule-branches.sh --dry-run /pfad/zum/repo-root ./fix-submodule-branches.sh --init-missing /pfad/zum/repo-root ./fix-submodule-branches.sh --init-missing --force-switch /pfad/zum/repo-root ``` ## Ausgabe Am Ende wird eine Zusammenfassung ausgegeben, z. B.: - Anzahl geprüfter Repositories mit `.gitmodules` - Anzahl gefundener Submodule - Anzahl gefixter `detached HEAD`/Branch-Wechsel - Anzahl bereits korrekter Branches - Anzahl übersprungener dirty Submodule - Anzahl übersprungener Fälle/Fehler ## Sicherheitsverhalten Das Script überspringt Submodule mit lokalen Änderungen (`git status --porcelain` nicht leer), damit keine uncommitted Änderungen durch Branch-Wechsel gefährdet werden.