Top-Level-Projekt für die Weiterentwicklung von Jameica und dessen Plugins
Dieses Projekt bietet einen zentralen Einstiegspunkt für die Programmierung. Somit kann direkt gestartet werden, ohne jedes Projekt einzeln suchen, herunterladen und in der IDE konfigurieren zu müssen.
Dieses Projekt nutzt Git Submodule zum Einbinden der unterschiedlichen Quellen. So können die einzelnen Teilprojekte individuell gepflegt werden. Updates werden so automatisch bei allen Nutzern sichtbar. Hier konzentrieren wir uns auf die Grundlagen im Umgang mit diesem Repository. Mehr Details, Hintergründe und Möglichkeiten von Git Submodule sind im Git-Buch beschrieben.
-
Repository herunterladen
Zuerst benötigen wir eine lokale Kopie von diesem Projekt. Nutze dazu regulär
git clone <URL>
, um nur dieses Repository herunterzuladen. Nun sollten die Unterverzeichnisse existieren, die auf andere Repositories verweisen, jedoch sind diese leer.Man könnte auch
git clone --recursive-submodules <URL>
nutzen, aber dann sind Schritt 2 und 3 etwas komplizierter. -
eigenen Fork einbinden
Sicher möchtest Du dieses Repository nicht nur nutzen, um den anderen Entwicklern bei der Arbeit zuzuschauen... 😉
Da Du aber wahrscheinlich keinen Schreibzugriff auf die originalen Quellen hast, kannst Du Deine Änderungen nicht einfach so wieder hochlanden. Deswegen, falls noch nicht geschehen, solltest Du spätestes jetzt einen Fork von dem Teilprojekt erstellen, wo Du Änderungen einbringen möchtest. Um nun Dein Fork-Repository zu verwenden, muss die URL (und ggf. der Branch) für das spezifische Teilprojekt bei Dir lokal angepasst werden.
Öffne dazu die Datei
.gitmodules
und ändere die Werte entsprechend. -
Dateien holen
Um den Inhalt der referenzierten Projekte zu holen, führe
git submodule update --init --recursive --remote
aus. Jetzt wird automatisch jedes Subprojekt heruntergeladen und der letzte Stand aus dem hinterlegtem Branch ausgecheckt.⚠️ Manchmal scheint das nicht sofort zu klappen. Ich habe die Ursache noch nicht herausgefunden. Mein "Trick" ist es, das Folgende mehrfach zu wiederholen und dabei stets den Erfolg zu überprüfen:# Schritt 1: alle Submodule aushängen git submodule deinit --all # sollte nichts anzeigen git config --list | grep submodule # Submodule neu initialisieren und neuesten Stand abrufen git submodule update --init --recursive --remote --force --checkout # hier sollten nun die angepassten URLs stehen git config --list | grep submodule # Konfiguration synchronisieren git submodule sync --recursive # spätestens jetzt sollte alles passen, sonst nochmal von vorn git config --list | grep submodule # # Schritt 2: Falls OK, dann nun den korrekten Branch auschecken (wegen "detached head") und neuesten Stand holen git submodule foreach "git checkout master; git pull"
Nutze nicht git pull
sondern git pull --recurse-submodules
, um die neuesten Updates zu holen.
Der Befehl holt nun die Änderungen aus dem Projekt und aus allen Submodulen, er aktualisiert jedoch die Submodule nicht!
Dazu muss ein zusätzliches git submodule update --recursive --remote
ausgeführt werden.
--remote
wird der letzte Commit im Branch verwendet, ohne stattdessen der Commit, der explizit in diesem Reporsitory hinterlegt wurde:
$ git pull --recurse-submodules
From https://github.com/octocat/MainProject
fb9093c..0a24cfc master -> origin/master
Fetching submodule MySubModule
From https://github.com/octocat/MySubModule
c3f01dc..c87d55d stable -> origin/stable
Updating fb9093c..0a24cfc
$ git submodule update --recursive
Submodule path 'sub/MySubModule': checked out '71045ebb1a2144a562bda72b871fc7d58c3f01dc'
$ git submodule update --recursive --remote
Submodule path 'sub/MySubModule': checked out '91cbe3b93cfb2980b784ad3a00e622f7ac87d55d'