Projet

Général

Profil

Git » Historique » Version 66

Matthieu Herrb, 08/06/2014 22:57

1 31 Laurent GUERBY
h1. Installation et utilisation d’un serveur Git
2 1 Antoine Lubineau
3 15 Antoine Lubineau
{{>toc}}
4 15 Antoine Lubineau
5 31 Laurent GUERBY
"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.
6 1 Antoine Lubineau
7 31 Laurent GUERBY
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).
8 1 Antoine Lubineau
9 31 Laurent GUERBY
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.
10 10 Antoine Lubineau
11 28 Laurent GUERBY
Lire aussi http://homepages.laas.fr/matthieu/cours/git.pdf
12 28 Laurent GUERBY
13 2 Antoine Lubineau
h2. "Gitolite":https://github.com/sitaramc/gitolite
14 1 Antoine Lubineau
15 23 Mehdi Abaakouk
h3. Installation de gitolite
16 23 Mehdi Abaakouk
17 31 Laurent GUERBY
Installation est très simple, sur la VM @git.tetaneutral.net@ :
18 31 Laurent GUERBY
* On créé l’utilisateur @git@ dédié
19 31 Laurent GUERBY
* On clone l’application Gitolite avec @git(1)@
20 31 Laurent GUERBY
* On installe Gitolite dans le répertoire personnel de l’utilisateur @git@
21 31 Laurent GUERBY
* On ajoute la clé SSH d’un des administrateurs
22 23 Mehdi Abaakouk
23 23 Mehdi Abaakouk
<pre>
24 23 Mehdi Abaakouk
useradd -m git
25 23 Mehdi Abaakouk
su - git
26 23 Mehdi Abaakouk
git clone git://github.com/sitaramc/gitolite.git
27 23 Mehdi Abaakouk
gitolite/src/gl-system-install
28 23 Mehdi Abaakouk
gl-setup -q sileht.pub
29 23 Mehdi Abaakouk
</pre>
30 23 Mehdi Abaakouk
31 31 Laurent GUERBY
Ensuite récupération sur mon ordi du dépôt @gitolite-admin@ :
32 23 Mehdi Abaakouk
33 23 Mehdi Abaakouk
<pre>
34 23 Mehdi Abaakouk
git clone git@git.tetaneutral.net:gitolite-admin
35 23 Mehdi Abaakouk
cd gitolite-admin
36 23 Mehdi Abaakouk
</pre>
37 4 Antoine Lubineau
38 1 Antoine Lubineau
h3. Configuration
39 1 Antoine Lubineau
40 31 Laurent GUERBY
Gitolite est *très* polyvalent, pour des usages poussés, se reporter à la "documentation en ligne":http://sitaramc.github.com/gitolite/.
41 17 Antoine Lubineau
42 31 Laurent GUERBY
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:
43 31 Laurent GUERBY
* @conf@ qui va contenir les fichiers de configuration (le plus souvent un seul, @gitolite.conf@) ;
44 31 Laurent GUERBY
* @keydir@, qui va stocker les clés publiques SSH des utilisateurs.
45 17 Antoine Lubineau
46 31 Laurent GUERBY
Example de configuration :
47 17 Antoine Lubineau
<pre>
48 17 Antoine Lubineau
repo    testing
49 17 Antoine Lubineau
        RW+     =   @all
