web-dev-qa-db-fra.com

Forcer les sous-modules Git à toujours rester à jour

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?

43
Ben

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 .

27
Greg Hewgill

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"
35
VonC

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:

  1. 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).

  2. 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.

0
Sailesh