Existe-t-il un moyen d'avoir automatiquement git submodule update
(ou de préférence git submodule update --init
appelé chaque fois que git pull
c'est fait?
Vous recherchez un paramètre de configuration git ou un alias git pour vous aider.
git
git-submodules
philfreo
la source
la source
Réponses:
Depuis Git 2.14 , vous pouvez l'utiliser
git pull --recurse-submodules
(et l'aliaser comme bon vous semble).Depuis Git 2.15 , vous pouvez définir
submodule.recurse
true pour activer le comportement souhaité.Vous pouvez le faire globalement en exécutant:
la source
git pull
également la récupération d'un sous-module et son exécutionsubmodule update
. Cela doit vraiment être la réponse acceptée maintenantgit config --global submodule.recurse true
git clone
. Et activez-le par défaut. Sinon, il y aura toujours une énorme résistance à l'utilisation des sous-modules, car les modules des gens seront toujours désynchronisés :-(commit
,fetch
,pull
, etc.) sont conçus pour être appliqués que dans le référentiel courant. un sous-module est un autre référentiel et ne devrait pas être affecté par les commandes exécutées dans le référentiel parent par défaut. c'est une sorte de décision de conception par le développeur git.git config --global alias.pullall '!git pull && git submodule update --init --recursive'
Si vous voulez que des arguments soient passés à git pull, utilisez plutôt ceci:
la source
À partir de Git 1.7.5, il devrait mettre à jour les sous-modules automatiquement par défaut comme vous le souhaitez.
[EDIT: par commentaires: le nouveau comportement 1.7.5 consiste à récupérer automatiquement les derniers commits des sous-modules, mais pas à les mettre à jour (dans le
git submodule update
sens). Les informations contenues dans cette réponse sont donc pertinentes en tant que contexte, mais ne sont pas une réponse complète en soi. Vous avez toujours besoin d'un alias pour extraire et mettre à jour des sous-modules en une seule commande.]Le comportement par défaut, "à la demande", consiste à mettre à jour les sous-modules chaque fois que vous récupérez une validation qui met à jour la validation du sous-module, et cette validation ne se trouve pas déjà dans votre clone local.
Vous pouvez également le mettre à jour à chaque extraction ou jamais (comportement antérieur à la 1.7.5 je suppose).
L'option de configuration pour modifier ce comportement est
fetch.recurseSubmodules
.Voir:
git config
page de manuel (1.7.5) (ou dernièregit config
page de manuel )git fetch
page de manuel (1.7.5) (ou dernière page de manuel de git fetch )pour plus d'informations.
la source
git fetch
, pas ungit submodule update
.git pull
, plutôt quegit fetch
, cette option rend uniquement la récupération récursive. Cela ne changera pas du tout quel commit est extrait dans les sous-modules. Ilgit submodule update
est donc toujours nécessaire, comme l'a noté @Artem.Je suis surpris que personne n'ait mentionné utiliser de git hooks pour ce faire!
Ajoutez simplement les fichiers nommés
post-checkout
etpost-merge
à votre.git/hooks
répertoire des référentiels pertinents, et mettez les éléments suivants dans chacun d'eux:Puisque vous avez spécifiquement demandé un alias, en supposant que vous souhaitiez l'avoir pour de nombreux référentiels, vous pouvez créer un alias qui les ajoute à un référentiel
.git/hooks
pour vous.la source
core.hooksPath
pour un répertoire hooks , consultez la documentationgit-config
pour plus de détails.git pull --rebase
:(Un pseudonyme, comme l'a suggéré Kevin Ballard, est une très bonne solution. Juste pour lancer une autre option, vous pouvez également utiliser un hook post-fusion qui s'exécute simplement
git submodule update [--init]
.la source
Vous pouvez créer un alias pour la commande git qui gère automatiquement la mise à jour des sous-modules. Ajoutez ce qui suit à votre .bashrc
la source
Comme d'autres l'ont mentionné, vous pouvez facilement régler cela avec:
Cependant, si vous êtes comme moi et avez une
.gitconfig
configuration plus complexe (mon~/.gitconfig
fichier principal utiliseinclude
pour charger dans d'autres.gitconfig
fichiers), et vous ne vous souvenez jamais comment convertir entre legit
format de configuration de ligne de commande et le.gitconfig
format, voici comment l'ajouter à l'un de vos.gitconfig
fichiers:la source
La seule façon dont j'ai pu mettre à jour les sous-modules et les sous-modules imbriqués:
J'avais du mal à créer l'alias via le terminal en raison des crochets, j'ai donc dû l'ajouter manuellement à .gitconfig pour global:
Des suggestions sur la façon d'exécuter les commandes ou l'alias automatiquement?
la source