Übung - Modularisierung mit Submodules
Es geht darum, wie man in Git ein übergreifendes Repository erstellt, dass Inhalte aus mehreren anderen Repository einbettet.
Git bietet dazu zwei unterschiedliche Ansätze: Eine davon ist git submodule
. Wir werden hier beide für folgende Anwendungsfälle erprobe:
- Module als Submodule einbinden
- Änderung aus einem Modul übernehmen
- Änderung in ein Modul übertragen
- Übergeordnetes Repo klonen
Submodules
Bei einem Submodule werden Git-Repositorys ineinander geschachtelt. Das übergeordnete Repo merkt sich dann für jedes untergeordnete Repo (submodule)
- von wo geklont werden soll (URL) und
- welche Revison benötigt wird.
Da die Submodules in ihren Verzeichnissen eigenständige Git-Repositorys sind, kann man dort mit den üblichen Befehlen wie switch
, pull
oder auch commit
arbeiten. Wenn man die Änderungen im übergeordneten Repo übernehmen möchen, tut dies durch ein top-level-commit.
git submodule add <Quellrepository> <Zielverzeichnis>
:> Initales einbetten. Danach Commit erforderlich.git submodule update --init
:> Holt beziehungsweise aktualisiert. Nach dem Klonen erforderlich.
Setup
Zwei separate Repositorys frontend
und backend
sind vorhanden. Diese sollen in ein übergeordnetes Repo application
eingebettet werden.
application/
|- frontend/
|- backen/
$ cd application
Schritt 1 - Module als Submodule einbinden
Starte im Verzeichnis git-uebungen/aufgaben/modularisierung-submodules/application
.
Binde die Module frontend.git
und backend.git
per submodule add
ein. Untersuche dann die entstandene Verzeichnisstruktur.
application $ cd ..
Schritt 2 - Änderung aus einem Modul übernehmen
Starte im Verzeichnis git-uebungen/aufgaben/modularisierung-submodules
.
Gehe in das Repo backend
ändere die Datei service.java
, committe und pushe. Sie Dir das entstandene Commit an (show --stat
) Gehe in das Repo application/backend
und hole die Änderungen per pull
ab. Sieh Dir das übertragene Commit an.
Schritt 3 - Änderung in ein Modul übertragen
Starte im Verzeichnis git-uebungen/aufgaben/modularisierung-submodules
.
Gehe in subtrees/frontend
ändere main.ts
und committe. Übertrage die Änderung per push
nach frontend.git
. Sieh Dir das übertragene Commit in frontend.git
an.
Schritt 4 - Übergeordnetes Repo klonen
Starte im Verzeichnis git-uebungen/aufgaben/modularisierung-submodules
.
Klone application
zu myapplication
. Untersuche die Verzeichnisstruktur. Vergiß nicht, ein submodule update
auszuführen.