Übung - Modularisierung mit Subtrees
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: Einer ist git subtree
. Wir werden hier beide für folgende Anwendungsfälle erprobe:
- Module als Subtree einbinden
- Änderung aus einem Modul übernehmen
- Änderung in ein Modul übertragen
- Übergeordnetes Repo klonen
Subtrees
Bei diesem Ansatz werden Commits aus dem aus dem untergeordeten Repository übertragen und per merge
integriert, ganz ähnlich wie beim normalen pull
. Die Besonderheit ist, dass Zur Integraion dabei eine sogenanntes subtree
-Merge erfolgt, bei dem die Dateien in eine vorgegebenes Zielverzeichnis (prefix
) verschoben werden.
subtree add --prefix=<Zielverzeichnis> <Quellrepository>
: Initales einbetten.subtree pull --prefix=<Zielverzeichnis> <Quellrepository>
: Aktualisieren aus dem Quellrepository.subtree push--prefix=<Zielverzeichnis> <Quellrepository>
: Übertragen ins Quellrepository.
Tipp: Wer nicht mag, dass Subtree alle Commit aus dem Quellrepository holt, kann die Option --squash
nutzen.
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 Subtree einbinden
Starte im Verzeichnis git-uebungen/aufgaben/modularisierung-subtrees/application
.
Binde die Module frontend.git
und backend.git
per subtree add
ein. Untersuche dann die entstandene Verzeichnisstruktur.
application $ cd ..
Schritt 2 - Änderung aus einem Modul übernehmen
Starte im Verzeichnis git-uebungen/aufgaben/modularisierung-subtrees
.
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
und hole die Änderungen per subtree pull
ab. Sieh Dir das übertragene Commit an.
Schritt 3 - Änderung in ein Modul übertragen
Starte im Verzeichnis git-uebungen/aufgaben/modularisierung-subtrees
.
Gehe in application
ändere frontend/main.ts
und committe. Übertrage die Änderung per subtree 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-subtrees
.
Klone application
zu myapplication
. Untersuche die HEAD
Verzeichnisstruktur, und den Commit-graphen.