Git submodule push

Si je modifie un sous-module, puis-je repousser le commit à l’origine du sous-module, ou est-ce que cela nécessiterait un clone? Si clone, puis-je stocker un clone dans un autre référentiel?

Un sous-module n’est rien d’autre qu’un clone d’un référentiel git dans un autre référentiel avec des métadonnées supplémentaires (entrée d’arborescence gitlink, fichier .gitmodules)

 $ cd your_submodule $ git checkout master  $ git commit -a -m "commit in submodule" $ git push $ cd .. $ git add your_submodule $ git commit -m "Updated submodule" 

Notez que depuis git1.7.11 ( [ANNONCE] Git 1.7.11.rc1 et note de publication , juin 2012) 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.

Donc, vous pouvez tout pousser en une seule fois avec (du repository parent) a:

 git push --recurse-submodules=on-demand 

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.


Avec git 2.7 (janvier 2016), une simple poussée de git suffira à pousser le repository parent … et tous ses sous-modules.

Voir commit d34141c , commit f5c7cd9 (03 déc 2015), commit f5c7cd9 (03 déc 2015) et commit b33a15b (17 nov 2015) par Mike Crowe ( mikecrowe ) .
(Fusionné par Junio ​​C Hamano – gitster – dans commit 5d35d72 , 21 décembre 2015)

push : ajoute l’option de configuration recurseSubmodules

Le paramètre de ligne de commande --recurse-submodules existe depuis un certain temps, mais il ne contient pas de fichier de configuration équivalent.

Suivant le style du paramètre correspondant pour git fetch , push.recurseSubmodules pour fournir un paramètre par défaut.
Cela nécessite également l’ajout de --recurse-submodules=no pour permettre la substitution de la configuration sur la ligne de commande si nécessaire.

Le moyen le plus simple d’implémenter cela est de faire en sorte que push code d’utilisation push dans submodule-config de la même manière.

Le document de git config comprend maintenant :

push.recurseSubmodules :

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 valeur est ‘ check ‘, alors Git vérifiera que tous les commits de sous-modules modifiés dans les révisions à pousser sont disponibles sur au moins une télécommande du sous-module. Si des commits sont manquants, le push sera annulé et sortira avec un statut non nul.
  • Si la valeur est ” on-demand “, tous les sous-modules modifiés 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. –
  • Si la valeur est « no », le comportement par défaut consistant à ignorer les sous-modules lors de la poussée est conservé.

Vous pouvez remplacer cette configuration au moment de la poussée en spécifiant ” --recurse-submodules=check|on-demand|no “.

Alors:

 git config push.recurseSubmodules on-demand git push 

Git 2.12 (T1 2017)

git push --dry-run --recurse-submodules=on-demand fonctionnera réellement.

Voir commit 0301c82 , commettre 1aa7365 (17 nov. 2016) par Brandon Williams ( mbrandonw ) .
(Fusionné par Junio ​​C Hamano – gitster – dans commit 12cf113 , 16 déc 2016)

push run with --dry-run ne push run with --dry-run pas réellement (Git 2.11 déc. 2016 et moins / avant) effectuer un essai à sec lorsque la poussée est configurée pour pousser les sous-modules à la demande.
Au lieu de cela, tous les sous-modules qui doivent être poussés sont en fait poussés vers leurs télécommandes alors que toutes les mises à jour du superprojet sont effectuées en mode sec.
Ceci est un bug et non le comportement prévu d’une course à sec.

Apprenez à respecter l’option --dry-run lorsqu’elle est configurée pour pousser les sous-modules de manière récursive à la demande.
Cela se fait en passant l’ --dry-run au processus enfant qui effectue une poussée pour les sous-modules lors de l’exécution d’un essai à sec.


Et toujours dans Git 2.12, vous avez maintenant l’option ” --recurse-submodules=onlypour pousser les sous-modules sans pousser le superprojet de niveau supérieur .

Voir commit 225e8bf , commit 6c656c3 , commit 14c01bd (19 déc 2016) par Brandon Williams ( mbrandonw ) .
(Fusion par Junio ​​C Hamano – gitster – dans commit 792e22e , 31 janvier 2017)