Précédent   Forum du club des développeurs et IT Pro > Général Développement > ALM > Usine Logicielle > SCM > DVCS
DVCS Forum d'entraide sur les outils de gestion de sources décentralisée (Distributed Version Control System) tels Mercurial, Git, et Bazaar
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 24/02/2013, 19h14   #1
SmallFitz
Membre du Club
 
Inscription : mars 2010
Messages : 67
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2010
Messages : 67
Points : 56
Points : 56
Par défaut [Sous module] Garantir la mise à jour du projet père

Bonsoir,

J'ai un projet "père" qui contient des sous modules (lvl1_Sub1, lvl1_Sub2, lvl1_Sub3...)
Le projet "père", et les sous modules ont chacun un dépôt .git.

Lorsque on publie (push) sur le dépôt distant d'un sous module, il faut :
  • mettre à jour (pull) le projet "père"
  • enregistrer sur le "père" les modifs du sous module lvl1_Sub1 (commit)
  • publier les modifs du "père" (push) sur son dépôt distant.

Mes collègues travaillent uniquement sur les sous modules, pas sur le projet "père".
Pour éviter toute erreur ils n'ont pas accès en écriture sur le "père", mais moi je le peux.
Le "père" est hébergé sur Github.

Je souhaiterais mettre en place un "truc" qui me garantisse que les étapes
listées précédemment sont bien respectées, et ce à chaque push effectué sur
un sous module par un collègue.
Et j'avoue que je coince...

Avez vous des conseils à me donner ?

Merci d'avance.
SmallFitz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2013, 23h27   #2
Philippe Bastiani
Membre émérite
 
Homme Philippe BASTIANI
Architecte technique
Inscription : juin 2005
Messages : 402
Détails du profil
Informations personnelles :
Nom : Homme Philippe BASTIANI
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Architecte technique
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : juin 2005
Messages : 402
Points : 834
Points : 834
Il faut regarder du côté des hooks ! sur un post-merge... l'idée est de lancer un git-submodule update

IMHO (jamais testé), il faut les placer dans .git/modules/toto/hooks où toto est le chemin de ton module !

Dernière minute : ce projet (post-merge & post-commit) ! Tu dois pouvoir t'en inspirer...

Pourrais-tu nous faire un retour d'expérience sur le sujet...
a+
Philippe

PS : Au passage: pour faciliter le travail avec les sous-modules tu as, aussi, ce projet sur github.
Philippe Bastiani est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2013, 23h53   #3
SmallFitz
Membre du Club
 
Inscription : mars 2010
Messages : 67
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2010
Messages : 67
Points : 56
Points : 56
Citation:
Il faut regarder du côté des hooks ! sur un post-merge... l'idée est de lancer un git-submodule update

IMHO (jamais testé), il faut les placer dans .git/modules/toto/hooks où toto est le chemin de ton module !

Dernière minute : ce projet (post-merge & post-commit) ! Tu dois pouvoir t'en inspirer...
Je te remercie beaucoup !
Je découvre tout juste l'existence des hooks, tes liens vont m'être d'une aide précieuse.

Citation:
Pourrais-tu nous faire un retour d'expérience sur le sujet...
Oui je détaillerai mes démarches au fur et à mesure que j'aurai du nouveau.
SmallFitz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 02h13   #4
SmallFitz
Membre du Club
 
Inscription : mars 2010
Messages : 67
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : mars 2010
Messages : 67
Points : 56
Points : 56
Les hooks sont donc des scripts exécutés par git après certains "évènements",
déclenchés lors de l'utilisation de certaines commandes de git.

Je veux déclencher certaines actions après qu'un push ce soit produit depuis le sous
module local d'un collègue.

Cependant je ne souhaite pas me baser sur les hooks des collègues, car rien ne garanti
qu'ils soient présents, activés, que sais-je, c'est leur machine.
Et de toute façon ils n'ont pas les droits pour mettre à jour le projet "père".

Un "push" effectué en local déclenche sur le dépôt distant l'évènement (?) "git-receive-pack".
Ce dernier enclenche l'exécution des hooks pre-receive, update, post-receive, et
post-update en leur fournissant des infos sous la forme de paramètres.
Il y a donc moyen d'effectuer des actions sur le dépôt distant grâce à ces hooks.

Or ce dépôt distant est sur Github, qui n'autorise pas la création de hooks directement
dans $GIT_DIR/hooks/

J'ai donc un choix à faire, par ordre de préférence :
  • Trouver un autre hébergement git (gratuit) permettant d'exécuter mes hooks sur le serveur.
J'ignore si ça existe.
  • Interroger moi même les sous modules à intervalles réguliers (tâche cron), puis utiliser
    les hooks pour détecter un changement, et enfin déclencher un script effectuant les
    bonnes actions.
Ce qui impliquerait la possibilité de rater des mises à jour de sous modules : si entre
deux vérifications les fonctionnalités A, B et C ont été ajoutées dans un sous module,
je ne consignerai que la dernière, la C.
Pour notre projet ce n'est pas très grave.
Mais j'ignore actuellement si ça peut poser des soucis au niveau du projet père. Vu
qu'il ne fait que pointer sur les commits des sous modules, ça ne devrait pas poser de
problèmes. A tester.
  • Donner aux collegues des droits en écriture sur le projet père, pour leur permettre de faire
    eux même les manips via les hooks.
Et je fais une crise cardiaque s'ils font nimp sur le projet père.

Je verrai demain...
SmallFitz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 10h54   #5
Philippe Bastiani
Membre émérite
 
Homme Philippe BASTIANI
Architecte technique
Inscription : juin 2005
Messages : 402
Détails du profil
Informations personnelles :
Nom : Homme Philippe BASTIANI
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Architecte technique
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : juin 2005
Messages : 402
Points : 834
Points : 834
Oui effectivement le post-merge est local donc il ne pourra pas t'aider directement

Pour travailler avec Github, il faut donc passer par un post-receive à paramétrer depuis l'interface admin Github du projet (Settings / Service Hooks).
En fait, tu vas activer un service hook, et il te faut donc un service tiers permettant de traîter les notifs (par exemple http://gitlive.com/ pour avoir en visu les pushes qui ont été fait, email, ou un service d'intégration continue).

L'autre soluce pour Github est de ne pas passer par les collaborateurs... mais travailler en pullrequest sur des forks

a+
Philippe
Philippe Bastiani est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h30.


 
 
 
 
Partenaires

Hébergement Web