Je ne sais pas exactement ce que cela signifie (à partir de la documentation de mise à jour du sous-module Git ):
... fera détacher les sous-modules HEAD, sauf si
--rebase
ou--merge
est spécifié ...
Comment change --rebase
/ --merge
change les choses?
Mon cas d'utilisation principal est d'avoir un tas de référentiels centraux, que j'intégrerai via des sous-modules dans d'autres référentiels. Je voudrais pouvoir améliorer ces référentiels centraux, soit directement dans leur emplacement d'origine, soit à partir de leurs référentiels d'intégration (ceux qui les utilisent via le sous-module).
- À partir de ces sous-modules, puis-je créer des branches / modifications et utiliser push / pull comme je le ferais dans les référentiels habituels, ou y a-t-il des choses à faire attention?
- Comment pourrais-je faire avancer la validation référencée du sous-module de say (tagged) 1.0 à 1.1 (même si la tête du référentiel d'origine est déjà à 2.0), ou choisir quelle validation de la branche est utilisée?
git
git-submodules
bleu profond
la source
la source
Réponses:
Cette page GitPro résume bien les conséquences d'une mise à jour du sous-module git
Remarque mars 2013:
Comme mentionné dans " git submodule tracking latest ", un sous-module maintenant (git1.8.2) peut suivre une branche.
Voir "
git submodule update --remote
vsgit pull
".La réponse de MindTooth illustre une mise à jour manuelle (sans configuration locale):
Dans les deux cas, cela changera les références des sous-modules (le gitlink , une entrée spéciale dans l'index du référentiel parent ), et vous devrez ajouter, valider et pousser lesdites références depuis le référentiel principal.
La prochaine fois que vous clonerez ce référentiel parent, il remplira les sous-modules pour refléter ces nouvelles références SHA1.
Le reste de cette réponse détaille la fonctionnalité de sous-module classique (référence à un commit fixe , qui est le point derrière la notion de sous-module).
Donc, pour répondre à vos questions:
Vous pouvez créer une branche et pousser les modifications.
AVERTISSEMENT (à partir du didacticiel de sous-module Git ): publiez (poussez) toujours la modification de sous-module avant de publier (poussez) la modification dans le superprojet qui la référence. Si vous oubliez de publier la modification du sous-module, les autres ne pourront pas cloner le référentiel.
La page " Comprendre les sous-modules " peut vous aider
Ensemble, ils triangulent une révision spécifique d'un référentiel spécifique qui est extrait dans un emplacement spécifique de votre projet.
Depuis la page du sous-module git
100% correct: vous ne pouvez pas modifier un sous-module, ne vous référez qu'à l'un de ses commits.
C'est pourquoi, lorsque vous modifiez un sous-module à partir du projet principal, vous:
Un sous-module vous permet d'avoir une approche de développement basée sur les composants , où le projet principal ne fait référence qu'à des validations spécifiques d'autres composants (ici "d'autres référentiels Git déclarés comme sous-modules").
Un sous-module est un marqueur (commit) vers un autre référentiel Git qui n'est pas lié par le cycle de développement principal du projet: il (l '"autre" dépôt Git) peut évoluer indépendamment.
Il appartient au projet principal de choisir dans cet autre référentiel tout engagement dont il a besoin.
Cependant, si vous souhaitez, par commodité , modifier l'un de ces sous-modules directement à partir de votre projet principal, Git vous permet de le faire, à condition de publier d' abord ces modifications de sous-module dans son référentiel Git d'origine, puis de valider votre projet principal en vous référant à une nouvelle version dudit sous-module.
Mais l'idée principale reste: référencer des composants spécifiques qui:
La liste des validations spécifiques à laquelle vous vous référez dans votre projet principal définit votre configuration (c'est de cela dont parle la gestion de la configuration , englobant un simple système de contrôle de version )
Si un composant pouvait vraiment être développé en même temps que votre projet principal (car toute modification sur le projet principal impliquerait de modifier le sous-répertoire, et vice-versa), alors ce ne serait plus un "sous-module", mais un fusion de sous-arborescence (également présentée dans la question Transfert de la base de code héritée des cv vers le référentiel distribué ), reliant ensemble l'historique des deux référentiels Git.
Est-ce que cela aide à comprendre la vraie nature des sous-modules Git?
la source
svn:externals
.git submodule foreach
Pour mettre à jour chaque sous-module, vous pouvez invoquer la commande suivante (à la racine du référentiel):
Vous pouvez supprimer l' option -q pour suivre l'ensemble du processus.
la source
git submodule update --init --recursive
partir de la racine, il les récupérera tous de manière récursive et les initialisera s'ils ne le sont pas déjà.git submodule update --rebase --remote
Pour traiter l' option
--rebase
vs--merge
:Supposons que vous ayez un super référentiel A et un sous-module B et que vous vouliez travailler dans le sous-module B. Vous avez fait vos devoirs et vous savez qu'après avoir appelé
git submodule update
vous êtes dans un état sans TÊTE, il est donc difficile de revenir sur tous les engagements que vous effectuez à ce stade. Vous avez donc commencé à travailler sur une nouvelle branche dans le sous-module B
Pendant ce temps, quelqu'un d'autre dans le projet A a décidé que la dernière et la meilleure version de B est vraiment ce que A mérite. Par habitude, vous fusionnez les modifications les plus récentes et mettez à jour vos sous-modules.
Oh non! Vous êtes à nouveau dans un état sans tête, probablement parce que B pointe maintenant vers le SHA associé au nouveau conseil de B, ou un autre commit. Si seulement vous aviez:
Maintenant que la meilleure idée de B a été rebasée sur le nouveau commit, et plus important encore, vous êtes toujours sur votre branche de développement pour B, pas dans un état sans tête!
(Le
--merge
fusionnera les modifications de beforeUpdateSHA à afterUpdateSHA dans votre branche de travail, au lieu de rebaser vos modifications sur afterUpdateSHA.)la source
Git 1.8.2 propose une nouvelle option
--remote
, qui activera exactement ce comportement. Fonctionnementrécupérera les dernières modifications en amont dans chaque sous-module, les rebasera et vérifiera la dernière révision du sous-module. Comme le dit la documentation :
Cela revient à exécuter
git pull
dans chaque sous-module, ce qui est généralement exactement ce que vous voulez.(Ceci a été copié de cette réponse .)
la source