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?
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:
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 .