Gibt es eine Möglichkeit, automatisch zu haben git submodule update
(oder vorzugsweise git submodule update --init
anzurufen, wann git pull
immer dies erledigt ist?
Suchen Sie nach einer Git-Konfigurationseinstellung oder einem Git-Alias, um dies zu unterstützen.
git
git-submodules
Philfreo
quelle
quelle
Antworten:
Ab Git 2.14 können Sie verwenden
git pull --recurse-submodules
(und es nach Belieben aliasieren).Ab Git 2.15 können Sie
submodule.recurse
true festlegen , um das gewünschte Verhalten zu aktivieren.Sie können dies global tun, indem Sie Folgendes ausführen:
quelle
git pull
auch ein Submodul abgerufen und ausgeführtsubmodule update
. Dies muss jetzt wirklich die akzeptierte Antwort seingit config --global submodule.recurse true
git clone
. Und schalten Sie es standardmäßig ein. Andernfalls wird es immer einen großen Widerstand gegen die Verwendung von Submodulen geben, da die Module der Leute immer nicht mehr synchron sind :-(commit
,fetch
,pull
usw.) ausgelegt sind , nur auf den aktuellen Repository angewendet werden. Ein Submodul ist ein weiteres Repository und sollte nicht von Befehlen betroffen sein, die standardmäßig im übergeordneten Repository ausgeführt werden. Dies ist eine Art Design-Entscheidung des Git-Entwicklers.git config --global alias.pullall '!git pull && git submodule update --init --recursive'
Wenn Sie möchten, dass Argumente an git pull übergeben werden, verwenden Sie stattdessen Folgendes:
quelle
Ab Git 1.7.5 sollten Submodule standardmäßig automatisch aktualisiert werden, wie Sie es möchten.
[BEARBEITEN: pro Kommentar: Das neue Verhalten von 1.7.5 besteht darin, die neuesten Commits für Submodule automatisch abzurufen , aber nicht zu aktualisieren (im
git submodule update
Sinne). Die Informationen in dieser Antwort sind also als Hintergrund relevant, aber keine vollständige Antwort für sich. Sie benötigen noch einen Alias, um Submodule in einem Befehl abzurufen und zu aktualisieren.]Das Standardverhalten "On-Demand" besteht darin, Submodule zu aktualisieren, wenn Sie ein Commit abrufen, das das Submodul-Commit aktualisiert, und dieses Commit befindet sich noch nicht in Ihrem lokalen Klon.
Sie können es auch bei jedem Abruf oder nie aktualisieren lassen (Verhalten vor 1.7.5, nehme ich an).
Die Konfigurationsoption zum Ändern dieses Verhaltens lautet
fetch.recurseSubmodules
.Sehen:
git config
Manpage (1.7.5) (oder neuestegit config
Manpage )git fetch
Manpage (1.7.5) (oder neueste Git Fetch Manpage )für mehr Informationen.
quelle
git fetch
, nicht agit submodule update
.git pull
, anstattgit fetch
nur diese Option macht fetching rekursiv. Es ändert nichts daran, welches Commit in den Submodulen ausgecheckt ist. Alsogit submodule update
ist es immer noch notwendig, wie von @Artem festgestellt.Ich bin überrascht, dass niemand erwähnt hat, Git Hooks zu verwenden, um dies zu tun!
Fügen Sie einfach Dateien mit dem Namen
post-checkout
undpost-merge
zu Ihrem.git/hooks
Verzeichnis der relevanten Repositorys hinzu und fügen Sie Folgendes in jedes ein:Da Sie speziell nach einem Alias gefragt haben und davon ausgehen, dass Sie diesen für viele Repositorys haben möchten, können Sie einen Alias erstellen, der diese
.git/hooks
für Sie zu einem Repository hinzufügt .quelle
core.hooksPath
für ein Hooks-Verzeichnis benannt ist.git-config
Weitere Informationen finden Sie in den Dokumenten .git pull --rebase
Folgendes verwenden :(Ein Alias, wie von Kevin Ballard vorgeschlagen, ist eine vollkommen gute Lösung. Um eine weitere Option zu bieten, können Sie auch einen Post-Merge-Hook verwenden, der einfach ausgeführt wird
git submodule update [--init]
.quelle
Sie können einen Alias für den Befehl git erstellen, der die Aktualisierung des Submoduls automatisch übernimmt. Fügen Sie Ihrer .bashrc Folgendes hinzu
quelle
Wie andere bereits erwähnt haben, können Sie dies ganz einfach einstellen mit:
Wenn Sie jedoch wie ich sind und ein komplexeres
.gitconfig
Setup haben (meine Hauptdatei~/.gitconfig
wirdinclude
zum Laden in andere.gitconfig
Dateien verwendet) und Sie sich nie daran erinnern können, wie zwischen dem Befehlszeilen-git
Konfigurationsformat und dem.gitconfig
Format konvertiert wird, können Sie es wie folgt hinzufügen zu einer Ihrer.gitconfig
Dateien:quelle
Nur so konnte ich die Submodule und verschachtelten Submodule aktualisieren:
Ich hatte aufgrund der Klammern Probleme, den Alias über das Terminal zu erstellen, daher musste ich diesen manuell zu .gitconfig für global hinzufügen:
Irgendwelche Vorschläge, wie die Befehle oder der Alias automatisch ausgeführt werden?
quelle