Projet

Général

Profil

Git » Historique » Version 14

Version 13 (Antoine Lubineau, 21/02/2012 20:19) → Version 14/69 (Antoine Lubineau, 21/02/2012 20:22)

h1. Installation et utilisation d’un serveur Git

"Git":http://git-scm.com/ est un gestionnaire de versions décentralisé, libre et développé en C. À noter la traduction française du "Git community book":http://www.alexgirard.com/git-book/index.html.

La configuration se fera essentiellement au travers de "Gitolite":https://github.com/sitaramc/gitolite, qui permet de créer des dépôts, gérer les accès push/pull pour des accès en SSH, déléguer des droits, etc. @git-daemon@ permet de donner un accès au travers du protocole @git@, et @cgit@ sera utilisé pour l’interface web et le pull en HTTP (ou HTTPS).

Les explications qui suivent ont été mises en pratique sur le serveur @git.tetaneutral.net@ de Tetaneutral.net, donc avec une Debian Squeeze.

h2. "Gitolite":https://github.com/sitaramc/gitolite

h3. Installation

h3. Configuration

Une fois Gitolite installé, la configuration des dépôts et des utilisateurs se fait *uniquement* au travers du dépôt @gitolite-admin.git@. Ce dépôt contient deux dossiers:
* @conf@ qui va contenir les fichiers de configuration (le plus souvent un seul, @gitolite.conf@) ;
* @keydir@, qui va stocker les clés publiques SSH des utilisateurs.

h2. git-daemon

@git-daemon@ vient

h2. "cgit":http://hjemli.net/git/cgit/

h3. Installation

Comme il n’y a pas de paquet Debian, il faut le compiler à la main. Au moment de la rédaction de ce guide, on ne pouvait pas compiler cgit contre la dernière version de Git (fonctionnel avec cgit 0.9.2.0 et Git 1.7.4).
<pre>
wget http://hjemli.net/git/cgit/snapshot/cgit-0.9.0.2.tar.bz2
wget http://arch.p5n.pp.ru/~sergej/dl/2011/git-1.7.4.tar.bz2
tar xf cgit-0.9.0.2.tar.bz2
cd cgit-0.9.0.2
tar xf -C git ../git-1.7.4.tar.bz2
</pre>

On peut modifier le @Makefile@ en mettant
<pre>CGIT_SCRIPT_PATH = /var/www</pre>
et
<pre>prefix = /usr/local/cgit</pre>

Ensuite :
<pre>
make
make install
</pre>

h3. Configuration de cgit

cgit récupère la liste des projets dans @~git/projects.list@. Cette liste est complétée par Gitolite pour les dépôts dont @gitweb@ a les droits en lecture (c’est une dénomination spécifique à gitolite, qui n’est pas incluse dans @@all@). Dans @gitolite.conf@ :
<pre>
repo testing
RW+ = pipo
R = gitweb
</pre>

Pour spécifier le propriétaire et la description d’un dépôt, voir le "manuel de gitolite":http://sitaramc.github.com/gitolite/confother_.html, section « specifying gitweb and daemon access ».

La configuration de @cgit@ se trouve dans @cgitrc(5)@ :
<pre>
virtual-root=/
project-list=/home/git/projects.list
scan-path=/home/git/repositories/
</pre>

h4. Configuration d’Apache

Pour que le serveur web ait les droits de lecture sur les dépôts, il faut ajouter l’utilisateur @www-data@ (ou l’utilisateur sous lequel tourne Apache) au groupe @git@ :
<pre>
usermod -aG git www-data
</pre>

Dans @~git/.gitolite.rc@, changer
<pre>
$REPO_UMASK = 0077;
</pre>
en
<pre>
$REPO_UMASK = 0027;
</pre>
Ce réglage n’étant valable que pour les nouveaux dépôts, il faut effectuer un @chmod -R g+rX@ sur les dépôts existants (*pas gitolite-admin.git* en général).

À mettre dans un _virtual host_ d’Apache :
<pre>
DocumentRoot /var/www
<Directory /var/www/>
Addhandler cgi-script .cgi
DirectoryIndex cgit.cgi
Options +FollowSymLinks +ExecCGI
AllowOverride None
Order allow,deny
allow from all

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) cgit.cgi/$1
RewriteRule ^cgit.cgi$ cgit.cgi/
</Directory>
</pre>