50 17 Antoine Lubineau
</pre>
51 17 Antoine Lubineau
52 31 Laurent GUERBY
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@.
53 17 Antoine Lubineau
54 31 Laurent GUERBY
Pour mettre à jour cette configuration, il suffit de la commiter et de la pusher, Gitolite appliquera les changements instantanément.
55 18 Antoine Lubineau
56 17 Antoine Lubineau
h4. Ajouter un utilisateur
57 17 Antoine Lubineau
58 31 Laurent GUERBY
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.
59 25 Laurent GUERBY
60 25 Laurent GUERBY
<pre>
61 25 Laurent GUERBY
git add keydir/user.pub
62 25 Laurent GUERBY
</pre>
63 25 Laurent GUERBY
64 25 Laurent GUERBY
To check and commit push
65 25 Laurent GUERBY
66 25 Laurent GUERBY
<pre>
67 25 Laurent GUERBY
git diff master
68 25 Laurent GUERBY
git commit -a -m "add user"
69 25 Laurent GUERBY
git push
70 25 Laurent GUERBY
</pre>
71 25 Laurent GUERBY
72 31 Laurent GUERBY
Dans la configuration de Gitolite, l’utilisateur est désigné par @user@, et on peut faire des groupes :
73 17 Antoine Lubineau
<pre>
74 20 Antoine Lubineau
@mongroupe = user1 user2
75 1 Antoine Lubineau
</pre>
76 19 Antoine Lubineau
77 31 Laurent GUERBY
Et ensuite on peut donner des droits au groupe :
78 19 Antoine Lubineau
<pre>
79 19 Antoine Lubineau
repo    testing
80 20 Antoine Lubineau
        R     =   @mongroupe user3
81 19 Antoine Lubineau
</pre>
82 31 Laurent GUERBY
Le droit de lecture s’applique donc à @user1@, @user2@ et @user3@.
83 17 Antoine Lubineau
84 31 Laurent GUERBY
h4. Créer un dépôt
85 17 Antoine Lubineau
86 31 Laurent GUERBY
Il suffit de créer la ligne
87 17 Antoine Lubineau
<pre>
88 17 Antoine Lubineau
repo monrepo
89 17 Antoine Lubineau
</pre>
90 31 Laurent GUERBY
et de préférence d’y ajouter des utilisateurs :)
91 8 Antoine Lubineau
92 30 Laurent GUERBY
h4. Checkout Utilisateur
93 30 Laurent GUERBY
94 30 Laurent GUERBY
<pre>
95 30 Laurent GUERBY
git config user.name "Mon Nom" 
96 30 Laurent GUERBY
git config user.email "mon.nom@example.org"
97 30 Laurent GUERBY
</pre>
98 30 Laurent GUERBY
99 1 Antoine Lubineau
h2. git-daemon
100 1 Antoine Lubineau
101 15 Antoine Lubineau
h3. Installation
102 15 Antoine Lubineau
103 31 Laurent GUERBY
Rien à faire, @git-daemon(1)@ vient avec @git(1)@.
104 15 Antoine Lubineau
105 15 Antoine Lubineau
h3. Configuration
106 15 Antoine Lubineau
107 1 Antoine Lubineau
La configuration de @git-daemon@ se fait sous Debian dans @/etc/default/git-daemon@.
108 31 Laurent GUERBY
@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@.
109 15 Antoine Lubineau
110 15 Antoine Lubineau
h2. "cgit":http://hjemli.net/git/cgit/
111 14 Antoine Lubineau
112 4 Antoine Lubineau
h3. Installation
113 4 Antoine Lubineau
114 31 Laurent GUERBY
Comme il n’y a pas de paquet Debian, il faut le compiler à la main.
115 2 Antoine Lubineau
<pre>
116 29 Antoine Lubineau
wget http://git.zx2c4.com/cgit/snapshot/cgit-0.9.2.tar.xz
117 1 Antoine Lubineau
tar xf cgit-0.9.2.tar.xz
118 29 Antoine Lubineau
cd cgit-0.9.2
119 29 Antoine Lubineau
make get-git
120 29 Antoine Lubineau
</pre>
121 26 Antoine Lubineau
122 1 Antoine Lubineau
On peut modifier le @Makefile@ en mettant
123 1 Antoine Lubineau
<pre>CGIT_SCRIPT_PATH = /var/www/htdocs/cgit</pre>
124 8 Antoine Lubineau
et
125 29 Antoine Lubineau
<pre>prefix = /var/www/cgit</pre>
126 8 Antoine Lubineau
127 31 Laurent GUERBY
Ensuite :
128 4 Antoine Lubineau
<pre>
129 9 Antoine Lubineau
make
130 1 Antoine Lubineau
make install
131 1 Antoine Lubineau
</pre>
132 1 Antoine Lubineau
133 1 Antoine Lubineau
h3. Configuration de cgit
134 9 Antoine Lubineau
135 31 Laurent GUERBY
interface web http://git.tetaneutral.net/
136 31 Laurent GUERBY
137 31 Laurent GUERBY
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@ :
138 12 Antoine Lubineau
<pre>
139 12 Antoine Lubineau
repo    testing
140 12 Antoine Lubineau
        RW+     =   pipo
