Was Submodule sind
Ein Submodul ist ein Git-Repository, das in einem anderen verschachtelt ist. Das ubergeordnete Repo zeichnet die URL des Submoduls und einen spezifischen Commit-SHA auf, sodass jeder, der das ubergeordnete klont, genau den gemeinsam getesteten Code abrufen kann.
Submodul hinzufugen
git submodule add https://github.com/example/lib third_party/lib
git commit -m "Add lib submodule"
Projekt mit Submodulen klonen
git clone --recurse-submodules https://github.com/you/parent
git submodule update --init --recursive
Auf neuen Submodul-Commit aktualisieren
cd third_party/lib
git fetch
git checkout v2.0.0
cd ../..
git add third_party/lib
git commit -m "Bump lib to v2.0.0"
Diff und Status
git diff --submodule=log
git submodule status
git submodule summary
Foreach
git submodule foreach 'git fetch --all'
git submodule foreach --recursive 'git checkout main && git pull'
Haufige Fehler
--init beim ersten Klonen vergessen lasst Submodul-Verzeichnisse leer. Im Submodul bearbeiten und im Parent committen ohne vorher das Submodul zu pushen.
Branch-Tracking-Falle
Submodule checken am aufgezeichneten SHA detached HEAD aus.