Hinweis: Dies ist aus dem Jahr 2009 und mag damals gut gewesen sein, aber heute gibt es bessere Möglichkeiten.
Wir verwenden dies. Es heißt git-pup
:
#!/bin/bash
# Exists to fully update the git repo that you are sitting in...
git pull && git submodule init && git submodule update && git submodule status
Legen Sie es einfach in ein geeignetes bin-Verzeichnis (/usr/local/bin). Unter Windows müssen Sie möglicherweise die Syntax ändern, damit es funktioniert :)
Aktualisierung:
Als Antwort auf den Kommentar des ursprünglichen Autors über das Einziehen aller HEADs aller Submodule - das ist eine gute Frage.
Ich bin mir ziemlich sicher, dass git
verfügt intern nicht über einen Befehl für diesen Zweck. Um dies zu tun, müssten Sie festlegen, was HEAD für ein Submodul wirklich ist. Das könnte so einfach sein wie zu sagen master
der aktuellste Zweig ist usw...
Erstellen Sie daraufhin ein einfaches Skript, das Folgendes tut:
- siehe
git submodule status
für "geänderte" Repositories. Das erste Zeichen in den Ausgabezeilen zeigt dies an. Wenn ein Unter-Repository geändert wurde, sollten Sie NICHT fortfahren.
- für jedes aufgelistete Repo in dessen Verzeichnis und führen Sie
git checkout master && git pull
. Prüfen Sie auf Fehler.
- Ich schlage vor, dass Sie am Ende eine Anzeige für den Benutzer ausgeben, um den aktuellen Status der Untermodule anzuzeigen - vielleicht fordern Sie ihn auf, alle hinzuzufügen und zu übertragen?
Ich möchte erwähnen, dass diese Art von Submodulen nicht wirklich für Git konzipiert wurde. Normalerweise möchte man sagen, dass "LibraryX" die Version "2.32" hat und diese beibehalten wird, bis ich ihr sage, dass sie "upgraden" soll.
Das ist in gewissem Sinne das, was Sie mit dem beschriebenen Skript tun, nur eben automatischer. Vorsicht ist geboten!
Update 2:
Wenn Sie mit einer Windows-Plattform arbeiten, sollten Sie vielleicht Python für die Implementierung des Skripts verwenden, da es in diesen Bereichen sehr leistungsfähig ist. Wenn Sie unter Unix/Linux arbeiten, empfehle ich Ihnen ein Bash-Skript.
Brauchen Sie Klarstellungen? Schreiben Sie einfach einen Kommentar.
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