Git » Historique » Version 26
Version 25 (Laurent GUERBY, 31/07/2012 09:21) → Version 26/69 (Antoine Lubineau, 19/11/2012 23:32)
h1. Installation et utilisation dâun serveur Git
{{>toc}}
"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@":http://hjemli.net/git/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@":http://git.tetaneutral.net/ de Tetaneutral.net, donc avec une Debian Squeeze.
h2. "Gitolite":https://github.com/sitaramc/gitolite
h3. Installation de gitolite
Installation est très simple, sur la VM @git.tetaneutral.net@ :
* On créé lâutilisateur @git@ dédié
* On clone lâapplication Gitolite avec @git(1)@
* On installe Gitolite dans le répertoire personnel de lâutilisateur @git@
* On ajoute la clé SSH 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 sur mon ordi du dépôt @gitolite-admin@ :
<pre>
git clone git@git.tetaneutral.net:gitolite-admin
cd gitolite-admin
</pre>
h3. Configuration
Gitolite est *très* polyvalent, pour des usages poussés, se reporter à la "documentation en ligne":http://sitaramc.github.com/gitolite/.
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â¯:
<pre>
repo testing
RW+ = @all
</pre>
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.
h4. 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.
<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 est désigné par @user@, et on peut faire des groupesâ¯:
<pre>
@mongroupe = user1 user2
</pre>
Et ensuite on peut donner des droits au groupeâ¯:
<pre>
repo testing
R = @mongroupe user3
</pre>
Le droit de lecture sâapplique donc à @user1@, @user2@ et @user3@.
h4. Créer un dépôt
Il suffit de créer la ligne
<pre>
repo monrepo
</pre>
et de préférence dây ajouter des utilisateurs :)
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é 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@.
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://git.zx2c4.com/cgit/snapshot/cgit-0.9.1.tar.xz 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.1.tar.xz cgit-0.9.0.2.tar.bz2
cd cgit-0.9.1 cgit-0.9.0.2
make get-git 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 générée automatiquement 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=~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
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>
{{>toc}}
"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@":http://hjemli.net/git/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@":http://git.tetaneutral.net/ de Tetaneutral.net, donc avec une Debian Squeeze.
h2. "Gitolite":https://github.com/sitaramc/gitolite
h3. Installation de gitolite
Installation est très simple, sur la VM @git.tetaneutral.net@ :
* On créé lâutilisateur @git@ dédié
* On clone lâapplication Gitolite avec @git(1)@
* On installe Gitolite dans le répertoire personnel de lâutilisateur @git@
* On ajoute la clé SSH 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 sur mon ordi du dépôt @gitolite-admin@ :
<pre>
git clone git@git.tetaneutral.net:gitolite-admin
cd gitolite-admin
</pre>
h3. Configuration
Gitolite est *très* polyvalent, pour des usages poussés, se reporter à la "documentation en ligne":http://sitaramc.github.com/gitolite/.
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â¯:
<pre>
repo testing
RW+ = @all
</pre>
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.
h4. 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.
<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 est désigné par @user@, et on peut faire des groupesâ¯:
<pre>
@mongroupe = user1 user2
</pre>
Et ensuite on peut donner des droits au groupeâ¯:
<pre>
repo testing
R = @mongroupe user3
</pre>
Le droit de lecture sâapplique donc à @user1@, @user2@ et @user3@.
h4. Créer un dépôt
Il suffit de créer la ligne
<pre>
repo monrepo
</pre>
et de préférence dây ajouter des utilisateurs :)
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é 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@.
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://git.zx2c4.com/cgit/snapshot/cgit-0.9.1.tar.xz 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.1.tar.xz cgit-0.9.0.2.tar.bz2
cd cgit-0.9.1 cgit-0.9.0.2
make get-git 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 générée automatiquement 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=~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
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>