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
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öschungenthe_submodule
s'Eintrag von .git / config. Dies schließt das Submodul vongit submodule update
,git submodule sync
undgit 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
undgit 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 nurgit rm the_submodule
(ohne vorherigesgit submodule deinit the_submodule
ausgeführt wird, bleibt der Eintrag der Submodule in Ihrer .git / config -Datei erhalten.
Von hier genommen :
- Löschen Sie den relevanten Abschnitt aus der
.gitmodules
Datei. - Stufe der
.gitmodules
Änderungengit add .gitmodules
- Löschen Sie den relevanten Abschnitt aus
.git/config
. - Führen Sie
git rm --cached path_to_submodule
(keingit rm --cached path_to_submodule
Schrägstrich). - Führen Sie
rm -rf .git/modules/path_to_submodule
- Commit
git commit -m "Removed submodule <name>"
- Löschen Sie die jetzt nicht protokollierten Submodul-Dateien
-
rm -rf path_to_submodule
Verschieben eines Submoduls
Lauf:
$ git mv old/path/to/module new/path/to/module
1.8 Bearbeiten Sie .gitmodules
und ändern Sie den Pfad des Submoduls entsprechend. git add .gitmodules
mit git add .gitmodules
in den Index git add .gitmodules
.
Erstellen Sie bei Bedarf das übergeordnete Verzeichnis des neuen Speicherorts des Submoduls ( mkdir -p new/path/to
).
Verschieben Sie den gesamten Inhalt vom alten in das neue Verzeichnis ( mv -vi old/path/to/module new/path/to/submodule
).
Stellen Sie sicher, dass Git dieses Verzeichnis verfolgt ( git add new/path /to
).
Entfernen Sie das alte Verzeichnis mit git rm --cached old/path/to/module
.
Verschieben Sie das Verzeichnis .git/modules/ old/path/to/module
mit seinem gesamten Inhalt nach .git/modules/ new/path/to/module
.
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
#
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