{"meta":{"title":"Informationen zum Zusammenführen von Git-Subtrees","intro":"Wenn du mehrere Projekte innerhalb eines einzigen Repositorys verwalten musst, kannst du einen Teilstrukturmerge verwenden, um alle Referenzen zu berücksichtigen.","product":"Erste Schritte","breadcrumbs":[{"href":"/de/get-started","title":"Erste Schritte"},{"href":"/de/get-started/using-git","title":"Git verwenden"},{"href":"/de/get-started/using-git/about-git-subtree-merges","title":"Informationen zum Zusammenführen von Git-Subtrees"}],"documentType":"article"},"body":"# Informationen zum Zusammenführen von Git-Subtrees\n\nWenn du mehrere Projekte innerhalb eines einzigen Repositorys verwalten musst, kannst du einen Teilstrukturmerge verwenden, um alle Referenzen zu berücksichtigen.\n\n## Informationen zum Mergen von Unterbäumen\n\nTypischerweise wird eine Subtree-Zusammenführung verwendet, um ein Repository innerhalb eines anderen Repositorys zu enthalten. Das „Unterrepository“ wird in einem Ordner des Haupt-Repositorys gespeichert.\n\nDer beste Weg, das Zusammenführen von Unterbäumen zu erklären, ist, es anhand eines Beispiels zu zeigen. Wir werden:\n\n* Erstellen eines leeren Repositorys namens `test`, das unser Projekt repräsentiert.\n* Einfügen eines anderen Repositorys als Subtree namens `Spoon-Knife`.\n* Das Projekt `test` wird dieses Unterprojekt so verwenden, als sei es ein Teil desselben Repositorys.\n* Updates von `Spoon-Knife` in unser `test`-Projekt übernehmen.\n\n## Ein leeres Repository für das Zusammenführen eines Subtrees einrichten\n\n1. Öffne <span class=\"platform-mac\">Terminal</span><span class=\"platform-linux\">Terminal</span><span class=\"platform-windows\">Git Bash</span>.\n\n2. Erstelle ein neues Verzeichnis und navigiere zu diesem.\n\n   ```shell\n   mkdir test\n   cd test\n   ```\n\n3. Initialisieren Sie ein neues Git-Repository.\n\n   ```shell\n   $ git init\n   > Initialized empty Git repository in /Users/octocat/tmp/test/.git/\n   ```\n\n4. Erstelle und committe eine neue Datei.\n\n   ```shell\n   $ touch .gitignore\n   $ git add .gitignore\n   $ git commit -m \"initial commit\"\n   > [main (root-commit) 3146c2a] initial commit\n   >  0 files changed, 0 insertions(+), 0 deletions(-)\n   >  create mode 100644 .gitignore\n   ```\n\n## Ein neues Repository als Subtree hinzufügen\n\n1. Füge eine neue Remote-URL hinzu, die auf das separate Projekt von Interesse verweist.\n\n   ```shell\n   $ git remote add -f spoon-knife https://github.com/octocat/Spoon-Knife.git\n   > Updating spoon-knife\n   > warning: no common commits\n   > remote: Counting objects: 1732, done.\n   > remote: Compressing objects: 100% (750/750), done.\n   > remote: Total 1732 (delta 1086), reused 1558 (delta 967)\n   > Receiving objects: 100% (1732/1732), 528.19 KiB | 621 KiB/s, done.\n   > Resolving deltas: 100% (1086/1086), done.\n   > From https://github.com/octocat/Spoon-Knife\n   >  * [new branch]      main     -> Spoon-Knife/main\n   ```\n\n2. 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.\n\n   Bei Verwendung von Git 2.9 oder höher:\n\n   ```shell\n   $ git merge -s ours --no-commit --allow-unrelated-histories spoon-knife/main\n   > Automatic merge went well; stopped before committing as requested\n   ```\n\n   Bei Verwendung von Git 2.8 oder älter:\n\n   ```shell\n   $ git merge -s ours --no-commit spoon-knife/main\n   > Automatic merge went well; stopped before committing as requested\n   ```\n\n3. Erstelle ein neues Verzeichnis namens **spoon-knife**, und kopiere den Git-Verlauf des `Spoon-Knife`-Projekts in dieses Verzeichnis.\n\n   ```shell\n   $ git read-tree --prefix=spoon-knife/ -u spoon-knife/main\n   > fatal: refusing to merge unrelated histories\n   ```\n\n4. Erstelle einen Commit der Änderungen, um sie zu sichern.\n\n   ```shell\n   $ git commit -m \"Subtree merged in spoon-knife\"\n   > [main fe0ca25] Subtree merged in spoon-knife\n   ```\n\nHier wurde nur ein Unterprojekt hinzugefügt. Du kannst jedoch eine beliebige Anzahl an Unterprojekten in ein Git-Repository integrieren.\n\n> \\[!TIP]\n> Wenn du in Zukunft ein neues Klon des Repositories erstellst, werden die von dir hinzugefügten Remote-Verbindungen nicht für dich erstellt. Du musst sie erneut mithilfe [des `git remote add`-Befehls](/de/get-started/git-basics/managing-remote-repositories) hinzufügen.\n\n## Synchronisieren mit Aktualisierungen und Änderungen\n\nWenn ein Subprojekt hinzugefügt wird, wird es nicht automatisch mit den vorgelagerten Änderungen synchronisiert. Du musst das Subprojekt mit dem folgenden Befehl aktualisieren:\n\n```shell\ngit pull -s subtree REMOTE-NAME BRANCH-NAME\n```\n\nIm Beispiel oben würde dies so aussehen:\n\n```shell\ngit pull -s subtree spoon-knife main\n```\n\n## Weitere Informationen\n\n* [Das Kapitel „Advanced Merging“ (Erweitertes Mergen) aus dem *Pro Git*-Buch](https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging)\n* [Wie man die Teilbaum-Mergestrategie verwendet](https://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html)"}