Comment mettre à jour un sous-module spécifique, situé par exemple dans bundle/syntastic
sans mettre à jour d'autres sous-modules ?
Avec Git 2.13 (et l'aide de submodule.<name>.update
réglage de la configuration ):
git clone --recurse-submodules="bundle/syntastic"
git config submodule.syntastic.update "git pull origin master"
La deuxième ligne (à n'exécuter qu'une seule fois) est nécessaire parce que la fonction clone --recurse-submodules[=<pathspec]
La commande est équivalente à l'exécution de la commande git submodule update --init --recursive <pathspec>
immédiatement après la fin du clonage.
Et cela ne ferait que vérifier le sous-module à son gitlink enregistré SHA1, no au plus tard à distance origin/master
SHA1.
En ajoutant le submodule.<name>.update
réglage de la configuration vous vous assurez que le clone sélectif du sous-module sera suivi d'une mise à jour, uniquement pour ce sous-module.
Dans le cadre de la fonctionnalité "active submodule" de Git 2.13 (Q2 2017) (voir " Ignorer les nouveaux commits pour git submodule
"), on obtient ceci commit bb62e0a de Brandon Williams ( bmwill
) :
clone
: enseigner --recurse-submodules
pour prendre optionnellement un chemin d'accès
Enseigner le clone --recurse-submodules
pour prendre éventuellement un chemin qui décrit les sous-modules à initialiser et à cloner récursivement. clonés.
Si aucun chemin d'accès n'est fourni, --recurse-submodules
initialisera et clonera récursivement tous les sous-modules en utilisant un chemin d'accès par défaut de " .
".
Afin de construire des spécifications de chemin plus complexes, --recurse-submodules
peut être donné plusieurs fois.
Cela permet également de configurer l'option ' submodule.active
' configuratio la spécification de chemin donnée, de sorte que toute invocation future de l'option de configuration git submodule update
suivra l'évolution de la situation.
En outre, le commutateur ' --recurse
' est supprimée du ainsi que caché dans le tableau des options, afin de simplifier les options pour les sous-modules. pour les sous-modules. Un simple ' --recurse
n'indique pas ce qui est récurrent, par exemple par exemple, il peut s'agir de répertoires ou d'arbres (cf. ls-tree
).
Dans beaucoup d'autres commandes, nous avons déjà ' --recurse-submodules
pour signifier récursivité dans les sous-modules, et annonce donc ici cette orthographe comme la véritable option.
Ainsi, le git clone --recursive
page de manuel se lit désormais comme suit :
--recurse-submodules[=<pathspec]:
Une fois le clone créé, initialiser et cloner les sous-modules qui s'y trouvent en fonction des spécifications de chemin fournies. .
Si aucun chemin n'est fourni, tous les sous-modules sont initialisés et clonés.
Les sous-modules sont initialisés et clonés en utilisant leurs paramètres par défaut.
Le clone qui en résulte a submodule.active
au chemin d'accès fourni, ou " .
"(c'est-à-dire tous les sous-modules) si aucun chemin n'est fourni.
Cela équivaut à exécuter git submodule update --init --recursive
immédiatement après la fin du clonage. Cette option est ignorée si le n'a pas d'arbre de travail/de sortie (c.-à-d. --no-checkout
/ -n
, --bare
ou --mirror
est donnée)
Exemple de la t/t7400-submodule-basic.sh
test :
git clone --recurse-submodules="." \
--recurse-submodules=":(exclude)sub0" \
--recurse-submodules=":(exclude)sub2" \
multisuper multisuper_clone
Cela clonerait et mettrait à jour tous les sous-modules, à l'exception de sub0
y sub2
.
Bonus, avec Git 2.22 (Q2 2019) " git clone --recurs
"fonctionne mieux.
Voir commit 5c38742 (29 avril 2019) par Nguyễn Thái Ngọc Duy ( pclouds
) .
(fusionné par Junio C Hamano -- gitster
-- en commit 2cfab60 19 mai 2019)
parse-options
: ne pas émettre d'"option ambiguë" pour les alias
Modifier le mécanisme d'analyse des options de manière à ce que, par exemple, " clone --recurs ...
" ne provoque pas d'erreur parce que " clone
"comprend à la fois " --recursive
"et " --recurse-submodules
"pour signifier la même chose.
Initialement, "clone" a été compris - unti récursif --recurses-submodules
a été ajouté dans ccdd3da (" clone
: A --recurse-submodules
comme alias de l'option --recursive
", 2010-11-04, Git v1.7.4-rc0).
Depuis bb62e0a (" clone
: enseigner --recurse-submodules
t optionnellement un chemin", 2017-03-17, Git v2.13.0-rc0) la forme longue a été modifiée. promue à la valeur par défaut.
Mais en raison de la manière dont la machine d'analyse des options dans la situation plutôt absurde de :
$ git clone --recurs [...]
error: ambiguous option: recurs (could be --recursive or --recurse-submodules)
Ajouter OPT_ALIAS()
pour exprimer ce lien entre deux ou plusieurs options et utiliser dans git-clone.