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