2010-09-15 45 views
3

[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?

+0

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

Répondre

1

Est-ce que gitweb était déjà installé et fonctionnait? Vérifiez this blog pour les instructions comment configurer la gitose avec gitweb. BTW, caractéristique principale de Gitolite est que vous pouvez avoir des permissions très fines. c'est à dire. autorisation de contrôle par branche. MISE À JOUR: Je pense que l'intégration de gitose w/gitweb est fondamentalement si elle apparaît sur la liste de projet. Il ne contrôle pas l'autorisation de gitweb; Cela se fait via un serveur web (apache).

+0

Oui, j'ai gitweb mis en place et fonctionne bien. J'ai mis à jour ma question après avoir regardé cette nuit dernière, devrait être plus clair ce que je demande – cdwilson