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 la racine de ProjectA)
git submodule foreach git pull Origin master
ou
git submodule foreach --recursive git pull Origin master
mais ne peut pas extraire les fichiers de Twig.
git submodule update --recursive
Vous voudrez probablement aussi utiliser l'option --init qui lui permettra d'initialiser tous les sous-modules non initialisés:
git submodule update --init --recursive
Remarque: dans certaines versions plus anciennes de Git, si vous utilisez l'option --init
, les sous-modules déjà initialisés peuvent ne pas être mis à jour. Dans ce cas, vous devez également exécuter la commande sans l'option --init
.
La façon dont j'utilise est:
git submodule update --init --recursive
git submodule foreach --recursive git fetch
git submodule foreach git merge Origin master
Comme il peut arriver que la branche par défaut de vos sous-modules soit nonmaster
(ce qui se produit souvent dans mon cas), voici comment j'automatise les mises à niveau 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'
Dans Git récent (j'utilise v2.15.1), les éléments suivants vont fusionner les modifications des sous-modules en amont dans les sous-modules de manière récursive:
git submodule update --recursive --remote --merge
Vous pouvez ajouter --init
pour initialiser les sous-modules non initialisés et utiliser --rebase
si vous souhaitez modifier la base au lieu de fusionner.
Vous devez ensuite valider les modifications:
git add . && git commit -m 'Update submodules to latest revisions'