Git Submodule Maven Project
Ein Projekt mit einigem Umfang an Funktionalität kann schnelle eine grosse Codebasis bedeuteten.
Es wird wichtig, das Projekt zu strukturieren, Teile des Codes zu isolieren und in Module zu organisieren.
Diese Module kann man in eigenen Git-Repositories verwalten.
Und im Hauptprojekt als Git Submodule einbinden.
Guides im Internet:
Machen Sie sich mit Git‑Submodulen vertraut:
https://git-scm.com/book/en/v2/Git-Tools-Submodules
Das Prinziep Maven-Projektes mit Git-Submodulen anhand eines Beispiels erklärt.
Die Ausgangslage ist das fertig gestellte Multi-Modul-Maven-Projekt aus dem vorherigen Kapitel.
Es besteht aus einem Parent Projekt, einem Modul app-main und einem Modul greeter-lib.
Struktur:
- multimodulemaven
- .idea
- .mvn
- app-main
- src
- pom.xml
- src
- submodules
- greeter-lib
- src
- pom.xml
- .gitignore
- pom.xml
Das Modul greeter-lib muss in einem eigenen Git-Repository verwaltet werden.
Das Parent Projekt und das Modul app-main werden zusammen in einem anderen Git-Repository verwaltet.
Schritt 1 greeter-lib mit eigenen Git-Repository
- Öffnen Sie in einer Console/Terminal das Verzeichnis
greeter-lib. - Initialisieren Sie dort ein neues Git-Repository.
- Kontrollieren Sie, ob Sie im Brunch main oder master sind. Falls nicht erstellen Sie den Branch.
- Bearbeiten Sie die Datei .gitignore, um Dateien der Entwicklungsumgebung, Build-Ordner ... nicht dem Git-Repository hinzugefügt werden.
- Fügen Sie vorhandenen Dateien dem Git-Repository hinzu.
- Erstellen Sie ein Remote-Repository zBsp auf Git-Hub.
- Verbinden Sie das lokale Repository mit dem Remote-Repository.
- Übertragen Sie die Daten in das Remote-Repository
Im Verzeichnis greeter-lib ist nun der Ordner .git enthalten.
Im Parent-Projekt hat sich nichts verändert
Schritt 2 Git-Repository für Hauptprojekt und Module app-main
Wichtig: Man muss aufpassen, dass die Dateien des Moduls greeter-lib nicht versehentlich im Hauptprojekt-Repository landen.
- Wechseln Sie in des Verzeichnis
multimodulemavendes Hauptprojektes. - Initialisieren Sie dort ein neues Git-Repository.
- ** Und so fügen Sie das Modul `greeter-lib' als Git-Submodule hinzu:**
git submodule add <git-url des greeter-lib Git-Repositories> <Name des lokalen Folders der greeter-lib>
# Beispiel:
git submodule add https://github.com/musterpaul/greeter_lib greeter-lib
- git erstellt die Datei
.gitmodulesund hält dort die Daten zum Submodule fest. - Bearbeiten Sie die Datei .gitignore, um Dateien der Entwicklungsumgebung, Build-Ordner ... nicht dem Git-Repository hinzugefügt werden. .gitmodules nicht in .gitignore eintragen.
- Kontrollieren Sie, ob Sie im Brunch main oder master sind. Falls nicht erstellen Sie den Branch.
- Fügen Sie vorhandenen Dateien dem Git-Repository hinzu.
- Erstellen Sie ein Remote-Repository zBsp auf Git-Hub.
- Verbinden Sie das lokale Repository mit dem Remote-Repository.
-
Übertragen Sie die Daten in das Remote-Repository
-
Betrachten Sie im Browser das Repository des Hauptprojektes.
Das Submodule wird dort als Referenz eingetragen. Klickt man darauf, so öffnet sich das Repositories vongreeter-lib
app-main hat kein eigenes Git-Repository, die Dateien des Moduls werden im Hauptrepository gespeichert.
- multimodulemaven
- .git
- .gitignore
- .gitmodules
- .idea
- .mvn
- app-main
- src
- pom.xml
- src
- submodules
- greeter-lib
- .git
- .gitignore
- src
- pom.xml
- .gitignore
- pom.xml
Vorteil von Git-Submodulen
Der Vorteil des Git-Submodules ist, dass wenn man das Hauptprojekt clont, man auch gleich alle Submodule clonen kann. Dabei wird lokal eine Verzeichnisstrukter mit dem Hauptprojekt, dem Module app-main und dem Modul greeter-lib erstellt.
Beachten, wenn das Git-Repository des Submodules verändert wurde
Ein Submodul ist für git kein normaler Ordner.
Das Hauptprojekt speichert nur einen Commit-Hash des Submoduls.
Dieser Commit-Hash wird als Referenz verwendet, um die Version des Submoduls zu bestimmen, die im Hauptprojekt verwendet wird.
Das heisst, bei Änderungen im Submodule muss man auch im Hauptprojekt die Referenz auf die neue Version des Submodules aktualisieren.
Vertiefen
Jetzt da Sie das Prinzip des Git-Submodules ein erstes Mal angewendet haben, können Sie den obigen Guide wahrscheinlich besser nachvollziehen. Schauen Sie in den Guide nochmals an.
https://git-scm.com/book/en/v2/Git-Tools-Submodules
Fragen zum Verständnis
- Was ist ein Git-Submodule?
- Wie erstellt man ein Git-Submodule?
- In welcher Datei werden die Git-Submodule verwaltet?
-
Wie clont man das Hauptprojekt mit all seinen Submodulen?
-
Wie speichert man eine im Submodule 'greeter-lib` geänderte Datei im Git-Repository des Submodules?
- Wie speichert man eine im Hauptprojekt geänderte Datei im Git-Repository des Hauptprojektes?
-
Wie speichert man eine im Submodule 'app-main` geänderte Datei im Git-Repository des Hauptprojektes?
-
Wie speichert das Hauptprojekt die Referenz auf die Version des Submodules
greeter-lib? - Wie aktualisiert man diese Referenz im Hauptprojekt?