Meine Projektstruktur
ProjectA
-FrameworkA (submodule)
--Twig (submodule of FrameworkA)
Wie kann ich Submodule rekursiv aktualisieren? Ich habe bereits einige Git-Befehle ausprobiert (im ProjectA-Stammverzeichnis).
git submodule foreach git pull origin master
oder
git submodule foreach --recursive git pull origin master
kann aber keine Dateien von Twig ziehen.
git
git-submodules
complez
quelle
quelle
Antworten:
Möglicherweise möchten Sie auch die Option --init verwenden, mit der nicht initialisierte Submodule initialisiert werden:
Hinweis: Wenn Sie in einigen älteren Versionen von Git die
--init
Option verwenden, werden bereits initialisierte Submodule möglicherweise nicht aktualisiert. In diesem Fall sollten Sie den Befehl auch ohne--init
Option ausführen .quelle
--init
, stimmt nicht mit meinen Erfahrungen mit Git 2.2.2 überein. Ich sehe sowohl Top-Level- als auch verschachtelte Submodule, die bereits initialisiert wurden und bei meiner Verwendung das richtige Commit auscheckengit submodule update --init --recursive
, und ich denke, die Behauptung, dass Sie den Befehl mit und ohne ausführen müssen,--init
ist einfach falsch. Sofern nicht jemand Beweise dafür vorlegen kann, dass dies das Verhalten ist, oder nachweisen kann, dass es zwischen den Versionen geändert wurde und einmal wahr war, habe ich vor, es insgesamt zu bearbeiten.Die Art, wie ich benutze, ist:
quelle
git submodule foreach git pull --ff-only origin master
git submodule foreach --recursive 'git commit -a | :'
. Das:
macht es Schleife unabhängig vom Ergebnis. Siehe Link stackoverflow.com/questions/19728933/… .Da es vorkommen kann, dass der Standardzweig Ihrer Submodule nicht vorhanden ist
master
(was in meinem Fall häufig vorkommt), automatisiere ich auf diese Weise die vollständigen Git-Submodul-Upgrades:quelle
Entering 'Core' fatal: ambiguous argument 'origin/HEAD': unknown revision or path not in the working tree.
Core
In der letzten Version von Git (ich verwende v2.15.1) werden die folgenden Änderungen des Upstream-Submoduls rekursiv in die Submodule zusammengeführt:
Sie können hinzufügen
--init
, um nicht initialisierte Submodule zu initialisieren und zu verwenden--rebase
wenn Sie eine Neubasis anstelle einer Zusammenführung wünschen.Sie müssen die Änderungen anschließend festschreiben:
quelle
git submodule update --remote my-dir/my-submodule
genauso gut