2017-06-16 1 views
0

Sur la question:Comment cloner un dépôt git avec ses sous-modules checkout sur leurs branches par défaut?

  1. How to correctly call a git submodule symlinked?

était-figured it out, il est nécessaire à la caisse les sous-modules git à leur branche par défaut lorsqu'un git clone --recursive est effectué, mais comment faire?

J'ai essayé la recherche et a trouvé cette autre question:

  1. Easy way pull latest of all submodules

Suggérant utiliser la commande git clone --recurse-submodules mais après clonage du dépôt de son sous-module toujours pas de commande sur leurs branches par défaut.

Répondre

2

Vous pouvez utiliser git submodule foreach pour exécuter une commande arbitraire dans chaque sous-module. Le drapeau --recursive se répètera dans les sous-modules des sous-modules. git remote show [name-of-remote] dira quelle branche [name-of-remote] a actuellement actif. En les combinant avec quelques autres outils pour nettoyer la sortie de git remote show donne:

git submodule foreach --recursive "git checkout $(git remote show origin | grep 'HEAD branch' | sed 's/.*: //')" 

Ceci est, bien sûr, dépendant ayant déjà cloné les sous-modules.

+0

Merci! Je pense que je peux faire la commande 'git clone --recursive https ...; git submodule foreach ... ', alors il devrait cloner tout et checkout leur maître. – user

+0

Existe-t-il une solution indépendante de la plate-forme ou une version Windows de celle-ci? Si j'exécute cette commande sous Windows, la branche HEAD 'grep 'ne serait pas disponible' | La partie /.*: // '' de sed. – user

+1

@user Je pense que 'grep' et' sed' sont inclus dans l'installation standard de Git pour Windows, mais en fonction des options que vous avez sélectionnées lors de l'installation, vous devrez peut-être utiliser git bash plutôt que cmd. – 8bittree

2

git submodule foreach git checkout master

+0

Merci, Cela aide certes, mais ce qui se passe avec ces sous-modules dont la branche par défaut n'est pas maître? – user