141 12 Antoine Lubineau
        R       =   gitweb
142 10 Antoine Lubineau
</pre>
143 1 Antoine Lubineau
144 31 Laurent GUERBY
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 ».
145 13 Antoine Lubineau
146 10 Antoine Lubineau
La configuration de @cgit@ se trouve dans @cgitrc(5)@ :
147 1 Antoine Lubineau
<pre>
148 10 Antoine Lubineau
virtual-root=/
149 10 Antoine Lubineau
project-list=/home/git/projects.list
150 16 Antoine Lubineau
scan-path=~git/repositories/
151 16 Antoine Lubineau
snapshots=tar.gz tar.bz2
152 16 Antoine Lubineau
enable-commit-graph=1
153 16 Antoine Lubineau
enable-tree-linenumbers=1
154 16 Antoine Lubineau
enable-index-links=1
155 16 Antoine Lubineau
enable-log-filecount=1
156 16 Antoine Lubineau
enable-log-linecount=1
157 16 Antoine Lubineau
max-stats=quarter
158 16 Antoine Lubineau
clone-prefix=http://git.tetaneutral.net git://git.tetaneutral.net
159 10 Antoine Lubineau
</pre>
160 10 Antoine Lubineau
161 31 Laurent GUERBY
h3. Configuration d’Apache
162 10 Antoine Lubineau
163 31 Laurent GUERBY
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@ :
164 10 Antoine Lubineau
<pre>
165 6 Antoine Lubineau
usermod -aG git www-data
166 1 Antoine Lubineau
</pre>
167 1 Antoine Lubineau
168 11 Antoine Lubineau
Dans @~git/.gitolite.rc@, changer
169 1 Antoine Lubineau
<pre>
170 1 Antoine Lubineau
$REPO_UMASK = 0077;
171 1 Antoine Lubineau
</pre>
172 1 Antoine Lubineau
en
173 1 Antoine Lubineau
<pre>
174 1 Antoine Lubineau
$REPO_UMASK = 0027;
175 1 Antoine Lubineau
</pre>
176 31 Laurent GUERBY
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).
177 1 Antoine Lubineau
178 31 Laurent GUERBY
À mettre dans un _virtual host_ d’Apache :
179 1 Antoine Lubineau
<pre>
180 29 Antoine Lubineau
        DocumentRoot /var/www/cgit
181 29 Antoine Lubineau
        <Directory /var/www/cgit>
182 29 Antoine Lubineau
                AddHandler cgi-script .cgi
183 10 Antoine Lubineau
                DirectoryIndex cgit.cgi
184 10 Antoine Lubineau
                Options +FollowSymLinks +ExecCGI
185 10 Antoine Lubineau
                AllowOverride None
186 1 Antoine Lubineau
                Order allow,deny
187 10 Antoine Lubineau
                allow from all
188 10 Antoine Lubineau
189 2 Antoine Lubineau
                RewriteEngine On
190 10 Antoine Lubineau
                RewriteBase /
191 10 Antoine Lubineau
                RewriteCond %{REQUEST_FILENAME} !-f
192 10 Antoine Lubineau
                RewriteCond %{REQUEST_FILENAME} !-d
193 10 Antoine Lubineau
                RewriteRule (.*) cgit.cgi/$1
