100 votes

Forcer les sous-modules Git à rester toujours à jour

J'adore les sous-modules de git. En outre, je déteste les sous-modules de git. Ce que j'aime à leur sujet, c'est comment ils permettent de compartimenter proprement les dépendances, etc. Je comprends l'intérêt de les faire pointer vers un commit spécifique sur un dépôt, je le fais. Mais dans mon cas, je construis une bibliothèque qui sera utilisée dans un autre projet, donc je veux la garder dans ce dépôt séparé.

Cependant, l'agacement survient lorsque je travaille quotidiennement sur cette bibliothèque et que je dois constamment basculer vers l'application utilisant ma bibliothèque pour valider la mise à jour du pointeur.

Alors, est-il possible qu'un sous-module git reste toujours sur la dernière version du dépôt auquel il pointe pendant que je mets constamment à jour et j'ajoute à cette bibliothèque ?

93voto

VonC Points 414372

Comme je le mentionne dans "git submodule suivant la dernière version", vous pouvez depuis git 1.8.2 (mars 2013) faire en sorte qu'un sous-module suive la HEAD de la branche :

git submodule add -b   []

Un SHA1 de sous-module est toujours enregistré dans le dépôt parent en tant que gitlink (entrée spéciale dans l'index)

Mais un git submodule update --remote mettra à jour cette entrée vers le SHA1 correspondant à la HEAD d'une branche du dépôt distant du sous-module.

Si vous avez un sous-module existant, vous pouvez le faire suivre une branche avec :

cd /chemin/vers/votre/dépôt/parent
git config -f .gitmodules submodule..branch 

cd chemin/vers/votre/sous-module
git checkout -b  --track origin/
  # si la branche master existe déjà :
  git branch -u origin/ 

cd /chemin/vers/votre/dépôt/parent
git add chemin/vers/votre/sous-module
git commit -m "Faire suivre le sous-module à la branche "

38voto

Greg Hewgill Points 356191

MISE À JOUR : À partir de git 1.8.2, il semble qu'il y ait une solution. Veuillez consulter la réponse de VonC ci-dessous. La réponse originale est laissée ici pour les utilisateurs de git < 1.8.2.


Non, et c'est intentionnel. S'il existait un moyen de pointer un sous-module vers la "tête actuelle" d'un autre dépôt, il serait alors impossible de récupérer une version historique (comme une version taguée) à partir du dépôt principal. Il ne saurait pas quelle version du sous-module récupérer.

Cela dit, vous pourriez être intéressé par le script git subtree. Cela offre une façon différente de travailler avec les sous-modules qui peut être plus compatible avec votre flux de travail. Je viens de m'en rappeler récemment grâce au message sur HN.

0voto

Sailesh Points 3535

Pourquoi ne pas apporter des modifications à l'intérieur du répertoire du sous-module, qui est lui-même un référentiel git? De cette manière, votre application aura toujours la bibliothèque mise à jour.

Avertissements :

  1. Vous devez quand même valider le changement du sous-module à l'intérieur de votre dépôt d'application pour mettre le changement sous contrôle de version (pour l'application).

  2. S'il y a plus d'une application qui utilise cette bibliothèque, cela ne fonctionnera pas, car seule une application sera à jour à tout moment donné.

0voto

sully Points 11

Pour le moment, il n'y a pas de tel chose. Pour garder le code à jour, j'utilise les commandes suivantes :

télécharger tout pour la première fois : git clone --recursive http://github.com/
télécharger les mises à jour dans un dépôt existant : git submodule update --remote --recursive --merge

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X