Dans ma naïveté, j’ai mis en place un sous-module git et je l’ai traité comme un externe Subversion - c’est-à-dire qu’il est maintenant rempli de changements que je viens de réaliser et qui n’ont pas été engagés ou poussés nulle part.
Existe-t-il un moyen simple de valider/de transférer les modifications du sous-module dans le référentiel en amont? Et quelle est la technique recommandée dans Git pour effectuer un développement simultané sur des référentiels distincts (mais liés) de cette manière?
Un sous-module est son propre repo/work-area , avec son propre répertoire .git
.
Donc, d'abord commit/Push
votre sous-module change:
$ cd path/to/submodule
$ git add <stuff>
$ git commit -m "comment"
$ git Push
Ensuite, mettez à jour votre projet principal pour suivre la version mise à jour du sous-module :
$ cd /main/project
$ git add path/to/submodule
$ git commit -m "updated my submodule"
$ git Push
Notez que si vous avez validé de nombreux changements dans différents sous-modules, vous pouvez (ou pourrez bientôt le faire) Mettez tout en un (c'est-à-dire un push du référent parent), avec:
_git Push --recurse-submodules=on-demand
_
git1.7.11 ( [ANNOUNCE] Git 1.7.11.rc1 ) mentionne:
"_
git Push --recurse-submodules
_" a appris à consulter éventuellement les historiques des sous-modules liés au superprojet et à les repousser.
Probablement fait après ce correctif et l'option --on-demand
:
_--recurse-submodules=<check|on-demand|no>::
_
Assurez-vous que tous les commits de sous-module utilisés par les révisions à pousser sont disponibles sur une branche de suivi distante.
- Si
check
est utilisé, il sera vérifié que toutes les validations de sous-module modifiées dans les révisions à pousser sont disponibles sur une télécommande.
Sinon, le Push sera abandonné et sortira avec un statut différent de zéro.- Si _
on-demand
_ est utilisé, tous les sous-modules qui ont été modifiés dans les révisions à pousser seront poussés.
Si à la demande n'était pas en mesure de pousser toutes les révisions nécessaires, il sera également abandonné et sortira avec un statut différent de zéro.
Cette option ne fonctionne que pour un niveau d'imbrication. Les modifications apportées au sous-module à l'intérieur d'un autre sous-module ne seront pas appliquées.
$ git submodule status --recursive
Est également un épargnant de vie dans cette situation. Vous pouvez l'utiliser et gitk --all
pour garder une trace de vos sha1 et vérifier que vos sous-modules pointent vers ce que vous pensez qu'ils sont.
Vous pouvez traiter un sous-module exactement comme un référentiel ordinaire. Pour propager vos modifications en amont, il suffit de valider et de pousser comme vous le feriez normalement dans ce répertoire.
Avant de pouvoir valider et Push, vous devez initialiser une arborescence de référentiel fonctionnelle pour un sous-module. J'utilise la tortue et fais les choses suivantes:
Commencez par vérifier s’il existe un fichier .git (pas un répertoire)
S'il y avait un fichier .git, il y avait sûrement un répertoire .git qui surveille l'arborescence locale. Vous devez toujours créer une branche (vous pouvez en créer une) ou passer en mode maître (ce qui ne fonctionne parfois pas). Le mieux est de - git fetch - git pull. Ne pas omettre de chercher.
Maintenant, vos commits et tirages seront synchronisés avec votre origine/maître