Informationen zum Mergen von Unterstrukturen
Typischerweise wird eine Unterstruktur zusammengeführt, um ein Repository innerhalb eines anderen Repositorys einzubinden. Das „Unterrepository“ wird in einem Ordner des Haupt-Repositorys gespeichert.
Das Zusammenführen von Unterstrukturen lässt sich am besten anhand eines Beispiels erläutern. Dabei sind folgende Schritte notwendig:
- Erstellen eines leeren Repositorys namens
test
, das unser Projekt repräsentiert. - Hineinmergen eines anderen Repositorys als Unterstruktur namens
Spoon-Knife
. - Das Projekt
test
wird dieses Unterprojekt so verwenden, als sei es ein Teil desselben Repositorys. - Abrufen von Updates aus
Spoon-Knife
in unsertest
-Projekt.
Leeres Repository für das Zusammenführen einer Unterstruktur einrichten
-
Öffne TerminalTerminalGit Bash.
-
Erstelle ein neues Verzeichnis und navigiere zu diesem.
mkdir test cd test
-
Initialisieren Sie ein neues Git-Repository.
$ git init > Initialized empty Git repository in /Users/octocat/tmp/test/.git/
-
Erstelle eine neue Datei mit Commit.
$ touch .gitignore $ git add .gitignore $ git commit -m "initial commit" > [main (root-commit) 3146c2a] initial commit > 0 files changed, 0 insertions(+), 0 deletions(-) > create mode 100644 .gitignore
Ein neues Repository als Unterstruktur hinzufügen
-
Füge eine neue Remote-URL hinzu, die auf das separate Projekt von Interesse verweist.
$ git remote add -f spoon-knife https://github.com/octocat/Spoon-Knife.git > Updating spoon-knife > warning: no common commits > remote: Counting objects: 1732, done. > remote: Compressing objects: 100% (750/750), done. > remote: Total 1732 (delta 1086), reused 1558 (delta 967) > Receiving objects: 100% (1732/1732), 528.19 KiB | 621 KiB/s, done. > Resolving deltas: 100% (1086/1086), done. > From https://github.com/octocat/Spoon-Knife > * [new branch] main -> Spoon-Knife/main
-
Merge das
Spoon-Knife
-Projekt in das lokale Git-Projekt. Dadurch wird keine deiner Dateien lokal geändert, aber Git wird auf den nächsten Schritt vorbereitet.Bei Verwendung von Git 2.9 oder höher:
$ git merge -s ours --no-commit --allow-unrelated-histories spoon-knife/main > Automatic merge went well; stopped before committing as requested
Bei Verwendung von Git 2.8 oder älter:
$ git merge -s ours --no-commit spoon-knife/main > Automatic merge went well; stopped before committing as requested
-
Erstelle ein neues Verzeichnis namens spoon-knife, und kopiere den Git-Verlauf des
Spoon-Knife
-Projekts in dieses Verzeichnis.$ git read-tree --prefix=spoon-knife/ -u spoon-knife/main > fatal: refusing to merge unrelated histories
-
Erstelle einen Commit der Änderungen, um sie zu sichern.
$ git commit -m "Subtree merged in spoon-knife" > [main fe0ca25] Subtree merged in spoon-knife
Hier wurde nur ein Unterprojekt hinzugefügt. Du kannst jedoch eine beliebige Anzahl an Unterprojekten in ein Git-Repository integrieren.
Tip
Wenn du in Zukunft einen neuen Klon des Repositorys erstellst, werden die von dir hinzugefügten Remoterepositorys nicht für dich erstellt. Du musst sie erneut mithilfe des git remote add
-Befehls hinzufügen.
Mit Aktualisierungen und Änderungen synchronisieren
Wenn ein Subprojekt hinzugefügt wird, wird es nicht automatisch mit den vorgelagerten Änderungen synchronisiert. Du musst das Subprojekt mit dem folgenden Befehl aktualisieren:
git pull -s subtree REMOTE-NAME BRANCH-NAME
Im Beispiel oben würde dies so aussehen:
git pull -s subtree spoon-knife main