kzen.dev
  • Questions
  • Tags
  • Utilisateurs
Notifications
Récompenses
Inscription
Une fois inscrit, vous serez informé des réponses et des commentaires à vos questions.
Connectez-vous
Si vous avez déjà un compte, connectez-vous pour vérifier les nouvelles notifications.
Il y aura des récompenses pour les questions, réponses et commentaires ajoutés.
Détails
Source
Editer
Brad Robinson
Brad Robinson
Question

Un moyen simple de récupérer la dernière version de tous les submodules git

Nous utilisons des submodules git pour gérer deux grands projets qui ont des dépendances avec de nombreuses autres bibliothèques que nous avons développées. Chaque bibliothèque est un dépôt distinct intégré au projet dépendant sous la forme d'un submodule. Pendant le développement, nous voulons souvent aller chercher la dernière version de chaque sous-module dépendant.

Git a-t-il une commande intégrée pour faire cela ? Si ce n'est pas le cas, que diriez-vous d'un fichier batch Windows ou similaire qui pourrait le faire ?

1735 2009-06-23T01:05:54+00:00 3
Paul Floyd
Paul Floyd
Question modifiée 13 novembre 2018 в 11:12
Programmation
git
git-submodules
Cette question a 1 réponse en anglais, pour les lire connectez-vous à votre compte.
Solution / Réponse
Henrik Gustafsson
Henrik Gustafsson
23 juin 2009 в 1:42
2009-06-23T13:42:29+00:00
Détails
Source
Editer
#9188650

Si c'est la première fois que vous vérifiez un repo, vous devez d'abord utiliser --init :

git submodule update --init --recursive

Pour git 1.8.2 ou supérieur, l'option --remote a été ajoutée pour supporter la mise à jour vers les derniers tips des branches distantes :

git submodule update --recursive --remote

Ceci a l'avantage supplémentaire de respecter toute branche "non par défaut" spécifiée dans les fichiers .gitmodules ou .git/config (si vous en avez, la branche par défaut est origin/master, auquel cas certaines des autres réponses ici fonctionneraient également).

Pour git 1.7.3 ou supérieur, vous pouvez utiliser (mais les problèmes ci-dessous concernant la mise à jour s'appliquent toujours) :

git submodule update --recursive

ou :

git pull --recurse-submodules

si vous voulez tirer vos sous-modules vers les derniers commits au lieu de ce vers quoi le repo pointe.

Voir [git-submodule(1)][1] pour plus de détails.

[1] : https://www.kernel.org/pub/software/scm/git/docs/git-submodule.html

Henrik Gustafsson
Henrik Gustafsson
Réponse modifiée 28 mai 2019 в 2:56
2304
0
 gahooa
gahooa
23 juin 2009 в 1:50
2009-06-23T01:50:50+00:00
Détails
Source
Editer
#9188648

**Note : Ceci est de 2009 et peut avoir été bon alors mais il y a de meilleures options maintenant.

Nous utilisons ceci. Il s'appelle 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

Il suffit de le mettre dans un répertoire bin approprié (/usr/local/bin). Si vous êtes sous Windows, vous devrez peut-être modifier la syntaxe pour qu'il fonctionne :)

Mise à jour:

En réponse au commentaire de l'auteur original concernant la récupération de tous les HEADs de tous les submodules, c'est une bonne question.

Je suis presque sûr que git n'a pas de commande pour cela en interne. Pour ce faire, il faudrait identifier ce qu'est réellement le HEAD d'un sous-module. Cela pourrait être aussi simple que de dire que master est la branche la plus à jour, etc...

Ensuite, créez un script simple qui fait ce qui suit :

  1. vérifier git submodule status pour les dépôts "modifiés". Le premier caractère des lignes de sortie l'indique. Si un sous-repère est modifié, vous pouvez NE PAS vouloir continuer.
  2. pour chaque dépôt listé, allez dans son répertoire et lancez git checkout master && git pull. Vérifiez les erreurs.
  3. A la fin, je suggère que vous imprimiez un affichage à l'utilisateur pour indiquer le statut actuel des sous-modules -- peut-être lui demander d'ajouter tout et de commiter ?

Je voudrais mentionner que ce style n'est pas vraiment ce pour quoi les submodules git ont été conçus. Typiquement, vous voulez dire que "LibraryX" est à la version "2.32" et restera ainsi jusqu'à ce que je lui dise de "mettre à jour".

C'est, dans un sens, ce que vous faites avec le script décrit, mais de manière plus automatique. La prudence est de mise !

Mise à jour 2:

Si vous êtes sur une plateforme Windows, vous pouvez envisager d'utiliser Python pour implémenter le script car il est très compétent dans ces domaines. Si vous êtes sur unix/linux, je suggère un script bash.

Vous avez besoin d'éclaircissements ? N'hésitez pas à poster un commentaire.

 gahooa
gahooa
Réponse modifiée 20 février 2017 в 7:37
302
0
 baudtack
baudtack
23 juin 2009 в 4:04
2009-06-23T04:04:13+00:00
Détails
Source
Editer
#9188649

Je pense que vous devrez écrire un script pour faire cela. Pour être honnête, je pourrais installer python pour le faire afin que vous puissiez utiliser os.walk pour cd à chaque répertoire et lancer les commandes appropriées. Utiliser python ou un autre langage de script, autre que batch, vous permettrait d'ajouter/supprimer facilement des sous-projets sans avoir à modifier le script.

1
0
Ajouter une question
Catégories
Toutes
Technologie
Culture / Loisirs
Vie / Arts
Science
Professionnel
Entreprises
Utilisateurs
Tous
Nouveau
Populaire
1
Ilya Smirnov
Enregistré il y a 5 jours
2
Денис Васьков
Enregistré il y a 1 semaine
3
Dima Patrushev
Enregistré il y a 1 semaine
4
sirojidddin otaboyev
Enregistré il y a 2 semaines
5
Елена Гайдамамакинат
Enregistré il y a 2 semaines
DA
DE
EL
ES
FR
ID
IT
JA
KO
LT
NL
PT
RO
RU
TR
ZH
© kzen.dev 2023
Source
stackoverflow.com
sous licence cc by-sa 3.0 avec l'attribution