Projet

Général

Profil

Git » Historique » Version 18

« Précédent - Version 18/69 (diff) - Suivant » - Version actuelle
Antoine Lubineau, 21/02/2012 22:18


Installation et utilisation d’un serveur Git

Git est un gestionnaire de versions décentralisé, libre et développé en C. À noter la traduction française du Git community book.

La configuration se fera essentiellement au travers de 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.

Gitolite

Installation

Configuration

Gitolite est très polyvalent, pour des usages poussés, se reporter à la documentation en ligne.

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.

Example de configuration :

repo    testing
        RW+     =   @all

Dans cet example, tous les utilisateurs ayant une clé dans le dépôt gitolite-admin ont tous les droits sur le dépôt testing.

Pour mettre à jour cette configuration, il suffit de la commiter et de la pusher, Gitolite appliquera les changements instantanément.

Ajouter un utilisateur

Il suffit d’ajouter sa clé publique dans le dossier keydir, en la nommant soit user.pub, soit user@machine.pub, ce qui permet d’avoir plusieurs clés pour un même utilisateur. On peut avoir des sous-dossier dans keydir, c’est sans incidence sur le nommage.
Dans la configuration de Gitolite, l’utilisateur est désigné par user, et on peut faire des groupes :

@groupe = user1 user2 user3

Créer un dépôt

Il suffit de créer la ligne

repo monrepo

et de préférence d’y ajouter des utilisateurs :)

git-daemon

Installation

Rien à faire, git-daemon(1) vient avec git(1).

Configuration

La configuration de git-daemon se fait sous Debian dans /etc/default/git-daemon.
git-daemon(1) peut être lancé avec l’option --export-all, mais c’est peu recommandé si on ne veut pas donner un accès en lecture à tous. On préférera créer dans chaque dépôt à exporter le fichier git-daemon-export-ok.

cgit

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).

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

On peut modifier le Makefile en mettant

CGIT_SCRIPT_PATH = /var/www

et
prefix = /usr/local/cgit

Ensuite :

make
make install

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 :

repo    testing
        RW+     =   pipo
        R       =   gitweb

Pour spécifier le propriétaire et la description d’un dépôt, voir le manuel de gitolite, section « specifying gitweb and daemon access ».

La configuration de cgit se trouve dans cgitrc(5) :

virtual-root=/
project-list=/home/git/projects.list
scan-path=~git/repositories/
snapshots=tar.gz tar.bz2
enable-commit-graph=1
enable-tree-linenumbers=1
enable-index-links=1
enable-log-filecount=1
enable-log-linecount=1
max-stats=quarter
clone-prefix=http://git.tetaneutral.net git://git.tetaneutral.net

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 :

usermod -aG git www-data

Dans ~git/.gitolite.rc, changer

$REPO_UMASK = 0077;

en
$REPO_UMASK = 0027;

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 :

        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>