Suche…


Submodul hinzufügen

Sie können ein anderes Git-Repository als Ordner in Ihr Projekt aufnehmen, das von Git verfolgt wird:

$ git submodule add https://github.com/jquery/jquery.git

Sie sollten die neue .gitmodules Datei hinzufügen und .gitmodules . Dies teilt Git mit, welche Submodule geklont werden sollen, wenn das git submodule update wird.

Klonen eines Git-Repositorys mit Submodulen

Wenn Sie ein Repository klonen, das Submodule verwendet, müssen Sie diese initialisieren und aktualisieren.

$ git clone --recursive https://github.com/username/repo.git

Dadurch werden die referenzierten Submodule geklont und in den entsprechenden Ordnern (einschließlich Submodulen innerhalb von Submodulen) abgelegt. Dies ist gleichbedeutend mit der Ausführung von git submodule update --init --recursive unmittelbar nachdem der Klon beendet ist.

Aktualisieren eines Submoduls

Ein Submodul verweist auf ein bestimmtes Commit in einem anderen Repository. Führen Sie run aus, um den genauen Status zu überprüfen, der für alle Submodule referenziert wird

git submodule update --recursive

Anstatt den Status zu verwenden, auf den verwiesen wird, möchten Sie in Ihrem lokalen Checkout den neuesten Status dieses Submoduls auf einer Fernbedienung aktualisieren. Um alle Submodule mit einem einzigen Befehl auf den neuesten Stand auf der Fernbedienung auszuchecken, können Sie verwenden

git submodule foreach git pull <remote> <branch>

oder verwenden Sie die Standardgit- git pull Argumente

git submodule foreach git pull

Beachten Sie, dass dies nur Ihre lokale Arbeitskopie aktualisiert. Beim Ausführen von git status wird das Submodul-Verzeichnis als fehlerhaft angezeigt, wenn es sich aufgrund dieses Befehls geändert hat. Um stattdessen Ihr Repository zu aktualisieren, um auf den neuen Status zu verweisen, müssen Sie die Änderungen festschreiben:

git add <submodule_directory>
git commit

Wenn Sie git pull , kann es zu einigen Änderungen kommen, bei denen Konflikte auftreten können, wenn Sie git pull So können Sie git pull --rebase , um Ihre Änderungen nach oben zurückzuspulen. Meist verringert dies die Konfliktwahrscheinlichkeit. Es zieht auch alle Äste nach lokal.

git submodule foreach git pull --rebase

Um den neuesten Status eines bestimmten Submoduls zu überprüfen, können Sie Folgendes verwenden:

git submodule update --remote <submodule_directory>

Festlegen eines Submoduls, um einem Zweig zu folgen

Ein Submodul wird immer bei einem bestimmten Commit SHA1 (dem "gitlink", spezieller Eintrag im Index des übergeordneten Repos) ausgecheckt

Man kann jedoch anfordern, dieses Submodul auf das letzte Commit eines Zweigs des Submoduls Remote Repo zu aktualisieren.

Anstatt in jedes Submodul zu gehen, eine git checkout abranch --track origin/abranch, git pull , können Sie (aus dem übergeordneten Repo) einfach git checkout abranch --track origin/abranch, git pull tun:

git submodule update --remote --recursive

Da sich der SHA1 des Submoduls ändern würde, müssten Sie dem noch folgen:

git add .
git commit -m "update submodules"

Das setzt voraus, dass die Submodule waren:

  • entweder mit folgendem Zweig hinzugefügt:

      git submodule -b abranch -- /url/of/submodule/repo
    
  • oder konfiguriert (für ein vorhandenes Submodul), um einem Zweig zu folgen:

      cd /path/to/parent/repo
      git config -f .gitmodules submodule.asubmodule.branch abranch
    

Entfernen eines Submoduls

1.8

Sie können ein Submodul (z. B. das the_submodule ) entfernen, indem Sie the_submodule aufrufen:

$ git submodule deinit the_submodule
$ git rm the_submodule 
  • git submodule deinit the_submodule Löschungen the_submodule s'Eintrag von .git / config. Dies schließt das Submodul von git submodule update , git submodule sync und git submodule foreach Aufrufe aus und löscht seinen lokalen Inhalt (Quelle) . Dies wird auch nicht als Änderung in Ihrem übergeordneten Repository angezeigt. git submodule init und git submodule update stellen das Submodul wieder her, ohne dass Änderungen in Ihrem übergeordneten Repository vorgenommen werden müssen.

  • git rm the_submodule entfernt das Submodul aus dem Arbeitsbaum. Die Dateien werden ebenso wie der Eintrag der Submodule in der .gitmodules Datei (Quelle) .gitmodules . Wenn nur git rm the_submodule (ohne vorheriges git submodule deinit the_submodule ausgeführt wird, bleibt der Eintrag der Submodule in Ihrer .git / config -Datei erhalten.

1.8

Von hier genommen :

  1. Löschen Sie den relevanten Abschnitt aus der .gitmodules Datei.
  2. Stufe der .gitmodules Änderungen git add .gitmodules
  3. Löschen Sie den relevanten Abschnitt aus .git/config .
  4. Führen Sie git rm --cached path_to_submodule (kein git rm --cached path_to_submodule Schrägstrich).
  5. Führen Sie rm -rf .git/modules/path_to_submodule
  6. Commit git commit -m "Removed submodule <name>"
  7. Löschen Sie die jetzt nicht protokollierten Submodul-Dateien
  8. rm -rf path_to_submodule

Verschieben eines Submoduls

1.8

Lauf:

$ git mv old/path/to/module new/path/to/module
1.8
  1. Bearbeiten Sie .gitmodules und ändern Sie den Pfad des Submoduls entsprechend. git add .gitmodules mit git add .gitmodules in den Index git add .gitmodules .

  2. Erstellen Sie bei Bedarf das übergeordnete Verzeichnis des neuen Speicherorts des Submoduls ( mkdir -p new/path/to ).

  3. Verschieben Sie den gesamten Inhalt vom alten in das neue Verzeichnis ( mv -vi old/path/to/module new/path/to/submodule ).

  4. Stellen Sie sicher, dass Git dieses Verzeichnis verfolgt ( git add new/path /to ).

  5. Entfernen Sie das alte Verzeichnis mit git rm --cached old/path/to/module .

  6. Verschieben Sie das Verzeichnis .git/modules/ old/path/to/module mit seinem gesamten Inhalt nach .git/modules/ new/path/to/module .

  7. Bearbeiten Sie die Datei .git .git/modules/ new/path/to /config , und stellen Sie sicher, dass das Worktree-Element auf die neuen Speicherorte verweist. In diesem Beispiel sollte es also worktree = ../../../../../ old/path/to/module . In der Regel sollten sich an dieser Stelle zwei weitere .. dann Verzeichnisse im direkten Pfad befinden. . Bearbeiten Sie die Datei new/path/to/module /.git , stellen Sie sicher , dass der Pfad in ihm auf den richtigen neuen Standort innerhalb des Hauptprojekt .git Ordner, so in diesem Beispiel gitdir: ../../../.git/modules/ new/path/to/module .

    git status Ausgabe des git status sieht danach so aus:

     # On branch master
     # Changes to be committed:
     #   (use "git reset HEAD <file>..." to unstage)
     #
     #       modified:   .gitmodules
     #       renamed:    old/path/to/submodule -> new/path/to/submodule
     #
    
  8. Bestätigen Sie anschließend die Änderungen.


Dieses Beispiel aus Stack Overflow von Axel Beckert



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow