Mise à jour mars 2013
Git 1.8.2 a ajouté la possibilité de suivre les branches.
" git submodule
" a commencé à apprendre un nouveau mode à intégrer avec la pointe de la branche distante (par opposition à l'intégration avec le commit enregistré 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 déjà un sous-module présent, vous souhaitez maintenant suivre une branche, voir " comment faire en sorte qu'un sous-module existant suit une branche ".
Voir également le tutoriel de Vogella sur les sous-modules pour des informations générales sur les sous-modules.
Remarque:
git submodule add -b . [URL to Git repo];
^^^
Voir la git submodule
page de manuel :
Une valeur spéciale de .
est utilisée pour indiquer que le nom de la branche dans le sous-module doit être le même que celui de la branche actuelle dans le référentiel actuel .
Voir commit b928922727d6691a3bdc28160f93f25712c565f6 :
submodule add
: Si --branch
est donné, enregistrez-le dans.gitmodules
Cela vous permet d'enregistrer facilement une submodule.<name>.branch
option .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 ...
obtiendra les mises à jour de la même branche que vous avez utilisée pour initialiser le sous-module, ce qui est généralement ce que vous voulez.
Signé par: W.Trevor King
Réponse originale (février 2012):
Un sous-module est un commit unique référencé par un référentiel parent.
Puisqu'il s'agit d'un dépôt Git en lui-même, «l'historique de tous les commits» est accessible via ungit log
dans ce sous-module.
Donc, pour qu'un parent puisse suivre automatiquement le dernier commit d'une branche donnée d'un sous-module, il devrait:
- cd dans le sous-module
- git fetch / pull pour s'assurer qu'il a les derniers commits sur la bonne branche
- cd de retour dans le repo parent
- add et commit afin d'enregistrer le nouveau commit du sous-module.
gitslave (que vous avez déjà examiné) 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é d'extraire la bonne branche de sous-module, d'effectuer le changement, de valider, puis d'aller dans le superprojet et de valider la validation (ou au moins d'enregistrer le nouvel emplacement du sous-module).
D'autres alternatives sont détaillées ici .