Git sous-module pour le suivi à distance de la branche
Je suis en train d'utiliser submodules pour agréger 10+ référentiels dans une structure pour faciliter le développement.
Il est censé clone le module de caisse et une branche.
Au lieu de cela, le module est vérifié dans décollement de la mode.
git clone [email protected]:org/global-repository.git
git submodule update —init
cd config-framework
git status
$git status
#HEAD detached at b932ab5
nothing to commit, working directory clean
gitmodules fichiers semble être bon
$cat .gitmodules
[submodule "config-framework"]
path = config-framework
url = [email protected]:org/config-framework.git
branch = MY_BRANCH
Nous voulons la MY_BRANCH branche à être vérifié par défaut, plutôt que de détacher la tête.
Comment pouvons-nous y parvenir?
C'est la façon dont submodules travail. Le maître des références de projet spécifique s'engager, pas une branche.
OriginalL'auteur Nambi | 2013-11-14
Vous devez vous connecter pour publier un commentaire.
Submodules sont toujours vérifié dans un détaché de la TÊTE mode.
C'est parce qu'un sous-module sera la caisse de la SHA1 stockées dans le entrée spéciale dans l'index de la société mère repo.
De Plus, si vous voulez un sous-module de suivre la direction que vous avez enregistré dans le
.gitmodules
, vous avez besoin de:La
--remote
fera unegit fetch
, en plus d'une caisse de la nouvelleHEAD
.Hélas, de même que la caisse sera de s'engager, non pas de la direction générale (puisque vous n'avez pas la branche locale par défaut dans un sous-module), alors... retour à un décollement de la
HEAD
mode.Voir plus à "Submodules: Spécifier une branche/étiquette".
Vous pouvez essayer (pas testé):
Je profite du fait
git submodule foreach
a accès à '$path
", le nom de la sous-module répertoire relatif au superproject.Il y avait une tentative de spécifier une branche pour un sous-module sera automatiquement archivé dans la (s'engager 23d25e4 pour Git 2.0).... mais il a été annulé (s'engager d851ffb, avril 2d 2014)!
Il pourrait arriver bientôt, mais pas dans son implémentation actuelle.
OriginalL'auteur VonC
Si votre plan est de contribuer à un sous-module, la meilleure approche consiste à vérifier séparément en tant que régulier repo git. Vous travaillez dans des branches différentes télécommandes. Ensuite, pointez votre sous-module à la même télécommande que vous souhaitez utiliser pour le test.
OriginalL'auteur darKoram
Pour obtenir ce fait, j'ai toujours utiliser la commande suivante (légèrement en fonction de VonCs proposition antérieure:
Il vérifie tous les submodules (de manière récursive) à leur "droit" de la branche (si défini) et contraire à la tête comme la dernière commis.
git submodule update --remote --recursive
est assez de ces jours (Git 2.18+)Le problème avec cette approche est (si je n'ai pas tester sur 2.18+ encore) qu'il va mettre à jour TOUS les submodules, aussi ceux qui n'ont pas de suivi à distance de la branche, si je comprends bien. Maintenant, mon sous-module structure se compose essentiellement d'une archive (dans lequel tous les submodules sont gelés pour une sha) et certains submodules qui ont besoin de suivi. L'actuel sous-module système ne semble pas être en mesure de distinguer entre ceux-ci. Aussi, mon approche permet de chercher sélectif... (je sais, j'ai des besoins spécifiques 😉 )
Je suis d'accord. +1. J'ai pensé sax une approche similaire avant... dans un de mes vieux répond: stackoverflow.com/a/18799234/6309. Notez que vous pouvez exclure des submodules de mise à jour: stackoverflow.com/a/43441315/6309
"aussi ceux qui n'ont pas de suivi à distance de la branche, si je comprends bien": malheureusement, oui. J'ai illustré que dans stackoverflow.com/a/37924157/6309 il y a deux ans.
Ah, je pensais qu'il y avait une autre question à laquelle nous avons discuté de cela. Excellente explication, comme toujours 🙂
OriginalL'auteur BartBog