Mettre à jour un sous-module avec la dernière validation

J’ai un projet A qui est une bibliothèque et qui est utilisé dans un projet B.

Les deux projets A et B ont un repository séparé sur github MAIS dans B, nous avons un sous-module de A.

J’ai édité quelques classes sur la bibliothèque, qui se trouve dans le repo A, j’ai poussé sur le repo distant, donc la bibliothèque (repo A) nous a mis à jour.

Ces mises à jour ne reflètent pas la “référence” (le sous-module) que le sous-module fait référence à un précédent commit …. que dois-je faire pour mettre à jour le sous-module sur git?

Entrez le répertoire du sous-module:

cd projB/projA 

Tirez le repository de votre projet A ( ne mettra pas à jour le statut git de votre parent, projet B):

 git pull origin master 

Retournez dans le répertoire racine et vérifiez la mise à jour:

 cd .. git status 

Si le sous-module a été mis à jour auparavant, il affichera quelque chose comme ci-dessous:

 # Not currently on any branch. # Changed but not updated: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: projB/projA (new commits) # 

Ensuite, validez la mise à jour:

 git add projB/projA git commit -m "projA submodule updated" 

Depuis git 1.8 vous pouvez faire

 git submodule update --remote --merge 

Cela mettra à jour le sous-module à la dernière validation distante. Vous devrez alors valider le changement pour que le gitlink du référentiel parent soit mis à jour

 git commit 

Et puis, poussez les modifications car sans cela, l’identité SHA-1 vers le sous-module ne sera pas mise à jour et le changement ne sera visible pour personne.

Si vous mettez à jour un sous-module et que vous vous y engagez, vous devez accéder au référentiel contenant ou supérieur et y append la modification.

 git status 

montrera quelque chose comme:

 modified: some/path/to/your/submodule 

Le fait que le sous-module ne soit pas synchronisé peut également être vu avec

 git submodule 

la sortie montrera:

 +afafaffa232452362634243523 some/path/to/your/submodule 

Le plus indique que votre sous-module pointe en avant de l’endroit où le référentiel supérieur s’attend à pointer.

ajoutez simplement ce changement:

 git add some/path/to/your/submodule 

et le commettre:

 git commit -m "referenced newer version of my submodule" 

Lorsque vous augmentez vos modifications, assurez-vous de faire passer la modification dans le sous-module en premier, puis appuyez sur la modification de référence dans le repository externe. De cette façon, les personnes qui effectuent cette mise à jour pourront toujours exécuter avec succès

 git submodule update 

Plus d’informations sur les sous-modules peuvent être trouvés ici http://progit.org/book/ch6-6.html .

Version ligne unique

 git submodule foreach "(git checkout master; git pull; cd ..; git add '$path'; git commit -m 'Submodule Sync')" 

Mon projet doit utiliser le “dernier” pour le sous-module. Sur Mac OSX 10.11, git version 2.7.1, je n’ai pas eu besoin d’aller dans mon dossier de sous-modules pour collecter ses commits. Je faisais juste un régulier

 git pull --rebase 

au plus haut niveau, et il a correctement mis à jour mon sous-module.

La réponse d’Andy a fonctionné pour moi en échappant à $ path:

 git submodule foreach "(git checkout master; git pull; cd ..; git add \$path; git commit -m 'Submodule Sync')"