Ü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/
Schritt 0 - START
$ 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.