Si je modifie un sous-module, puis-je remettre le commit à l'origine du sous-module ou cela nécessiterait-il 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 de l'arborescence gitlink, fichier .gitmodules)
$ cd your_submodule
$ git checkout master
<hack,edit>
$ 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 ( [ANNOUNCE] Git 1.7.11.rc1 et note de version , juin 2012) mentionne:
"
git Push --recurse-submodules
" A appris à consulter éventuellement l'historique 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>::
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-modules modifiées dans les révisions à envoyer 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 capable de pousser toutes les révisions nécessaires, il sera également abandonné et sortira avec un statut différent de zéro.
Donc, vous pouvez tout pousser en une fois avec (du repo parent) a:
git Push --recurse-submodules=on-demand
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.
Avec git 2.7 (janvier 2016), un simple push git suffira à pousser le repo 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ée par Junio C Hamano - gitster
- dans commit 5d35d72 , 21 décembre 2015)
Push
: addrecurseSubmodules
option de configurationLe paramètre de ligne de commande
--recurse-submodules
Existe depuis un certain temps mais il n'a pas d'équivalent dans le fichier de configuration.Suivant le style du paramètre correspondant pour
git fetch
, InventonsPush.recurseSubmodules
Pour fournir une valeur par défaut pour ce paramètre.
Ceci nécessite également l'ajout de--recurse-submodules=no
Pour permettre à la configuration d'être remplacée sur la ligne de commande lorsque cela est nécessaire.Le moyen le plus simple d'implémenter cela semble être de faire en sorte que
Push
utilise le code danssubmodule-config
De la même manière quefetch
.
Le git config
Doc inclut maintenant :
Push.recurseSubmodules
:Assurez-vous que tous les commits de sous-module utilisés par les révisions à pousser sont disponibles sur une branche de suivi à distance.
- Si la valeur est '
check
', alors Git vérifiera que toutes les validations de sous-module modifiées dans les révisions à envoyer sont disponibles sur au moins une de ses télécommandes. Si des commits sont manquants, le Push sera abandonné et sortira avec un statut différent de zéro.- Si la valeur est '
on-demand
', Alors tous les sous-modules qui ont été modifiés dans les révisions à pousser seront envoyés. Si à la demande n'a pas été en mesure d'envoyer toutes les révisions nécessaires, il sera également abandonné et sortira avec un statut différent de zéro. -- Si la valeur est '
no
', le comportement par défaut consistant à ignorer les sous-modules lors du transfert est conservé.Vous pouvez remplacer cette configuration au moment du Push 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 , commit 1aa7365 (17 nov. 2016) par Brandon Williams (mbrandonw
) .
(Fusionnée par Junio C Hamano - gitster
- dans commit 12cf11 , 16 décembre 2016)
Push run with --dry-run
N'effectue pas de test à vide (Git 2.11 déc. 2016 et avant/avant) lorsque Push est configuré pour pousser des sous-modules Push à la demande.
Au lieu de cela, tous les sous-modules qui doivent être poussés sont réellement poussés vers leurs télécommandes tandis que toutes les mises à jour pour le superprojet sont effectuées à sec.
Il s’agit d’un bogue et non du comportement voulu d’un essai.Apprenez à
Push
à respecter l'option--dry-run
Lors de la configuration pour pousser récursivement les sous-modules 'à la demande'.
Ceci est effectué en transmettant l'indicateur--dry-run
Au processus enfant qui exécute un Push pour un sous-module lors d'une exécution à sec.
Et toujours dans Git 2.12, vous avez maintenant une option "--recurse-submodules=only
" pour sortir les sous-modules sans pousser le superprojet de niveau supérieur .
Voir commit 225e8bf , commit 6c656c , commit 14c01bd (19 décembre 2016) par Brandon Williams (mbrandonw
) .
(Fusionnée par Junio C Hamano - gitster
- dans commit 792e22e , 31 janv. 2017)