Visualiser les dépôts Git de Gitosis dans Redmine
Tout récemment j'ai été confronté à un problème de taille. Comment visualiser mes dépôts Git crée à partir de Gitosis sur Redmine ? Gitosis c'est vraiment terrible pour créer "rapidement" des repositories privées, problème, s'ils ne sont pas visibles dans Redmine, c'est pas si "grave" que ça, mais bon, c'est toujours intéressant de pouvoir visualiser un repository Git via une page Web.
Problème entre Redmine et Gitosis
Gitosis fonctionne avec ce qu'on appelle des repositories de type "nu" ou "bare" en anglais. Alors qu'à contrario, Redmine lui, fonctionne exclusivement avec des copies de travail.
Lorsque j'essaye de spécifier un repository, par exemple /home/git/repositories/test.git, il est donc "normal" que Redmine ne soit pas très content vu qu'il ne s'attend pas à ce type de repository.
Google-isons
Du côté de Google, pas de "grandes" avancées. Seulement, 2 ou 3 sujets sur le forum de Redmine.
- Help browsing Git repository from Redmine
- What's your Git workflow with Redmine?
- HowTo keep in sync your git repository_for_redmine (Merci à JB de ce complément d'information)
Je remarque un plugin Gitosis pour Redmine, malheureusement, il ne gère "seulement" la création du repository, en aucun cas son exploitation dans Redmine.
Mais je recherche dans les commentaires de Hosting Git repositories, The Easy (and Secure) Way que j'ai utilisé pour créer mon billet sur Gitosis.
Stu nous dit qu'il n'a pas de problème avec Gitosis et Redmine.
I run redmine with git no problem, I have a hook that updates a local checkout. Redmines git adapter doesnt work with a bare .git repo it needs a proper checkout. on post-update i just do a git pull, which since its a local repo doesnt use any more space since it maps to the master .git repo. in my post-update before the update server info I call /bin/sh /home/git/repositories/project.git/hooks/update_local_repo.sh and that script looks like; !/bin/sh cd /home/git/checkout/project || exit unset GIT_DIR git pull /home/git/repositories/project.git/ master I also have a cron job that updates redmines repositories every 30 minutes rather than each time a user hits the repo and having redmine check for updates (slow). (ruby script/runner “Repository.fetch_changesets” -e production)
Mise en place de la solution de contournement
Explications
Le fichier "post-update" est exécuté après chaque "push" sur le repository. Donc, d'une manière "simple" il nous faut "puller" un répertoire sur notre serveur afin de prendre en compte les modifications faites sur le repository. Ce fichier doit être obligatoirement exécutable ;-)
Cas pratique du repository "test"
Sur le serveur qui héberge Gitosis, nous avons donc un repository dans /home/git/repositories/test.git
Édition du fichier post-update
J'édite le fichier /home/git/repositories/test.git/hooks/post-update et y insère les informations suivantes.
#!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, make this file executable by "chmod +x post-update". /bin/sh /home/git/repositories/test.git/hooks/update_local_repo.sh exec git-update-server-info
post-update lancement donc le fichier /home/git/repositories/test.git/hooks/update_local_repo.sh après chaque "push".
Édition du fichier update_local_repo.sh
Dans le fichier /home/git/repositories/test.git/hooks/update_local_repo.sh j'y insère ceci.
cd /home/git/checkout/test || exit unset GIT_DIR git pull origin master
Le dossier /home/git/checkout/test sera bien sûr créé au préalable pour que tout fonctionne ;-)
L'utilisateur en charge du "git clone" devra être autorisé à faire un clone.
Ajout du dépôt dans la configuration de Redmine
Après avoir activé le module "dépôts de sources" dans l'onglet "configuration" de Redmine, vous serez en mesure d'accéder à l'onglet "dépôt" sur votre projet.
Il ne vous reste plus qu'a indiquer le chemin à surveiller pour Redmine.
En espérant que ce billet vous évitera des heures de recherches ;-)
Bonne journée.
Mickaël ALLAIN.