web-dev-qa-db-fra.com

dernier sous-module git

Nous déplaçons notre (énorme) projet vers git et pensons utiliser des sous-modules. Notre plan est d’avoir trois têtes différentes dans le superprojet: release, stable, last. Les responsables du projet se chargeront de la distribution et des branches stables. Ils déplaceront les sous-modules selon les besoins.

La question est la "dernière" tête. Nous aimerions que la "dernière" tête du superprojet trace les branches principales de tous les sous-modules (automatiquement). Et aussi ce serait génial si cela montrait l'histoire de tous les commits au sous-module.

J'ai regardé gitslave, mais ce n'est pas tout à fait ce que nous voulons. Aucune suggestion?

126
l.thee.a

Mise à jour mars 2013

Git 1.8.2 ajoutait la possibilité de suivre les branches.

"git submodule" A commencé à apprendre un nouveau mode d'intégration avec la pointe de la branche distante (par opposition à l'intégration à la validation enregistrée dans le gitlink du superprojet).

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

Si vous aviez un sous-module déjà présent vous souhaitez maintenant suivre une branche, voir "comment transformer un sous-module existant en piste branche ".

Consultez également le tutoriel de Vogella sur les sous-modules pour obtenir des informations générales sur les sous-modules.

Remarque:

git submodule add -b . [URL to Git repo];
                    ^^^

Voir git submodule Page de manuel :

Une valeur spéciale de . Indique que le nom de la branche du sous-module doit être identique à celui de la branche actuelle du référentiel actuel .


Voir commit b928922727d6691a3bdc28160f93f25712c565f6 :

submodule add: Si --branch Est donné, enregistrez-le dans .gitmodules

Cela vous permet d’enregistrer facilement une option submodule.<name>.branch dans .gitmodules lorsque vous ajoutez un nouveau sous-module. Avec ce patch,

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

réduit à

$ git submodule add -b <branch> <repository> [<path>]

Cela signifie que les futurs appels à

$ git submodule update --remote ...

recevra les mises à jour de la même branche que celle utilisée pour initialiser le sous-module, ce qui correspond généralement à ce que vous souhaitez.

Signé par: W. Trevor King


Réponse originale (février 2012):

Un sous-module est un simple commit référencé par un référent parent.
Comme il s’agit d’un repo Git, l’historique de toutes les commits est accessible via un git log Dans ce sous-module.

Ainsi, pour qu'un parent puisse suivre automatiquement le dernier commit d'une branche donnée d'un sous-module, il doit:

  • cd dans le sous-module
  • git fetch/pull pour s'assurer qu'il a les derniers commits sur la bonne branche
  • cd dans le dépôt parent
  • add et commit pour enregistrer le nouveau commit du sous-module.

gitslave (que vous avez déjà regardé) semble être la meilleure solution, , y compris pour l'opération de validation .

Il est un peu ennuyeux d’apporter des modifications au sous-module en raison de la nécessité de vérifier sur la branche de sous-module appropriée, de modifier, d’engager, puis de lancer le superprojet et d’engager la validation (ou au moins d’enregistrer le nouvel emplacement du fichier). sous-module).

Les autres alternatives sont détaillées ici .

209
VonC