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.

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.

Configuration du dépôt de source sur Redmine

En espérant que ce billet vous évitera des heures de recherches ;-)

Bonne journée.

Mickaël ALLAIN.

Vus : 1431
Publié par Mickaël : 9