Hallo, Entdecker! An dieser Seite wird aktiv gearbeitet, oder sie wird noch übersetzt. Die neuesten und genauesten Informationen findest Du in unserer englischsprachigen Dokumentation.

Diese Version von GitHub Enterprise wird eingestellt am Diese Version von GitHub Enterprise wurde eingestellt am 2020-05-23. Es wird keine Patch-Freigabe vorgenommen, auch nicht für kritische Sicherheitsprobleme. Für eine bessere Leistung, verbesserte Sicherheit und neue Features nimm ein Upgrade auf die neueste Version von GitHub Enterprise vor. Wende Dich an den GitHub Enterprise-Support, um Hilfe beim Upgrade zu erhalten.

Artikelversion: Enterprise Server 2.17

Informationen zum Mergen von Git-Unterstrukturen

Wenn Sie mehrere Projekte innerhalb eines einzigen Repositorys verwalten müssen, können Sie die Unterstruktur mergen, um alle Referenzen zu verwalten.

Inhalt dieses Artikels

Typischerweise wird eine Unterstruktur gemergt, um ein Repository innerhalb eines Repositorys einzubinden. Das „Unterrepository“ wird in einem Ordner des Haupt-Repositorys gespeichert.

Das Mergen von Unterstrukturen lässt sich am besten anhand eines Beispiels erläutern. Dabei sind folgende Schritte notwendig:

  • Ein leeres Repository namens test erstellen, das das Projekt repräsentiert
  • Ein anderes Repository als Unterstruktur namens Spoon-Knife hineinmergen
  • Das Projekt test verwendet dieses Unterprojekt so, als wäre es Teil desselben Repositorys.
  • Aktualisierungen von Spoon-Knife in das Projekt test abrufen

Leeres Repository für das Mergen einer Unterstruktur einrichten

  1. Öffne TerminalTerminalGit Bash.
  2. Erstellen Sie ein neues Verzeichnis und navigieren Sie zu diesem.
    $ mkdir test
    $ cd test
  3. Initialisieren Sie ein neues Git-Repository.
    $ git init
    > Initialized empty Git repository in /Users/octocat/tmp/test/.git/
  4. Erstellen Sie eine neue Datei mit Commit.
    $ touch .gitignore
    $ git add .gitignore
    $ git commit -m "initial commit"
    > [master (root-commit) 3146c2a] initial commit
    >  0 files changed, 0 insertions(+), 0 deletions(-)
    >  create mode 100644 .gitignore

Ein neues Repository als Unterstruktur hinzufügen

  1. Fügen Sie eine neue Remote-URL hinzu, die auf das separate Projekt von Interesse verweist.

    $ git remote add -f spoon-knife git@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 git://github.com/octocat/Spoon-Knife
    >  * [new branch]      master     -> Spoon-Knife/master
  2. Mergen Sie das Projekt Spoon-Knife in das lokale Git-Projekt. Dadurch wird keine Ihrer 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/master
    > 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/master
    > Automatic merge went well; stopped before committing as requested
  3. Erstellen Sie ein neues Verzeichnis mit dem Namen spoon-knife, und kopieren Sie den Git-Verlauf des Projekts Spoon-Knife in dieses Verzeichnis.

    $ git read-tree --prefix=spoon-knife/ -u spoon-knife/master
  4. Erstellen Sie einen Commit der Änderungen, um sie zu sichern.

    $ git commit -m "Subtree merged in spoon-knife"
    > [master fe0ca25] Subtree merged in spoon-knife

Wir haben hier nur ein Subprojekt hinzugefügt. Sie können Sie jedoch eine beliebige Anzahl an Subprojekten in ein Git-Repository integrieren.

Tipp: Wenn Sie in Zukunft einen neuen Klon des Repositorys erstellen, werden die von Ihnen hinzugefügten Remotes nicht für Sie erstellt. Sie müssen Sie erneut mit dem Befehl git remote add hinzufügen.

Mit Aktualisierungen und Änderungen synchronisieren

Wenn ein Subprojekt hinzugefügt wird, wird es nicht automatisch mit den vorgelagerten Änderungen synchronisiert. Sie müssen das Subprojekt mit dem folgenden Befehl aktualisieren:

$ git pull -s subtree remotename branchname

Im Beispiel oben würde dies so aussehen:

$ git pull -s subtree spoon-knife master

Weiterführende Informationen

Menschliche Unterstützung einholen

Du kannst das Gesuchte nicht finden?

Kontakt