J'adore les sous-modules Git. Aussi, je déteste les sous-modules Git. Ce que j'aime chez eux, c'est la façon dont cela vous permet de compartimenter proprement des dépendances, etc. Mais dans mon cas, je construis une bibliothèque qui sera utilisée dans un autre projet, je veux donc la conserver dans ce dépôt séparé.
Cependant, la gêne survient lorsque je travaille quotidiennement sur cette bibliothèque et que je dois constamment revenir à l'application en utilisant ma bibliothèque pour valider la mise à jour du pointeur.
Alors, est-il possible d’avoir un sous-module git juste toujours à la tête du référentiel vers lequel il pointe pendant que je mets à jour et rajoute constamment à cette bibliothèque?
Non, et c'est par conception. S'il existait un moyen de pointer un sous-module sur la "tête actuelle" d'un autre référentiel, il serait alors impossible d'extraire une version historique (telle qu'une version marquée) du référentiel principal. Il ne saurait pas quelle version du sous-module vérifier.
Ceci dit, vous pourriez être intéressé par le script git subtree . Cela offre une manière différente de travailler avec des sous-modules plus compatibles avec votre flux de travail. Je viens de me rappeler cela par le récent post sur HN .
Comme je l'ai mentionné dans " git subodule tracking latest ", vous pouvez depuis git 1.8.2 (mars 2013) créer un sous-module permettant de suivre le HEAD de la branche:
git submodule add -b <branch> <repository> [<path>]
Un sous-module SHA1 est toujours enregistré dans le référent parent en tant que gitlink ( entrée spéciale dans l'index )
Mais un git submodule update --remote
mettra à jour cette entrée dans le SHA1 correspondant au HEAD d'une branche du référentiel distant du sous-module.
Si vous avez un sous-module existant, vous pouvez le faire suivre une branche avec:
cd /path/to/your/parent/repo
git config -f .gitmodules submodule.<path>.branch <branch>
cd path/to/your/submodule
git checkout -b branch --track Origin/branch
# if the master branch already exist:
git branch -u Origin/master master
cd /path/to/your/parent/repo
git add path/to/your/submodule
git commit -m "Make submodule tracking a branch"
Pourquoi n'apportez-vous pas de modifications dans le répertoire du sous-module, qui est lui-même un dépôt Git? De cette façon, votre application aura toujours une bibliothèque mise à jour.
Mises en garde:
Vous devez toujours valider le changement de sous-module dans votre référentiel d’application pour mettre le changement dans le contrôle de version (pour l’application).
S'il y a plus d'applications que celles qui utilisent cette bibliothèque, cela ne fonctionnera pas, car une seule application sera à jour à la fois.