J'ai un projet A qui est une bibliothèque et il est utilisé dans un projet B.
Les deux projets A et B ont un référentiel séparé sur github MAIS à l'intérieur de B, nous avons un sous-module de A.
J'ai édité quelques classes sur la bibliothèque, qui est dans le repo A, j'ai poussé sur le repo distant, donc la bibliothèque (repo A) est mise à jour.
Ces mises à jour ne reflètent pas la "référence" (le sous-module) auquel le sous-module fait référence à un commit précédent .... que dois-je faire pour mettre à jour le sous-module sur git?
la source
git submodule update
lorsque quelqu'un a mis à jour le projet (vous obtiendrez un nouvel ID de validation).git push
?git push <remote> <branch>
, par exemplegit push origin dev
.git submodule update
ne fonctionne sans drapeaux que lorsqu'un commit a été tiré (dans le projet B) qui met à jour les références des sous-modules en question (projet A). Pour mettre à jour le projet B afin de référencer laHEAD
branche de suivi à distance du projet A, vous devrez procédergit submodule update --remote --merge
comme indiqué dans la réponse de Paul Hatcher ci-dessous.Depuis git 1.8 vous pouvez faire
Cela mettra à jour le sous-module vers la dernière validation à distance. Vous devrez ensuite valider la modification pour que le gitlink dans le référentiel parent soit mis à jour
Et puis poussez les modifications car sans cela, l'identité SHA-1 pointant vers le sous-module ne sera pas mise à jour et donc la modification ne sera visible par personne d'autre.
la source
git commit
tout le monde ne le voit toujours pas.On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
modified: SubmoduleA (new commits)
modified: SubmoduleB (new commits)
git add
avant de s'engager.Si vous mettez à jour un sous-module et que vous vous y engagez, vous devez vous rendre au référentiel contenant ou supérieur et y ajouter la modification.
affichera quelque chose comme:
Le fait que le sous-module n'est pas synchronisé peut également être observé avec
la sortie affichera:
Le signe plus indique que votre sous-module pointe vers l'endroit où le référentiel supérieur s'attend à ce qu'il pointe.
ajoutez simplement cette modification:
et engagez-le:
Lorsque vous augmentez vos modifications, assurez-vous de pousser d'abord la modification dans le sous-module, puis appuyez sur la modification de référence dans le référentiel externe. De cette façon, les personnes qui mettent à jour pourront toujours exécuter avec succès
Plus d'informations sur les sous-modules peuvent être trouvées ici http://progit.org/book/ch6-6.html .
la source
+
lorsque vous exécutezgit submodule
, assurez-vous d'avoir initialisé et importé les sous-modules. Les commandes pour cela sontgit submodule init
etgit submodule update
, respectivement.Version à ligne unique
la source
Quelques-unes des autres réponses recommandent de fusionner / valider dans le répertoire du sous-module, ce qui peut devenir un peu compliqué pour l'OMI.
En supposant que le serveur distant est nommé
origin
et que nous voulons lamaster
branche du ou des sous-modules, j'ai tendance à utiliser:git submodule foreach "git fetch && git reset --hard origin/master"
Remarque: Cela effectuera une réinitialisation matérielle sur chaque sous-module - si vous ne le souhaitez pas, vous pouvez passer
--hard
à--soft
.la source
Mon projet devrait utiliser la «dernière» pour le sous-module. Sur Mac OSX 10.11, git version 2.7.1, je n'avais pas besoin d'aller «dans» mon dossier de sous-module pour collecter ses validations. J'ai simplement fait un
au niveau supérieur, et il a correctement mis à jour mon sous-module.
la source
La réponse d'Andy a fonctionné pour moi en s'échappant de $ path:
la source
'$path'