[Mise à jour 9/16/2010]Gérer l'accès HTTP aux référentiels git en utilisant gitosis
Après avoir examiné hier soir, je me suis aperçu que ma question initiale était vraiment demandé 2 choses distinctes:
1 Il est possible de définir le hook de post-mise à jour pour tous les référentiels distants créés par gitosis (sans devoir exécuter manuellement mv hooks/post-update.sample hooks/post-update
après la création d'un référentiel dans gitosis). Ceci est nécessaire pour le clonage via HTTP pour fonctionner (les clients HTTP stupides s'appuient sur le fait que git update-server-info
est appelée depuis le point de mise à jour post-mise à jour).
2) Une fois que le référentiel est accessible via HTTP, est-il possible de transformer l'accès et à l'extérieur à l'aide d'une option dans gitosis.conf (quelque chose de similaire à daemon = no
ou gitweb = yes
)
--- Solution à la question 1 ---
Il s'avère que Git utilise des modèles pour créer de nouveaux référentiels avec la commande git init
. En effectuant mv hooks/post-update.sample hooks/post-update
dans le répertoire de modèles, tous les futurs appels à git init
sur mon serveur auront le hook de post-mise à jour correctement configuré. (Sur OSX le répertoire modèle est /opt/local/share/git-core/templates/
pour ceux qui se soucient)
L'autre exigence pour que cela fonctionne tourne sur les règles de réécriture Apache afin que l'URL clone HTTP pour le dépôt ressemble http//git.example.com/repo.git
Mes règles de réécriture dans /etc/apache2/extra/httpd-vhosts.conf
ressembler à ceci:
# turning on mod rewrite
RewriteEngine on
# make the front page an internal rewrite to the gitweb script
RewriteRule ^/$ /cgi-bin/gitweb.cgi [L,PT]
# make access for "dumb clients" work
RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI} [L,PT]
--- Toujours à la recherche d'une solution à la question 2 ... HELP! :) ---
Maintenant que le clonage HTTP fonctionne pour tous mes référentiels, je me demande s'il existe un moyen de gérer le contrôle d'accès HTTP en utilisant la gitose. Réglage daemon = no
et gitweb = no
désactive git-daemon et l'accès gitweb pour le dépôt, mais étant donné que les règles de réécriture Apache sont encore, le repo est clone encore capable à http://git.example.com/repo.git
. Des idées sur la façon d'utiliser la gitose pour gérer cela?
[La question que j'ai posté]
Est-il possible de gérer l'accès http à l'aide des dépôts git gitosis? Par exemple, dans la gitose.conf Je peux gérer l'accès pour gitweb et un démon git en utilisant:
# Allow gitweb to show this repository.
gitweb = yes
# Allow git-daemon to publish this repository.
daemon = no
Je suis actuellement en mesure de cloner mon dépôt en exécutant la commande suivante:
$ git clone git://git.example.com/repo.git
Cependant, quand je lance la commande suivante :
$ git clone http://git.example.com/repo.git
je reçois le message d'erreur suivant:
fatal: http://git.example.com/repo.git/info/refs not found: did you run git update-server-info on the server?
Cependant, si je me connecte à mon serveur et exécutez la commande suivante à partir de repo.git:
# From http://progit.org/book/ch4-5.html
$ cd project.git
$ mv hooks/post-update.sample hooks/post-update
$ chmod a+x hooks/post-update
$ git update-server-info
clonage puis via http fonctionne très bien.
Existe-t-il un moyen de gérer l'accès http au référentiel à partir de la gitose?
Pas comme une réponse à votre question mais j'ai entendu 'gitolite' est la nouvelle version de la gitose, encore maintenue (et avec plus de fonctionnalités). – ikanobori