Comment puis-je «valider» les modifications dans un sous-module git?

Dans ma naïveté, j’ai créé un sous-module git et l’ai traité comme un Subversion external – c’est-à-dire qu’il est maintenant plein de changements que je viens de réaliser et qui n’ont jamais été commis.

Existe-t-il un moyen facile de valider / pousser les modifications du sous-module vers le repo en amont? Et quelle est la technique recommandée dans Git pour effectuer un développement simultané sur des référentiels séparés (mais liés) de cette manière?

Le sous-module est son propre repo / zone de travail, avec son propre répertoire .git .

Commencez par valider / pousser les modifications de votre sous-module:

 $ cd path/to/submodule $ git add  $ git commit -m "comment" $ git push 

Dites ensuite à votre projet principal de suivre la version mise à jour:

 $ cd /main/project $ git add path/to/submodule $ git commit -m "updated my submodule" $ git push 

Notez que si vous avez effectué un grand nombre de modifications dans différents sous-modules, vous pouvez (ou pourrez bientôt le faire) tout faire en une fois (c.-à-d. Une pression du repository parent), avec:

 git push --recurse-submodules=on-demand 

git1.7.11 ( [ANNONCE] Git 1.7.11.rc1 ) mentionne:

git push --recurse-submodules ” a appris à examiner en option les historiques des sous-modules liés au superprojet et à les expulser.

Probablement fait après ce patch et l’option --on-demand :

 --recurse-submodules=:: 

Assurez-vous que tous les commits de sous-modules utilisés par les révisions à diffuser sont disponibles sur une twig de suivi à distance.

  • Si la check est utilisée, on vérifiera que tous les commits de sous-module qui ont changé dans les révisions à pousser sont disponibles sur une télécommande.
    Sinon, le push sera interrompu et sortira avec un statut non nul.
  • Si on-demand utilise à la on-demand , tous les sous-modules qui ont changé dans les révisions à pousser seront poussés.
    Si à la demande n’a pas été en mesure de pousser toutes les révisions nécessaires, il sera également annulé et quitter avec un statut non nul.

Cette option ne fonctionne que pour un niveau d’imbrication. Les modifications apscopes au sous-module à l’intérieur d’un autre sous-module ne seront pas poussées.

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.

 $ 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.

Avant de pouvoir valider et pousser, vous devez initialiser un arbre de référentiel fonctionnel pour un sous-module. J’utilise la tortue et fais les choses suivantes:

Vérifiez d’abord s’il existe un fichier .git (pas un répertoire)

  • s’il y a un tel fichier, il contient le chemin vers le répertoire git du supermodule
  • supprimer ce fichier
  • faire git init
  • faire git append un chemin distant celui utilisé pour le sous-module
  • suivez les instructions ci-dessous

S’il y avait un fichier .git, il y avait sûrement un répertoire .git qui suit l’arborescence locale. Vous avez toujours besoin d’une twig (vous pouvez en créer une) ou passer en mode maître (ce qui parfois ne fonctionne pas). Le mieux est de – git fetch – git pull. Ne pas omettre de chercher.

Maintenant, vos commits et vos tirages seront synchronisés avec votre origine / maître