Ich versuche, ein Submodul in ein Repo zu integrieren. Das Problem ist, dass beim Klonen des übergeordneten Repos der Submodul-Ordner vollständig leer ist.
Gibt es eine Möglichkeit, dies so zu gestalten, dass git clone parent_repo
tatsächlich Daten in den Submodul-Ordner gestellt werden?
Zum Beispiel http://github.com/cwolves/sequelize/tree/master/lib/ , nodejs-mysql-native
zeigt auf einem externen git Submodul, aber wenn ich die Kasse sequelize
Projekt, dass Ordner leer ist .
git
git-submodules
Kennzeichen
quelle
quelle
git clone --recurse-submodules --remote-submodules
(Q3 2019 Git 2.23): Er klont und aktualisiert die Submodule in einem Befehl. Siehe meine bearbeitete Antwort unten .Antworten:
Ab Version 2.13 von Git
--recurse-submodules
kann anstelle von--recursive
:Anmerkung des Herausgebers:
-j8
ist eine optionale Leistungsoptimierung, die in Version 2.8 verfügbar wurde und bis zu 8 Submodule gleichzeitig abruft - sieheman git-clone
.Mit Version 1.9 von Git bis Version 2.12 (
-j
Flag nur in Version 2.8+ verfügbar):Mit Version 1.6.5 von Git und höher können Sie Folgendes verwenden:
Verwenden Sie für bereits geklonte Repos oder ältere Git-Versionen:
quelle
master
?Sie müssen zwei Dinge tun, bevor ein Submodul gefüllt wird:
quelle
git-submodule(1)
Manpage ( kernel.org/pub/software/scm/git/docs/git-submodule.html ). Sie werden herausfinden, dassgit submodule update
ein netter Parameter namens unterstützt wird--recursive
.git submodule update --init
(Siehe auch meine Antwort ).Git 2.23 (Q3 2019): Wenn Sie die Submodule klonen und auf die neueste Version aktualisieren möchten :
Wenn Sie sie nur an ihrem aufgezeichneten SHA1 klonen möchten:
Siehe unten.
Ursprüngliche Antwort 2010
Wie Joschi in den Kommentaren erwähnt,
git submodule
unterstützt jetzt die--recursive
Option (Git1.6.5 und mehr).Siehe rekursives Arbeiten mit Git-Submodulen für den Init-Teil.
Weitere
git submodule
Informationen finden Sie unter Erläuterungen .Update 2016 mit Git 2.8: Siehe " Wie kann
git clone --recursive
ich das Herunterladen von Git-Submodulen mithilfe von Git beschleunigen / parallelisieren ? "Sie können das parallele Abrufen des Submoduls mithilfe mehrerer Threads starten.
Zum Beispiel:
Noch besser ist, dass Sie mit Git 2.23 (Q3 2019) das Submodul in einem Befehl klonen und in den Tracking-Zweig auschecken können!
Siehe Commit 4c69101 (19. Mai 2019) von Ben Avison (
bavison
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 9476094 , 17. Juni 2019)Das bedeutet:
quelle
git submodule update --init --recursive --remote
sollte sie auf das neueste Commit ihrer jeweiligen Niederlassung aktualisieren. (Beispiel: stackoverflow.com/a/56981834/6309 )clone --recurse-submodules --remote-submodules
nochsubmodule update --init --recursive --remote
) die Unterrepos tatsächlich abrufen. Alles, was ich bekomme, ist eine .gitmodules-Datei, und ich konnte keine andere Möglichkeit finden, die Unterrepos zu initiieren, als sie einzeln manuell zu klonen. Ich hätte gerne wenigstens ein Skript dafürsubmodule foreach
...[Schnelle Antwort]
Mit diesem Befehl können Sie Ihr Repo mit allen Submodulen klonen:
Wenn Sie das Projekt bereits geklont haben, können Sie Folgendes verwenden:
quelle
Wenn Ihr Submodul in einem Zweig hinzugefügt wurde, müssen Sie es in Ihren Klonbefehl aufnehmen ...
quelle
Versuche dies:
Die Submoduldaten werden automatisch abgerufen, sofern Sie die Submodule bereits zum übergeordneten Projekt hinzugefügt haben.
quelle
--recurse-submodules
und--recursive
sind gleichwertig Aliase .git submodule update --init --recursive
wie in dieser Antwort erklärtIch denke, Sie können mit 3 Schritten gehen:
quelle
späte Antwort
Da ich gerade eine ganze Stunde mit einem Freund herumgespielt habe: Auch wenn Sie Administratorrechte für BitBucket haben, klonen Sie immer das ORIGINAL-Repository und verwenden Sie das Passwort desjenigen, dem das Repo gehört. Es ist ärgerlich herauszufinden, dass Sie auf diese Minenfalle gestoßen sind: P.
quelle
Versuchen Sie dies, um Submodule in das Git-Repository aufzunehmen.
oder
quelle
Sie können das
--recursive
Flag beim Klonen eines Repositorys verwenden. Dieser Parameter zwingt git, alle definierten Submodule im Repository zu klonen.Nach dem Klonen können manchmal Zweige von Submodulen geändert werden. Führen Sie anschließend den folgenden Befehl aus:
quelle
[Schnelle Antwort]
Gehen Sie nach dem Klonen des übergeordneten Repos (das einige Submodul-Repos enthielt) wie folgt vor:
quelle
Das parallele Abrufen von Submodulen zielt darauf ab, die zum Abrufen eines Repositorys und aller zugehörigen Submodule erforderliche Zeit zu verkürzen, indem mehrere Repositorys gleichzeitig abgerufen werden können. Dies kann mithilfe der neuen Option --jobs erreicht werden, z.
Laut Git-Team kann dies die Aktualisierung von Repositorys, die viele Submodule enthalten, erheblich beschleunigen. Wenn Sie --recurse-submodules ohne die neue Option --jobs verwenden, ruft Git die Submodule einzeln ab.
Quelle: http://www.infoq.com/news/2016/03/git28-released
quelle
Ich hatte das gleiche Problem für ein GitHub-Repository. In meinem Konto fehlte der SSH-Schlüssel. Der Prozess ist
Anschließend können Sie das Repository mit Submodulen klonen (
git clone --recursive YOUR-GIT-REPO-URL
)oder
Führen Sie Submodule im bereits geklonten Repository aus
git submodule init
undgit submodule update
rufen Sie sie ab.quelle
Permission denied (publickey). fatal: Could not read from remote repository.
FehlerVersuche dies.
Wenn Sie das Submodul in einem Zweig hinzugefügt haben, stellen Sie sicher, dass Sie es dem Befehl clone hinzufügen.
quelle
Wenn es sich um ein neues Projekt handelt, können Sie einfach Folgendes tun:
Wenn es bereits installiert ist als:
quelle