web-dev-qa-db-fra.com

'git submodule update --init --recursive' VS 'sous-module git foreach --recursive sous-module git --init'

J'ai git repo qui a imbriqué de sous-modules. Quelle est la différence entre les commandes ci-dessous 2?

git submodule update --init --recursive

git submodule foreach --recursive git submodule update --init
49
Manish
git submodule update --init --recursive

La commande de sous-module update réapparaîtra dans les sous-modules enregistrés, les mettra à jour et les initiera (si nécessaire) ainsi que tous les sous-modules imbriqués qu’ils contiennent.

git submodule foreach --recursive git submodule update --init

foreach évaluera la commande dans chaque sous-module extrait. Donc, il mettra à jour et initiera (si nécessaire) chaque sous-module et tous les sous-modules imbriqués dans _ en raison de --recursive.

Donc à la fin, les deux commandes vont réaliser la même chose. Tout simplement, l'exécution diffère, la première commande n'interviendra pas dans chaque répertoire pour exécuter la commande.

48
Martin

D'après mon expérience, le premier fonctionne. Le second ne fait rien.

Pour un projet tel que Eclipse.platform.releng.aggregator pour initialiser les sous-modules afin que vous puissiez construire, vous devez cloner toutes les mises en pension enfants:

 git submodule update --init --recursive
8
nickboldt

Il existe des différences!

 git submodule update --init --recursive

va enregistrer les sous-modules dépendants directs et les cloner, puis entrer dans la profondeur suivante, enregistrer les sous-modules et les cloner récursivement Enfin, tous les sous-modules dépendants directement ou indirectement seront enregistrés et clonés à partir de la télécommande. S'il existe une dépendance cyclique, cette commande ne se terminera jamais.

git submodule foreach --recursive git submodule update --init

Cette commande suit le modèle:

git submodule foreach --recursive "your command"

ce qui signifie que, premièrement, "git submodule foreach --recursive" générera un ensemble de sous-modules, puis dans chaque sous-module, votre commande sera exécutée. Cependant, pour un projet initial sans exécuter "git submodule init" puis "git submodule update", "git submodule foreach --recursive" sera vide, ainsi "votre commande" n'aura pas lieu.

0
BrightestSirius