2628 Stimmen

Einfacher Weg, die aktuellsten aller Git-Submodule zu ziehen

Wir verwenden Git-Submodule, um einige große Projekte zu verwalten, die von vielen anderen Bibliotheken, die wir entwickelt haben, abhängig sind. Jede Bibliothek ist ein separates Repo, das als Submodul in das abhängige Projekt eingebracht wird. Während der Entwicklung wollen wir oft einfach die neueste Version jedes abhängigen Submoduls holen.

Verfügt Git über einen eingebauten Befehl, um dies zu tun? Wenn nicht, wie wäre es dann mit einer Windows-Batch-Datei oder ähnlichem, die das erledigen kann?

0 Stimmen

git-deep sollte dabei helfen.

17 Stimmen

@Brad wollen Sie Ihre Kopien von Submodulen auf die im Master-Projekt genannten Commit-Revs aktualisieren oder wollen Sie den letzten HEAD-Commit von jedem Submodul ziehen? Die meisten Antworten hier beziehen sich auf Ersteres; viele Leute wollen Letzteres.

1 Stimmen

Sie können diese Antwort mit Git flow with submodules hilfreich finden stackoverflow.com/a/70910397/9566462

40voto

Sebastien Varrette Punkte 3796

Da es vorkommen kann, dass der Standardzweig Ihrer Untermodule no master So automatisiere ich die vollständigen Aktualisierungen von Git-Submodulen:

git submodule init
git submodule update
git submodule foreach 'git fetch origin; git checkout $(git rev-parse --abbrev-ref HEAD); git reset --hard origin/$(git rev-parse --abbrev-ref HEAD); git submodule update --recursive; git clean -dfx'

1 Stimmen

Von den vielen Antworten auf die vielen Fragen hat diese bei mir funktioniert (2019, Github-Fehler mit bestimmten Hash-IDs)

1 Stimmen

Genau danach habe ich gesucht, da ich Untermodule mit master y main . Danke!

20voto

Jens Kohl Punkte 5811

Ich weiß nicht, seit welcher Version von Git das funktioniert, aber das ist es, wonach Sie suchen:

git submodule update --recursive

Ich verwende es mit git pull um auch das Root-Repository zu aktualisieren:

git pull && git submodule update --recursive

18voto

JamesD Punkte 2286

Die oben genannten Antworten sind gut, aber wir haben git-hooks verwendet, um dies zu vereinfachen, aber es stellt sich heraus, dass in Git 2.14 können Sie einstellen git config submodule.recurse auf true setzen, um die Aktualisierung von Untermodulen zu ermöglichen, wenn Sie in Ihr Git-Repository ziehen.

Dies hat jedoch den Nebeneffekt, dass alle Änderungen an Untermodulen, die sich auf Zweigen befinden, gepusht werden, aber wenn Sie dieses Verhalten bereits benötigen, könnte dies die Aufgabe erfüllen.

Dies kann mit Hilfe von:

git config submodule.recurse true

1 Stimmen

Ich liebe diese Option, leider muss ich sie noch nutzen git submodule init vor, wenn Ihr Submodul noch nicht initialisiert ist.

17voto

elem103 Punkte 111

Um ein paar Dinge zu klären, basierend auf bereits verfügbaren Antworten von pulling " neueste "Code der einzelnen Submodule aus der Ferne.

Wenn " neueste " die Submodulzeiger, die eingecheckt wurden, dann auf jeden Fall verwenden:

git submodule update --recursive
  - or -
git pull --recurse-submodules --jobs=X

Wenn " neueste " ist der letzte der folgenden Zeitpunkte Haupt dann kann so etwas funktionieren:

git submodule foreach "git checkout main && git pull"

Leider bedeutet dies, dass es keine "--jobs"-Option gibt, so dass wir es nicht parallel laufen lassen können. Am ehesten kann man es parallel laufen lassen, wenn man die Option pfs python code.

15voto

Binh Ho Punkte 2247

Ich verwende diese Befehle oft, bisher hat es immer funktioniert.

git pull
git submodule foreach --recursive git checkout master
git submodule foreach --recursive git pull

Hoffentlich geht das schneller.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X