194 10 Antoine Lubineau
                RewriteRule ^cgit.cgi$  cgit.cgi/
195 29 Antoine Lubineau
196 10 Antoine Lubineau
        </Directory>
197 10 Antoine Lubineau
</pre>
198 62 Matthieu Herrb
199 62 Matthieu Herrb
h2. Gestion de dépôts git sous redmine
200 62 Matthieu Herrb
201 62 Matthieu Herrb
Ici on considère que redmine et le plugin git_hosting sont installés. L'accès se fait en écriture via une clé SSH, sur le principe de gitolite (c'est d'ailleurs gitolite qui est utilisé par le plugin de redmine). L'exemple est celui du serveur redmine de tetaneutral.net.
202 62 Matthieu Herrb
203 62 Matthieu Herrb
h3. Dépot d'une clé publique ssh
204 62 Matthieu Herrb
205 62 Matthieu Herrb
# Se connecter à redmine: https://chiliproject.tetaneutral.net/
206 62 Matthieu Herrb
# Dans « my account » coller une clé publique (fichier id_rsa.pub ou id_*.pub) et sauver la clé.
207 62 Matthieu Herrb
# Si ce n'est pas la clé par défaut configurer l'accès ssh à git.tetaneutral.net dans ${HOME}/.ssh/config:
208 62 Matthieu Herrb
<pre>
209 62 Matthieu Herrb
host git.tetaneutral.net
210 62 Matthieu Herrb
  IdentityFile ~/.ssh/id_ttnn
211 62 Matthieu Herrb
  ForwardAgent no
212 62 Matthieu Herrb
</pre>
213 66 Matthieu Herrb
Les utilisateurs de tortoise-git ou d'Éclipse devront s'adapter pour dire à leur outil d'utiliser la bonne clé pour le serveur git.tetaneutral.net.
214 62 Matthieu Herrb
215 62 Matthieu Herrb
h3. Création d'un dépot
216 62 Matthieu Herrb
  
217 62 Matthieu Herrb
Par convention tous les dépots sont sous le projet 'git.tetaneutral.net', mais ce n'est pas nécessaire.
218 62 Matthieu Herrb
219 62 Matthieu Herrb
# Sélectionner Projects->git.tetaneutral.net->Settings
220 62 Matthieu Herrb
# Sélectionnler l'onglet Repositories
221 62 Matthieu Herrb
# En bas de la page 'New Repository'
222 63 Matthieu Herrb
# Donner un nom au nouveau dépôt (identifiant lettres, chiffres ou tirets)
223 1 Antoine Lubineau
# Cliquer sur 'Create'
224 63 Matthieu Herrb
225 64 Matthieu Herrb
h3. Garnir le dépot
226 63 Matthieu Herrb
227 63 Matthieu Herrb
Une fois le dépot créé on peut y pousser du contenu
228 63 Matthieu Herrb
229 63 Matthieu Herrb
Si on a un dépot git existant il suffit de définir le dépot 'origin' et de pousser ainsi
230 63 Matthieu Herrb
<pre>
231 63 Matthieu Herrb
git remote add origin ssh://git@git.tetaneutral.net/foo.git
232 63 Matthieu Herrb
git push -u origin master
233 63 Matthieu Herrb
</pre>
234 65 Matthieu Herrb
235 65 Matthieu Herrb
h3. Checkout utilisateur
236 65 Matthieu Herrb
237 65 Matthieu Herrb
* Lecture/écriture
238 65 Matthieu Herrb
<pre>
239 65 Matthieu Herrb
git clone ssh://git@git.tetaneutral.net/foo.git
240 65 Matthieu Herrb
</pre>
241 65 Matthieu Herrb
242 65 Matthieu Herrb
* Lecture seule
243 65 Matthieu Herrb
<pre>
244 65 Matthieu Herrb
git clone https://git.tetaneutral.net/foo.git
245 65 Matthieu Herrb
</pre>