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>
{{>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>