git submodule

Arbeitsbereiche & große Projekte

Bindet andere Repositorys in dein Repository ein


Der Befehl 'git submodule' bettet ein anderes Git-Repository in einen deiner Ordner ein, festgelegt auf einen genauen Commit. Dein Repository speichert nur, welcher Commit des Submoduls genutzt wird; das Submodul behält seine eigene Historie. So binden Projekte gemeinsame Bibliotheken ein, die sie nicht kopieren wollen. Beim Klonen braucht es --recurse-submodules (oder git submodule update --init), um sie zu holen.

Syntax

git submodule add <url> [<path>]
git submodule update --init --recursive
git submodule status
git submodule foreach <command>
[ ] optional| oder<arg> Platzhalter... wiederholbar--flag Option

Beispiele

Eine Bibliothek hinzufügen

git submodule add https://github.com/acme/ui.git lib/ui

Klont sie und speichert ihren Commit.


Nach dem Klonen

git submodule update --init --recursive

Jedes Submodul holen.


Mit ihnen klonen

git clone --recurse-submodules <url>

Alles in einem Schritt.


Auf den neuesten Stand

git submodule update --remote

Jedes Submodul auf den neuesten Commit seines Branches bringen.

Workflow-Beispiele

1
cd lib/ui && git pull

Das Submodul vorrücken

2
cd ../.. && git add lib/ui

Den neuen Commit festhalten

3
git commit -m "Update ui library"

Committen

Fehlerbehebung

Leerer Submodul-Ordner

Ursache: Submodule wurden nicht geholt

git submodule update --init --recursive

Tipps & Stolperfallen

Best Practices

  • ✓Setze git config --global submodule.recurse true, damit pull und checkout Submodule aktualisieren.

Häufige Fehler

  • ✗Ohne --recurse-submodules klonen und leere Ordner bekommen.
  • ✗In einem Submodul auf losgelöstem HEAD committen und die Arbeit verlieren.
  • ✗Vergessen, den neuen Submodul-Commit im übergeordneten Repository zu committen.

FAQ

A:

Nur die URL des Submoduls (in .gitmodules) und den genauen Commit, den es nutzt.