42 votes

Flux de travail des sous-modules Git

Dans mon projet, j'ai besoin d'utiliser du code tiers, stocké dans plusieurs dépôts Git. Mon projet est également stocké dans un dépôt Git (séparé). Plusieurs personnes travaillent avec moi sur le projet principal, et j'en suis le mainteneur.

Dans les projets précédents, j'avais l'habitude de copier manuellement les dépendances dans l'arbre de travail Git, en ajoutant un petit fichier spécifiant la version que j'utilise.

C'est plutôt inconfortable car je dois mettre à jour quotidiennement l'une des dépendances, et j'y apporte souvent du code moi-même, la plupart du temps en même temps que des changements dans le projet principal.

J'ai décidé d'essayer les sous-modules Git pour assurer la gestion. Plus j'essaie, plus je suis frustré. Il semble même que la copie manuelle soit, peut-être, meilleure.

Voici quelques-unes de mes préoccupations :

  • Nous ne sommes plus en mesure d'obtenir un état cohérent du référentiel avec une seule commande ( git checkout a maintenant besoin git submodule update --init ).
  • Nous ne sommes pas en mesure d'utiliser correctement certains outils Git ( git archive est la plus notable).
  • Nous ne sommes pas en mesure de voir les changements d'état / les différences dans les sous-modules à partir du projet principal.
  • Je viens de le découvrir à mes dépens, git submodule ne fonctionne pas avec --git-dir et --work-tree et requièrent un changement physique du répertoire courant vers le "niveau supérieur de l'arborescence de travail".

Il semble que pour rationaliser le flux de travail de nos sous-modules (c'est-à-dire une opération == une commande), nous devons écrire une enveloppe assez épaisse autour de Git. C'est triste.

Notez qu'il n'est pas possible de s'éloigner de Git ou de fusionner entièrement le développement des sous-projets dans le projet principal.

J'utilise peut-être git submodules de manière erronée ? Existe-t-il un bon tutoriel sur le flux de travail ?

N'hésitez pas à vous exprimer, même si vous ne connaissez pas la bonne réponse, mais partagez mes préoccupations :-)

13voto

Ben Stiglitz Points 3054

Vous pouvez essayer git subtree ( lien alt ). J'ai eu beaucoup de chance avec cela, en utilisant à la fois des dépôts distants et des dépôts propres (non liés à la technologie master ) dans mon projet.

6voto

Un récent fil de discussion sur la liste de diffusion de git inclut un correctif sur la façon d'obtenir un état cohérent du dépôt avec une seule commande. Il s'agit essentiellement d'appeler git submodule update lors d'un changement de branche.

http://thread.gmane.org/gmane.comp.version-control.git/130155/focus=130330

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