Ist es möglich, dass ein Git-Submodul aus mehreren anderen Git-Submodulen besteht und das Super-Git-Repo den Inhalt für jedes Submodul abruft?
Ich habe versucht, dies mit dem offensichtlichen / naiven Ansatz zu tun, ein Git-Repo mit mehreren Submodulen zu erstellen.
Fügen Sie dann dieses Git-Repo einem anderen Git-Repo als Submodul hinzu.
Versuchen Sie dann, von git submodule init
und dann aus dem Stammverzeichnis des Super-Git-Repos zu ziehen git submodule update
. Dadurch können die Sub-Submodule jedoch nicht abgerufen werden.
git
git-submodules
erster Rückmelder
quelle
quelle
Antworten:
Wie in Rückblickend hinzugefügt - rekursiv zu einem Git-Repo hinzufügen
sollte arbeiten.
quelle
git submodule init; git submodule update --recursive
sei gleichbedeutend mit dem oben Gesagten, aber das ist es nicht.--init
Flag übergebe, werden die Submodule in einem meiner Submodule nur auf alte Versionen initialisiert, nicht auf die aktuellsten.git submodule foreach git pull origin master
und es funktioniert teilweise: Submodule werden aktualisiert, aber manchmal wird dasHEAD
getrennt und für Submodule innerhalb von Submodulen kann ich die Änderungen meines direkten Submoduls nicht festschreiben, da es "geänderten Inhalt" und keine "neuen Commits" hat (da seine eigenen Submodule haben "neue Commits" und werden aktualisiert).Wie Sridhar unten kommentiert, ist Git1.6.5 +
git clone --recursive
nun die offizielle Alternative, beschrieben in:git clone --submodule
"--recursive
zu einem Git-Repo hinzufügen "(mit dem
alias $ git config --global alias.cloner = 'clone --recursive'
, wodurch das Abschatten des normalengit clone
Befehls vermieden wird )inamiy weist korrekt auf den
git submodule update --init --recursive
Befehl hin, den Johan Herland ( ) in commit b13fd5c , ebenfalls in git1.6.5, eingeführt hat .jherland
Und IceFire fügt in den Kommentaren hinzu :
(ältere ursprüngliche Antwort)
Laut Handbuchseite
sollte alle verschachtelten Submodule aktualisieren. Der Init-Teil ist jedoch möglicherweise nicht rekursiv.
Abhängig von Ihrer Version von Git können Sie mit diesem Artikel auf rekursives Aktualisieren von Git-Submodulen zurückgreifen, um rekursives Init und Aktualisieren zu ermöglichen:
quelle
git clone --recursive
ausreichendgit submodule update --init <submoduleName>
ist dies der richtige Weg. Ich bin hierher gekommen, als ich nach dieser Antwort