Est-il un moyen de faire la commande git pull automatiquement mise à jour submodules?
Est-il un moyen automatique de git submodule update
(ou de préférence git submodule update --init
appelé à chaque fois qu' git pull
est fait?
La recherche d'un git config paramètre, ou un alias git pour vous y aider.
- Connexes: stackoverflow.com/questions/1899792/...
- Pourquoi un git alias préférable à une coquille d'alias?
- git alias sont bien car il permet d'encapsuler la commande dans le "git" espace de noms. On peut ainsi se demander pourquoi toutes les commandes git commencer avec "git" au lieu d'avoir leurs propres noms.
- Pour quiconque de trouver cela, la haute-voté réponses sont actuellement hors de date. Kane réponse est exacte: stackoverflow.com/a/49427199/3499424
Vous devez vous connecter pour publier un commentaire.
De git 2.14, vous pouvez définir
sous-module.recurse
true pour activer le comportement désiré.Vous pouvez faire cela à l'échelle mondiale en cours d'exécution:
git pull
aussi chercher un sous-module et exécutersubmodule update
. Ce doit vraiment être la accepté de répondre maintenantgit config --global submodule.recurse true
git clone
ainsi. Et le faire sur par défaut. Sinon, il y aura toujours une énorme résistance à l'aide de submodules, car les gens modules de toujours sortir de la synchronisation 🙁on-demand
de la sémantique dans la manière defetch.recursesubmodules
, ce qui est regrettable quand vous avez beaucoup de submodules et la récupération est lente.commit
,fetch
,pull
, etc.) sont conçus pour être appliqués uniquement à du référentiel actuel. un sous-module est un autre référentiel et ne devraient pas être affectés par des commandes exécutées dans la relation parent-référentiel par défaut. c'est une sorte de conception-décision du git-développeur.git config --global alias.pullall '!git pull && git submodule update --init --recursive'
Si vous voulez les arguments passés à la commande git pull, puis de les utiliser à la place:
De départ avec Git 1.7.5 elle devrait mettre à jour submodules automatiquement par défaut comme vous le souhaitez.
[EDIT: par commentaires: la nouvelle 1.7.5 comportement est automatiquement chercher la dernière s'engage pour submodules, mais pas à mise à jour eux (dans le
git submodule update
sens). Si les informations contenues dans cette réponse est pertinente que l'arrière-plan, mais n'est pas une réponse complète par elle-même. Vous avez encore besoin d'un alias pour tirer et mettre à jour les submodules en une seule commande.]Le comportement par défaut, "à la demande", est de mettre à jour submodules chaque fois que vous récupérez un engageons à ce que les mises à jour de la sous-module s'engager, et ce commit n'est pas déjà présente dans votre clone local.
Vous pouvez aussi l'avoir mis à jour sur chaque fetch ou jamais (pré-1.7.5 comportement je suppose).
L'option de configuration pour modifier ce comportement est
fetch.recurseSubmodules
.Voir:
git config
de la page de manuel (1.7.5) (ou de dernièregit config
de la page de manuel)git fetch
de la page de manuel (1.7.5) (ou de dernière git fetch page de man)pour plus d'informations.
git fetch
, pas ungit submodule update
.git pull
, plutôt que degit fetch
, cette option ne fait que le télécharger récursive. Il ne changera pas ce commit est vérifié dans les submodules à tous. Doncgit submodule update
est toujours nécessaire, comme le fait remarquer @Artem.Je suis surpris que personne n'a mentionné l'utilisation de git crochets pour ce faire!
Juste ajouter des fichiers nommés
post-checkout
etpost-merge
à votre.git/hooks
répertoire du dépôts, et ajouter la ligne suivante dans chacun d'eux:Puisque vous specfically un alias est demandé, en supposant que vous voulez pour beaucoup de dépôts, vous pouvez créer un alias qui ajoute à un référentiel
.git/hooks
pour vous.core.hooksPath
pour un des crochets de l'annuaire, consultez la documentationgit-config
pour plus de détails.git pull --rebase
🙁Un alias, comme suggéré par Kevin Ballard, est une très bonne solution. Juste pour lancer une autre option, vous pouvez également utiliser un post-fusion crochet qui fonctionne simplement
git submodule update [--init]
.Vous pouvez créer un alias pour la commande git qui gère automatiquement la sous-module de mise à jour. Ajoutez les lignes suivantes à votre .bashrc
Comme d'autres l'ont mentionné, vous pouvez facilement définir ce avec:
Toutefois, si vous êtes comme moi et que vous avez de plus en plus complexe
.gitconfig
setup (ma principale~/.gitconfig
fichier utiliseinclude
à charger dans d'autres.gitconfig
fichiers), et vous ne me souviens jamais comment faire pour convertir entre la ligne de commandegit
config format et la.gitconfig
format, voici comment l'ajouter à l'un de vos.gitconfig
fichiers: