Ma structure de projet
ProjectA
-FrameworkA (submodule)
--Twig (submodule of FrameworkA)
Comment puis-je mettre à jour les sous-modules de manière récursive? J'ai déjà essayé quelques commandes git (sur root ProjectA)
git submodule foreach git pull origin master
ou
git submodule foreach --recursive git pull origin master
mais ne peut pas extraire des fichiers de Twig.
git
git-submodules
complez
la source
la source
Réponses:
Vous voudrez aussi probablement utiliser l'option --init qui lui fera initialiser tous les sous-modules non initialisés:
Remarque: dans certaines anciennes versions de Git , si vous utilisez l'
--init
option, les sous-modules déjà initialisés peuvent ne pas être mis à jour. Dans ce cas, vous devez également exécuter la commande sans--init
option.la source
--init
est utilisé ne correspond pas à mes expériences sur Git 2.2.2. Je vois à la fois des sous-modules de niveau supérieur et imbriqués qui ont déjà été initialisés obtenir le bon commit vérifié lorsque j'utilisegit submodule update --init --recursive
, et je pense que l'affirmation selon laquelle vous devez exécuter la commande avec et sans--init
est tout simplement fausse. À moins que quelqu'un ne puisse montrer la preuve que c'est le comportement ou démontrer qu'il a changé entre les versions et était une fois vrai, je prévois de le modifier complètement.La façon dont j'utilise est:
la source
git submodule foreach git pull --ff-only origin master
git submodule foreach --recursive 'git commit -a | :'
. Le:
fait boucler quel que soit le résultat. Voir le lien stackoverflow.com/questions/19728933/… .Comme il peut arriver que la branche par défaut de vos sous-modules ne le soit pas
master
(ce qui arrive souvent dans mon cas), voici comment j'automatise les mises à niveau complètes des sous-modules Git:la source
Entering 'Core' fatal: ambiguous argument 'origin/HEAD': unknown revision or path not in the working tree.
oùCore
est le sousDans Git récent (j'utilise la v2.15.1), les éléments suivants fusionneront les modifications de sous-module en amont dans les sous-modules de manière récursive:
Vous pouvez ajouter
--init
pour initialiser tous les sous-modules non initialisés et les utiliser--rebase
si vous souhaitez rebaser au lieu de fusionner.Vous devez ensuite valider les modifications:
la source
git submodule update --remote my-dir/my-submodule
fonctionne aussi bien