Wie checkout alten git commit einschließlich aller Teilgebiete rekursiv?
Habe ich ein git-repo mit mehrere Submodule. Einer von denen hat mehrere Submodule Submodule von selbst. Alle ich bin auf der Suche zu tun, ist check-out ein altes commit auf dem master-repo-und haben Sie der Kasse die entsprechenden übertragungen aus aller Submodule, um die richtigen Staat, der den code damals.
Ich weiß, dass git enthält die notwendigen Informationen, wie den ls-tree
Befehl kann mir sagen, welcher commit jedes Submodul war. Jedoch habe ich manuell überprüfen, jeden, der viel Zeit kostet.
Ich bin auf der Suche nach so etwas wie git checkout --recursive
aber einen solchen Befehl scheint nicht zu existieren.
Gibt es trotzdem, dies zu tun?
- Hinweis:
git checkout --recurse-submodules
tatsächlich existiert heute (2017). Aber nur die kommende Git 2,14 damit es richtig funktioniert. Siehe meine Antwort unten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie zwei Befehle, um dies zu erreichen:
Update: Diese Antwort ist veraltet, ab 2018 – siehe VonC ' s Antwort unten für mehr aktuelle Informationen.
checkout --recurse-submodules
undsubmodule update --recursive
?Hinweis: wenn Sie mehrere Submodule (und teilmodule innerhalb Submodule), Git 2.14 (Q3 2017) wird dazu beitragen, (mehr die jüngsten, dass die OP von 2013)
"
git checkout --recurse-submodules
" nicht ganz so funktioniert, mit einemSubmodul, dass selbst hat Submodule. Es wird mit Git 2.14.
Hinweis: mit Git 2.19 (Q3 2018),
git checkout --recurse-submodules another-branch
ist robuster.Bevor es nicht Bericht, in dem Submodul es Fehler beim aktualisieren der working tree, die zu einer wenig hilfreichen Fehlermeldung.
Sehen commit ba95d4e (20 Jun 2018) von Stefan Beller (
stefanbeller
).(Zusammengefasst von Junio C Hamano --
gitster
-- in commit 392b3dd, 24 Jul 2018)-f
ist immer notwendig. Ohne-f
es keine Aktualisierung der teilmodule.checkout --recurse-submodules
undsubmodule update --recursive
?submodule.<name>.update
(git-scm.com/docs/git-config#Documentation/...).git checkout --recurse-submodule
nicht.checkout --recurse-submodule
aktualisiert Ihre Eltern repo-und teilmodule, währendsubmodule update --recursive
wird nur Auswirkungen auf die submodule arbeiten, Bäume, und nicht aktualisieren Sie die übergeordnete arbeiten Baum.Je nachdem, ob oder nicht es gibt mehr teilmodule in der alten Kasse, müssen Sie möglicherweise Folgendes tun, um Submodule initialisieren, dass gibt es nicht mehr in new commits: