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 clone
mit dem --recursive
Flag 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 update
das ü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
cd
wie 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 cd
in 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