Was sind Git-Submodule und wie werden sie verwendet?

Was sind Git-Submodule und wie werden sie verwendet?

Git-Submodule sind eine Möglichkeit, ein Git-Repository als Unterverzeichnis eines anderen Repositorys einzubinden. Diese Art der Quellcode-Verschachtelung kann für Projekte, die eine genauere Kontrolle über ihre Abhängigkeiten und den Erstellungsprozess wünschen, sehr nützlich sein und ist einfach einzurichten.

Warum Submodule verwenden?

Wenn Sie einem Git-Repository ein Submodul hinzufügen, erstellen Sie im Wesentlichen eine Verbindung zwischen den beiden Repositorys. Das Haupt-Repository und das Submodul-Repository können unabhängig voneinander aktualisiert werden. Das übergeordnete Repository enthält eine Remote-URL sowie einen Verweis auf die ausgecheckte Commit-ID im Verlauf des Submoduls. Wenn Sie das übergeordnete Repository klonen, werden auch die Untermodule geklont.

Dies kann nützlich sein, wenn Sie ein Projekt haben, das vom Code eines anderen Projekts abhängt, und Sie die beiden Projekte (und ihre Versionsverläufe) getrennt halten möchten, aber dennoch problemlos mit beiden arbeiten möchten.

Die primäre Alternative zu Submodulen ist die Verwendung von Paketmanagern wie NPM, NuGet oder Maven. Paketmanager stellen ein zentrales Repository mit Paketen und Bibliotheken bereit, die einfach installiert und aktualisiert werden können. Sie müssen jedoch eine bestimmte Version jedes Pakets veröffentlichen, das Sie nutzen möchten. Und wenn Ihr Code privat ist, müssen Sie Ihre eigene private Paketregistrierung verwenden.

Mit Git-Submodulen können Sie Abhängigkeiten genauer verwalten als mit den meisten Paketmanagern. Mit Submodulen können Sie genau auswählen, welche Versionen jeder Abhängigkeit Sie in Ihr Projekt aufnehmen möchten, und es ist einfacher, die Commit-ID des Submoduls zu aktualisieren, als ein neues Paket zu veröffentlichen.

Submodule erleichtern auch die Wartung und Verwendung von Zweigen gängiger Bibliotheken, wofür sich viele Unternehmen entscheiden, wenn zusätzliche Funktionen oder Anpassungen erforderlich sind. Wenn Sie letztendlich ein Repository für das Modul verwalten und eine detaillierte Kontrolle über Ihre Abhängigkeiten benötigen, sollten Sie die Verwendung von Submodulen anstelle von Paketmanagern in Betracht ziehen.

So verwenden Sie Git-Submodule

Wenn Sie ein Repository klonen, das bereits Submodule verwendet, wurde der Großteil der Arbeit bereits für Sie erledigt. Ihr Git-Client sollte das Submodul-Repository automatisch klonen und herunterladen und es sollte aktualisiert werden, wenn andere Betreuer Änderungen am Submodul vornehmen.

Ist dies nicht der Fall, müssen Sie möglicherweise git clonemit dem --recursiveFlag ausführen, wodurch alle Submodule gescannt und aktualisiert werden.

git clone --recurse-submodules URL

Das Hinzufügen eines neuen Submoduls ist ziemlich einfach. Wenn Sie ein brandneues Submodul aus einem Quell-Repository hinzufügen, müssen Sie nur Folgendes ausführen git submodule add:

git submodule add URL submodule_directory

Dadurch wird das Submodul-Repository von der URL heruntergeladen und in den Ordner geklont submodule_directory.

Wenn Sie jedoch einen vorhandenen Ordner konvertieren möchten, ist der Vorgang etwas komplizierter. Sie können unsere Anleitung zum Konvertieren eines Verzeichnisses in ein Submodul hier lesen . Der Vorgang umfasst jedoch das erneute Klonen Ihres Haupt-Repositorys, das Filtern des Commit-Verlaufs, sodass nur das Modulverzeichnis enthalten ist, und das anschließende Verschieben des Submoduls in ein neues Repository.

Sobald Sie das Submodul hinzugefügt haben, müssen Sie die Änderungen in das übergeordnete Repository übernehmen. Dadurch wird die Konfiguration für alle anderen aktualisiert, die das übergeordnete Repository abrufen.

git commit -m "Added submodule submodule_directory"

Git-Submodule aktualisieren

Wenn jemand anderes das Submodul aktualisiert hat oder Sie Updates aus dem Repository des Submoduls abrufen müssen, sollten Sie Folgendes verwenden git submodule update:

git submodule update --remote

Wenn Sie jedoch selbst Änderungen vornehmen müssen, wird es etwas schwieriger. Das Vornehmen von Änderungen am Code in Git-Submodulen erfordert im Vergleich zum Aktualisieren von Code in einem regulären Git-Repository etwas mehr Sorgfalt, und Sie haben im Allgemeinen zwei Möglichkeiten:

  • Nehmen Sie die Änderungen in einem separaten Repository für das Submodul vor und übertragen und aktualisieren Sie sie wie gewohnt. Sie müssen git submodule updatedas übergeordnete Repository ausführen, um die neuen Änderungen abzurufen.
  • Nehmen Sie die Änderungen im übergeordneten Repository vor. Da es sich bei einem Submodul im Grunde um ein eingebettetes Git-Repository handelt, können Sie cdwie gewohnt in das Submodulverzeichnis wechseln und Git-Befehle ausführen. Dies ist einer der Hauptvorteile von Submodulen, da Sie separate Repos verwalten und gleichzeitig an beiden arbeiten können.

Wenn Sie Änderungen im übergeordneten Repository vornehmen, müssen Sie cdin das Submodul gehen und Folgendes aktualisieren:

cd submodule_dir

git commit -am "submodule commit"


git push

Gehen Sie dann zurück zum übergeordneten Repository und übertragen Sie die Aktualisierungen des Submoduls in das Repository des übergeordneten Moduls:

cd. .

git commit -am "updated submodule"


git push

Sie sollten Änderungen sowohl im Github-Repository des Submoduls als auch im übergeordneten Repository sehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert