Comment extraire une version spécifique d'un sous-module en utilisant 'git submodule'?

Réponses:

167

Les référentiels de sous-modules restent dans un état HEAD détaché pointant vers un commit spécifique. Changer ce commit implique simplement de retirer une balise ou un commit différent, puis d'ajouter le changement au référentiel parent.

$ cd submodule
$ git checkout v2.0
Previous HEAD position was 5c1277e... bumped version to 2.0.5
HEAD is now at f0a0036... version 2.0

git-status sur le référentiel parent signalera maintenant un arbre sale:

# On branch dev [...]
#
#   modified:   submodule (new commits)

Ajoutez le répertoire du sous-module et engagez-vous à stocker le nouveau pointeur.

joemaller
la source
14
Une fois que j'ai validé le dépôt parent avec une branche / version spécifique d'un sous-module, d'autres peuvent-ils acheter la même version du sous-module à l'avenir? Ou, ils doivent spécifier à nouveau manuellement?
QZHua
@QZHua: J'ai expérimenté cela moi-même et il semble que l'ID de validation du sous-module soit conservé lorsque le parent est cloné.
Psychonaut
37

Étape 1: ajouter le sous-module

   git submodule add git://some_repository.git some_repository

Étape 2: Fixez le sous-module à un commit particulier

Par défaut, le nouveau sous-module suivra HEAD de la branche principale, mais il ne sera PAS mis à jour lorsque vous mettez à jour votre référentiel principal. Afin de changer le sous-module pour suivre un commit particulier ou une branche différente, changez de répertoire dans le dossier du sous-module et changez de branche comme vous le feriez dans un référentiel normal.

   git checkout -b some_branch origin/some_branch

Maintenant, le sous-module est fixé sur la branche de développement au lieu de HEAD of master.

From Two Guys Arguing - Attachez des sous-modules Git à un commit ou une branche particulière .

fsenart
la source
20
C'est plus facile à utilisergit submodule add -b some_branch git://some_repository.git some_repository
Caumons
15
En ce moment, il ne semble pas que cela git submodule add -bpuisse prendre une balise ou un sha1hash. Cela ne peut prendre qu'une branche.
CMCDragonkai
Y a-t-il un problème pour cela dans le suivi des problèmes Git? Quelqu'un voudrait-il publier une URL afin que nous puissions la suivre? Merci.
colan
Les instructions @colan pour signaler les bogues se trouvent sur git-scm.com/community . Mais -bles branches de support et non les balises ou les shas de commit sont une fonctionnalité et non un bogue (en fait, -bc'est un raccourci pour --branch).
henry
1
Soupir. Après toutes ces années, ils n'ont toujours pas de suivi des problèmes publics.
colan le