Question Un moyen facile de tirer le dernier de tous les sous-modules git
Nous utilisons des sous-modules git pour gérer quelques grands projets qui dépendent de nombreuses autres bibliothèques que nous avons développées. Chaque bibliothèque est un dépôt séparé introduit dans le projet dépendant en tant que sous-module. Pendant le développement, nous voulons souvent simplement aller chercher la dernière version de chaque sous-module dépendant.
Est-ce que git a une commande intégrée pour le faire? Si non, que diriez-vous d'un fichier batch Windows ou similaire qui peut le faire?
1372
2018-06-23 01:05
origine
Réponses:
Pour git 1.8.2 ou au-dessus de l'option --remote
a été ajouté pour prendre en charge la mise à jour des dernières astuces des branches distantes:
git submodule update --recursive --remote
Cela a l'avantage supplémentaire de respecter toutes les branches "non par défaut" spécifiées dans le .gitmodules
ou .git/config
fichiers (si vous en avez, par défaut est origin / master, auquel cas certaines des autres réponses fonctionneraient aussi).
Pour git 1.7.3 ou ci-dessus, vous pouvez utiliser (mais les astuces ci-dessous autour de ce que la mise à jour s'applique toujours):
git submodule update --recursive
ou:
git pull --recurse-submodules
si vous voulez tirer vos sous-modules vers les derniers commits et non vers ce que le repo indique.
Note: Si c'est la première fois vous passez en caisse un repo que vous devez utiliser --init
premier:
git submodule update --init --recursive
Pour plus vieux, git 1.6.1 ou ci-dessus, vous pouvez utiliser quelque chose de similaire à (modifié pour convenir):
git submodule foreach git pull origin master
Voir git-submodule (1) pour plus de détails
1748
2018-06-23 13:42
Si vous avez besoin de tirer des choses pour les sous-modules dans vos dépôts de sous-modules, utilisez
git pull --recurse-submodules
une caractéristique git apprise en 1.7.3.
Mais cela ne vérifie pas les validations appropriées (celles que votre référentiel maître pointe vers) dans les sous-modules
Pour vérifier les validations appropriées dans vos sous-modules, vous devez les mettre à jour après avoir tiré en utilisant
git submodule update --recursive --remote
567
2017-11-10 18:07
Note: Ceci est à partir de 2009 et peut-être bien alors, mais il existe de meilleures options maintenant.
Nous utilisons cela. C'est appelé 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
Placez-le simplement dans un répertoire bin approprié (/ usr / local / bin). Si sur Windows, vous devrez peut-être modifier la syntaxe pour le faire fonctionner :)
Mettre à jour:
En réponse au commentaire de l'auteur original sur l'insertion de tous les HEADs de tous les sous-modules - c'est une bonne question.
Je suis assez sûr que git
n'a pas de commande pour cela en interne. Pour ce faire, vous devez identifier ce que HEAD est réellement pour un sous-module. Cela pourrait être aussi simple que de dire master
est la branche la plus à jour, etc ...
Après cela, créez un script simple qui fait ce qui suit:
- vérifier
git submodule status
pour les référentiels "modifiés". Le premier caractère des lignes de sortie l'indique. Si un sous-dépôt est modifié, vous ne pouvez PAS continuer.
- pour chaque repo répertorié, cd dans son répertoire et exécutez
git checkout master && git pull
. Vérifiez les erreurs.
- À la fin, je vous suggère d'imprimer un affichage à l'utilisateur pour indiquer l'état actuel des sous-modules - peut-être les inviter à ajouter tout et valider?
Je voudrais mentionner que ce style n'est pas vraiment ce que les sous-modules git ont été conçus. Typiquement, vous voulez dire "LibraryX" est à la version "2.32" et restera ainsi jusqu'à ce que je le dise "upgrade".
C'est, dans un sens, ce que vous faites avec le script décrit, mais de manière plus automatique. Des soins sont nécessaires!
Mise à jour 2:
Si vous êtes sur une plate-forme Windows, vous pouvez vouloir utiliser Python pour implémenter le script car il est très performant dans ces domaines. Si vous êtes sur unix / linux, alors je suggère juste un script bash.
Besoin de clarifications? Juste poster un commentaire.
295
2018-06-23 01:50
Sur init, exécutez la commande suivante:
git submodule update --init --recursive
à partir du répertoire repo git, fonctionne le mieux pour moi.
Cela tirera tous les derniers sous-modules y compris.
Expliqué
git - the base command to perform any git command
submodule - Inspects, updates and manages submodules.
update - Update the registered submodules to match what the superproject
expects by cloning missing submodules and updating the working tree of the
submodules. The "updating" can be done in several ways depending on command
line options and the value of submodule.<name>.update configuration variable.
--init without the explicit init step if you do not intend to customize
any submodule locations.
--recursive is specified, this command will recurse into the registered
submodules, and update any nested submodules within.
Après cela, vous pouvez simplement exécuter:
git submodule update --recursive
à partir du répertoire repo git, fonctionne le mieux pour moi.
Cela tirera tous les derniers sous-modules y compris.
Expliqué
git - the base command to perform any git command
submodule - Inspects, updates and manages submodules.
update - Update the registered submodules to match what the superproject
expects by cloning missing submodules and updating the working tree of the
submodules. The "updating" can be done in several ways depending on command
line options and the value of submodule.<name>.update configuration variable.
any submodule locations.
--recursive is specified, this command will recurse into the registered
submodules, and update any nested submodules within.
289
2017-12-11 19:38
Henrik est sur la bonne voie. La commande 'foreach' peut exécuter n'importe quel script shell arbitraire. Deux options pour tirer le dernier pourrait être,
git submodule foreach git pull origin master
et,
git submodule foreach /path/to/some/cool/script.sh
Cela va parcourir tous initialisé sous-modules et exécuter les commandes données.
151
2018-06-23 14:21
Ce qui suit a fonctionné pour moi sur Windows.
git submodule init
git submodule update
138
2017-07-22 13:12
modifier:
Dans les commentaires a été souligné (par philfreo ) que la dernière version est requise. S'il y a des sous-modules imbriqués qui doivent être dans leur dernière version:
git submodule foreach --recursive git pull
----- Commentaire obsolète ci-dessous -----
N'est-ce pas la façon officielle de le faire?
git submodule update --init
Je l'utilise à chaque fois. Aucun problème jusqu'à présent.
Modifier:
Je viens de trouver que vous pouvez utiliser:
git submodule foreach --recursive git submodule update --init
Qui va également récursivement tirer tous les sous-modules, c'est-à-dire les dépendances.
33
2018-04-05 16:23
Comme il peut arriver que la branche par défaut de vos sous-modules soit ne pas master
, c'est ainsi que j'automatise les mises à jour complètes des sous-modules Git:
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'
30
2017-12-04 08:58
Première fois
Cloner et sous-module d'initialisation
git clone git@github.com:speedovation/kiwi-resources.git resources
git submodule init
Du repos
Pendant le développement, tirez et mettez à jour le sous-module
git pull --recurse-submodules && git submodule update --recursive
Mettre à jour le sous-module Git vers le dernier commit sur l'origine
git submodule foreach git pull origin master
La voie préférée devrait être ci-dessous
git submodule update --remote --merge
note: les deux dernières commandes ont le même comportement
24
2017-09-17 07:18
Je ne sais pas depuis quelle version de git cela fonctionne, mais c'est ce que vous cherchez:
git submodule update --recursive
Je l'utilise avec git pull
pour mettre à jour le dépôt racine, aussi:
git pull && git submodule update --recursive
18
2017-09-30 14:10
Regarder http://lists.zerezo.com/git/msg674976.html qui introduit un paramètre --track
6
2017-11-14 02:39