Projet

Général

Profil

Git » Historique » Version 31

Version 30 (Laurent GUERBY, 22/08/2013 22:46) → Version 31/69 (Laurent GUERBY, 21/01/2014 10:43)

h1. Installation et utilisation d’un d’un serveur Git

{{>toc}}

"Git":http://git-scm.com/ est un gestionnaire de versions décentralisé, décentralisé, libre et développé développé en C. À À noter la traduction française 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 créer des dépôts, gérer dépôts, gérer les accès accès push/pull pour des accès accès en SSH, déléguer déléguer des droits, etc. @git-daemon@ permet de donner un accès accès au travers du protocole @git@, et "@cgit@":http://hjemli.net/git/cgit/ sera utilisé utilisé pour l’interface l’interface web et le pull en HTTP (ou HTTPS).

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

Lire aussi http://homepages.laas.fr/matthieu/cours/git.pdf

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

h3. Installation de gitolite

Installation est très très simple, sur la VM @git.tetaneutral.net@ :
* On créé l’utilisateur créé l’utilisateur @git@ dédié dédié
* On clone l’application l’application Gitolite avec @git(1)@
* On installe Gitolite dans le répertoire répertoire personnel de l’utilisateur l’utilisateur @git@
* On ajoute la clé clé SSH d’un d’un des administrateurs

<pre>
useradd -m git
su - git
git clone git://github.com/sitaramc/gitolite.git
gitolite/src/gl-system-install
gl-setup -q sileht.pub
</pre>

Ensuite récupération récupération sur mon ordi du dépôt dépôt @gitolite-admin@ :

<pre>
git clone git@git.tetaneutral.net:gitolite-admin
cd gitolite-admin
</pre>

h3. Configuration

Gitolite est *très* *très* polyvalent, pour des usages poussés, poussés, se reporter à à la "documentation en ligne":http://sitaramc.github.com/gitolite/.

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

Example de configuration : configuration :
<pre>
repo testing
RW+ = @all
</pre>

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

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

h4. Ajouter un utilisateur

Il suffit d’ajouter d’ajouter sa clé clé publique dans le dossier @keydir@, en la nommant soit @user.pub@, soit @user@machine.pub@, ce qui permet d’avoir d’avoir plusieurs clés clés pour un même même utilisateur. On peut avoir des sous-dossier dans @keydir@, c’est c’est sans incidence sur le nommage.

<pre>
git add keydir/user.pub
</pre>

To check and commit push

<pre>
git diff master
git commit -a -m "add user"
git push
</pre>

Dans la configuration de Gitolite, l’utilisateur l’utilisateur est désigné désigné par @user@, et on peut faire des groupes : groupes :
<pre>
@mongroupe = user1 user2
</pre>

Et ensuite on peut donner des droits au groupe : groupe :
<pre>
repo testing
R = @mongroupe user3
</pre>
Le droit de lecture s’applique s’applique donc à à @user1@, @user2@ et @user3@.

h4. Créer Créer un dépôt dépôt

Il suffit de créer créer la ligne
<pre>
repo monrepo
</pre>
et de préférence d’y préférence d’y ajouter des utilisateurs :)

h4. Checkout Utilisateur

<pre>
git config user.name "Mon Nom"
git config user.email "mon.nom@example.org"
</pre>

h2. git-daemon

h3. Installation

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

h3. Configuration

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

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

h3. Installation

Comme il n’y n’y a pas de paquet Debian, il faut le compiler à à la main.
<pre>
wget http://git.zx2c4.com/cgit/snapshot/cgit-0.9.2.tar.xz
tar xf cgit-0.9.2.tar.xz
cd cgit-0.9.2
make get-git
</pre>

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

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

h3. Configuration de cgit

interface web http://git.tetaneutral.net/

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

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

La configuration de @cgit@ se trouve dans @cgitrc(5)@ :
<pre>
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
</pre>

h3. Configuration d’Apache d’Apache

Pour que le serveur web ait les droits de lecture sur les dépôts, dépôts, il faut ajouter l’utilisateur l’utilisateur @www-data@ (ou l’utilisateur 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 réglage n’étant valable que pour les nouveaux dépôts, dépôts, il faut effectuer un @chmod -R g+rX@ sur les dépôts dépôts existants (*pas gitolite-admin.git* en général). général).

À À mettre dans un _virtual host_ d’Apache : d’Apache :
<pre>
DocumentRoot /var/www/cgit
<Directory /var/www/cgit>
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>