1.9 KiB
1.9 KiB
fix-submodule-branches-prod.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:
- Wenn in
.gitmoduleseinbranchkonfiguriert ist, wird dieser verwendet. - Wenn kein
branchkonfiguriert ist, wird der Default-Branch vonoriginverwendet. - Standardmäßig wird nur bei
detached HEADumgeschaltet. - Optional kann mit
--force-switchauch von einem anderen Branch auf den Ziel-Branch gewechselt werden. - Submodule mit uncommitted changes werden aus Sicherheitsgründen übersprungen.
- Verschachtelte Submodule werden rekursiv verarbeitet.
Voraussetzungen
- Bash
- Git
Nutzung
chmod +x fix-submodule-branches-prod.sh
./fix-submodule-branches-prod.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
./fix-submodule-branches-prod.sh --dry-run /pfad/zum/repo-root
./fix-submodule-branches-prod.sh --init-missing /pfad/zum/repo-root
./fix-submodule-branches-prod.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.