Projet

Général

Profil

GitBonnesPratiques » Historique » Version 21

Joël Cuissinat, 05/05/2011 10:31

1 1 Redmine Admin
{{toc}}
2 1 Redmine Admin
3 15 Gwenael Remond
**remarque** : pour une utilisation avancée, voir [[EOLE-INTERNE:GitAvance]]
4 15 Gwenael Remond
5 1 Redmine Admin
h1. Présentation
6 1 Redmine Admin
7 1 Redmine Admin
Site officiel : http://git-scm.com/
8 1 Redmine Admin
9 1 Redmine Admin
Tutoriaux intéressants : 
10 1 Redmine Admin
* http://team.gcu.info/~ange/git_article/
11 1 Redmine Admin
* le tutorial des man pages http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html
12 1 Redmine Admin
* http://gitready.com/
13 1 Redmine Admin
* http://progit.org/book/
14 1 Redmine Admin
* http://www.unixgarden.com/index.php/administration-systeme/git-pour-les-futurs-barbus
15 7 Gaston TJEBBES
* http://yannesposito.com/Scratch/fr/blog/2010-03-22-Git-Tips/
16 1 Redmine Admin
17 1 Redmine Admin
Les manpages des commandes sont accessibles avec la commande help directement, 
18 1 Redmine Admin
par exemple : 
19 1 Redmine Admin
<pre>
20 1 Redmine Admin
git help log
21 1 Redmine Admin
</pre>
22 1 Redmine Admin
23 6 Redmine Admin
*remarque* : Il faut utiliser une version récente de git-core (>1.6.3) pour pouvoir travailler avec les dépôts. 
24 3 samuel morin
25 14 Klaas TJEBBES
h1. Paramétrage global
26 1 Redmine Admin
27 1 Redmine Admin
Il est nécessaire de déclarer vos noms et emails dans votre configuration git globale
28 1 Redmine Admin
<pre>
29 1 Redmine Admin
git config --global user.name "Prénom NOM"
30 1 Redmine Admin
git config --global user.email "prenom.nom@ac-acad.fr"
31 1 Redmine Admin
</pre>
32 1 Redmine Admin
33 14 Klaas TJEBBES
Afin que le git ne demande plus de login/pass , il faut renseigner le fichier @~/.netrc@ :
34 1 Redmine Admin
<pre>
35 14 Klaas TJEBBES
machine dev-eole.ac-dijon.fr
36 14 Klaas TJEBBES
login monlogin
37 14 Klaas TJEBBES
password monmotdepasse
38 14 Klaas TJEBBES
</pre>
39 14 Klaas TJEBBES
et paramétrer les droits du fichier :
40 14 Klaas TJEBBES
<pre>
41 14 Klaas TJEBBES
chmod 600 ~/.netrc
42 14 Klaas TJEBBES
</pre>
43 14 Klaas TJEBBES
44 14 Klaas TJEBBES
h1. Premiers pas
45 14 Klaas TJEBBES
46 14 Klaas TJEBBES
* Récupérer un projet :
47 14 Klaas TJEBBES
<pre>
48 1 Redmine Admin
git clone http://login@dev-eole.ac-dijon.fr/git/nom_projet
49 14 Klaas TJEBBES
</pre>
50 14 Klaas TJEBBES
Cela va créer un répertoire @nom_projet@ contenant un répertoire @.git@.
51 1 Redmine Admin
52 1 Redmine Admin
* Ajouter/retirer des fichiers :
53 1 Redmine Admin
<pre>
54 1 Redmine Admin
git add file1 file2 ...
55 1 Redmine Admin
git remove file1 file2 ...
56 1 Redmine Admin
</pre>
57 1 Redmine Admin
58 14 Klaas TJEBBES
* Pour savoir quel est l'état des modifications :
59 1 Redmine Admin
<pre>
60 1 Redmine Admin
git status
61 1 Redmine Admin
</pre>
62 1 Redmine Admin
63 14 Klaas TJEBBES
* Enregistrer les modifications localement :
64 1 Redmine Admin
<pre>
65 1 Redmine Admin
git commit -a -m"premiere version avec le scm git"
66 1 Redmine Admin
</pre>
67 1 Redmine Admin
68 1 Redmine Admin
* Enregistrer les changements sur le serveur : 
69 1 Redmine Admin
<pre>
70 14 Klaas TJEBBES
git push
71 1 Redmine Admin
</pre>
72 14 Klaas TJEBBES
73 1 Redmine Admin
*remarque* : Avant d'enregistrer les changements sur le serveur, pensez à éditer vos messages de commit, il est possible de les fusionner (Voir "Messages de commit").
74 1 Redmine Admin
75 14 Klaas TJEBBES
* Récupérer les modifications du serveur et les fusionner localement :
76 1 Redmine Admin
<pre>
77 14 Klaas TJEBBES
git pull
78 1 Redmine Admin
</pre>
79 1 Redmine Admin
80 1 Redmine Admin
81 14 Klaas TJEBBES
Notre serveur GIT a plusieurs branches "branch".
82 14 Klaas TJEBBES
* Pour afficher les branches disponibles sur le serveur :
83 14 Klaas TJEBBES
<pre>
84 14 Klaas TJEBBES
git branch -a
85 14 Klaas TJEBBES
</pre>
86 14 Klaas TJEBBES
87 14 Klaas TJEBBES
* Pour paramétrer la prise en compte d'une branche :
88 14 Klaas TJEBBES
<pre>
89 14 Klaas TJEBBES
git config branch.2.2.remote origin
90 14 Klaas TJEBBES
git config branch.2.2.merge refs/heads/2.2
91 14 Klaas TJEBBES
</pre>
92 14 Klaas TJEBBES
93 14 Klaas TJEBBES
* Pour récupérer la branche localement (à ne faire que la première fois) :
94 14 Klaas TJEBBES
<pre>
95 14 Klaas TJEBBES
git fetch origin 2.2:2.2
96 14 Klaas TJEBBES
</pre>
97 14 Klaas TJEBBES
98 14 Klaas TJEBBES
* Pour se placer dans la branche :
99 14 Klaas TJEBBES
<pre>
100 14 Klaas TJEBBES
git checkout 2.2
101 14 Klaas TJEBBES
</pre>
102 14 Klaas TJEBBES
103 1 Redmine Admin
* Récupérer les modifications du serveur :
104 1 Redmine Admin
<pre>
105 1 Redmine Admin
git pull
106 14 Klaas TJEBBES
</pre>
107 14 Klaas TJEBBES
108 14 Klaas TJEBBES
* Pour se placer dans une autre branche, "master" par exemple :
109 14 Klaas TJEBBES
<pre>
110 14 Klaas TJEBBES
git checkout master
111 1 Redmine Admin
</pre>
112 1 Redmine Admin
113 1 Redmine Admin
114 1 Redmine Admin
h1. Branch
115 1 Redmine Admin
116 17 Gérald Schwartzmann
 * Récupérer une branche
117 1 Redmine Admin
<pre>
118 17 Gérald Schwartzmann
git checkout nomDeBrancheExistant
119 17 Gérald Schwartzmann
</pre>
120 17 Gérald Schwartzmann
121 17 Gérald Schwartzmann
 * Créer une branche
122 17 Gérald Schwartzmann
Se placer dans la branche que l'on veut copier
123 17 Gérald Schwartzmann
<pre>
124 17 Gérald Schwartzmann
git checkout maBrancheABrancher
125 17 Gérald Schwartzmann
...
126 17 Gérald Schwartzmann
git checkout -b maNouvelleBranche
127 1 Redmine Admin
</pre>
128 1 Redmine Admin
129 1 Redmine Admin
 * Ceci peut être décomposé en 2 commandes :
130 1 Redmine Admin
<pre>
131 1 Redmine Admin
git branch mabranche
132 1 Redmine Admin
git checkout mabranche
133 1 Redmine Admin
</pre>
134 1 Redmine Admin
135 1 Redmine Admin
 * Diffuser la branche sur le serveur
136 1 Redmine Admin
<pre>
137 1 Redmine Admin
git http-push http://user@194.167.18.22/git/eolebase mabranche
138 13 Joël Cuissinat
</pre>
139 13 Joël Cuissinat
140 13 Joël Cuissinat
* Créer une branche à partir d'un numéro de commit
141 13 Joël Cuissinat
<pre>
142 13 Joël Cuissinat
git checkout -b mabranche <numero_de_commit>
143 5 Emmanuel GARETTE
</pre>
144 5 Emmanuel GARETTE
145 1 Redmine Admin
* Supprimer une branche :
146 1 Redmine Admin
<pre>
147 1 Redmine Admin
git branch -D [nom-branche]
148 1 Redmine Admin
</pre>
149 1 Redmine Admin
150 16 Gaston TJEBBES
* Supprimer une branche sur le dépôt origin
151 16 Gaston TJEBBES
<pre>
152 16 Gaston TJEBBES
git push origin :branche
153 16 Gaston TJEBBES
</pre>
154 16 Gaston TJEBBES
Cela correspond en fait à cette commande là : git push REMOTENAME LOCALBRANCHNAME:REMOTEBRANCHNAME sauf que LOCALBRANCHNAME est vide dans notre exemple.
155 16 Gaston TJEBBES
156 16 Gaston TJEBBES
157 1 Redmine Admin
* Voir les différences entre deux branches
158 1 Redmine Admin
(par exemple avant de merger) : 
159 1 Redmine Admin
<pre>
160 1 Redmine Admin
git diff-tree -p [nom-de-branche]
161 1 Redmine Admin
</pre>
162 1 Redmine Admin
163 1 Redmine Admin
* Pour changer de branche :
164 1 Redmine Admin
<pre>
165 1 Redmine Admin
git checkout autrebranche
166 1 Redmine Admin
</pre>
167 1 Redmine Admin
168 1 Redmine Admin
* Pour revenir à la branche principale :
169 1 Redmine Admin
<pre>
170 1 Redmine Admin
git checkout master
171 1 Redmine Admin
</pre>
172 1 Redmine Admin
173 1 Redmine Admin
* Une autre technique consiste à organiser localement une arborescence différente par branche :
174 1 Redmine Admin
<pre>
175 1 Redmine Admin
git/master
176 1 Redmine Admin
   /mabranche
177 1 Redmine Admin
</pre>
178 1 Redmine Admin
179 1 Redmine Admin
* Savoir dans quelle branche on se trouve :
180 1 Redmine Admin
<pre>
181 1 Redmine Admin
git branch
182 1 Redmine Admin
</pre>
183 1 Redmine Admin
184 1 Redmine Admin
* Voir la branche courante avec le dernier log :
185 1 Redmine Admin
<pre>
186 1 Redmine Admin
git show-branch
187 1 Redmine Admin
</pre>
188 1 Redmine Admin
189 8 Gaston TJEBBES
* Envoyer pour la _première fois_ le contenu de la branche courante sur le serveur :
190 8 Gaston TJEBBES
<pre>
191 8 Gaston TJEBBES
git push origin HEAD
192 8 Gaston TJEBBES
</pre>
193 8 Gaston TJEBBES
194 8 Gaston TJEBBES
Arrivé à ce stade il peut être intéressant d'utiliser @git-gui@ (@/usr/lib/git-core/git-gui@) ou @giggle@.
195 8 Gaston TJEBBES
196 8 Gaston TJEBBES
Pour voir l'historique des différentes branches dans @guit-gui@, "@menu>dépôt>Voir l'historique de toutes les branches@"
197 8 Gaston TJEBBES
198 8 Gaston TJEBBES
* Autres commandes de base :
199 8 Gaston TJEBBES
<pre>
200 8 Gaston TJEBBES
git log
201 8 Gaston TJEBBES
git log --pretty=oneline --all
202 8 Gaston TJEBBES
git diff
203 8 Gaston TJEBBES
</pre>
204 8 Gaston TJEBBES
205 8 Gaston TJEBBES
206 7 Gaston TJEBBES
h2. Branches distantes
207 7 Gaston TJEBBES
208 1 Redmine Admin
* Si vous avez déjà cloné le master d'un projet, pour visualiser les branches disponibles :
209 1 Redmine Admin
<pre>
210 1 Redmine Admin
git branch -a
211 1 Redmine Admin
</pre>
212 7 Gaston TJEBBES
devrait renvoyer quelque chose comme ceci :
213 7 Gaston TJEBBES
<pre>
214 1 Redmine Admin
* master
215 1 Redmine Admin
  remotes/origin/2.2
216 1 Redmine Admin
  remotes/origin/HEAD -> origin/master
217 1 Redmine Admin
  remotes/origin/master
218 1 Redmine Admin
  remotes/origin/upstream
219 1 Redmine Admin
</pre>
220 1 Redmine Admin
221 1 Redmine Admin
* Pour récupérer la branche 2.2 :
222 1 Redmine Admin
<pre>
223 11 Gaston TJEBBES
git co 2.2
224 11 Gaston TJEBBES
</pre>
225 11 Gaston TJEBBES
va récupérer la branche 2.2 auprès du serveur origin.
226 11 Gaston TJEBBES
Une autre méthode:
227 11 Gaston TJEBBES
<pre>
228 1 Redmine Admin
git branch --track 2.2 remotes/origin/2.2
229 1 Redmine Admin
</pre>
230 1 Redmine Admin
231 1 Redmine Admin
h1. Merge
232 1 Redmine Admin
233 1 Redmine Admin
Fusion : action consistant à fusionner une branche avec une autre ("mabranche" avec @master@ par exemple)
234 1 Redmine Admin
235 1 Redmine Admin
Exemple : @merge@ de la branche *mabranche* dans la branche *master* 
236 1 Redmine Admin
237 1 Redmine Admin
* Se placer dans la branche @master@ :
238 1 Redmine Admin
<pre>
239 1 Redmine Admin
git checkout master
240 1 Redmine Admin
git merge mabranche
241 18 Gérald Schwartzmann
git push
242 1 Redmine Admin
</pre>
243 1 Redmine Admin
244 1 Redmine Admin
*remarque* : après un @merge@, il n'y a pas de @commit@ à faire, juste @pull@.
245 1 Redmine Admin
246 1 Redmine Admin
Si vous n'êtes pas satisfait du @merge@, il faut revenir en arrière avec un 
247 1 Redmine Admin
<pre>
248 1 Redmine Admin
git reset --hard
249 1 Redmine Admin
</pre>
250 1 Redmine Admin
251 1 Redmine Admin
**Résoudre un conflit de @merge@**
252 1 Redmine Admin
253 1 Redmine Admin
Si lors d'un @merge@ il y a eu un problème du type :
254 1 Redmine Admin
<pre>
255 1 Redmine Admin
Auto-merged file.txt
256 1 Redmine Admin
CONFLICT (content): Merge conflict in file.txt
257 1 Redmine Admin
Automatic merge failed; fix conflicts and then commit the result.
258 1 Redmine Admin
</pre> et que
259 1 Redmine Admin
<pre>
260 1 Redmine Admin
git commit
261 1 Redmine Admin
</pre> répond qu'il reste des fichiers à merger (unresolved merge), *Il n'y a donc pas eu véritablement de commit*
262 1 Redmine Admin
de même qu'un
263 1 Redmine Admin
<pre>
264 1 Redmine Admin
git status
265 1 Redmine Admin
</pre>
266 1 Redmine Admin
267 1 Redmine Admin
Il faut alors éditer le fichier concerné, résoudre le conflit à la main et faire un nouveau un @commit@ :
268 1 Redmine Admin
<pre>
269 1 Redmine Admin
git add [file.txt]
270 1 Redmine Admin
git commit -m"résolution du conflit"
271 1 Redmine Admin
</pre>
272 1 Redmine Admin
273 1 Redmine Admin
* Pour repérer les fichiers qui n'ont pas été fusionné :
274 1 Redmine Admin
<pre>
275 1 Redmine Admin
git ls-files --unmerged
276 1 Redmine Admin
</pre>
277 1 Redmine Admin
278 21 Joël Cuissinat
279 21 Joël Cuissinat
h1. Stash
280 21 Joël Cuissinat
281 21 Joël Cuissinat
*git stash* permet de sauvegarder des modifications locales afin de les appliquer plus tard.
282 21 Joël Cuissinat
283 21 Joël Cuissinat
* Sauvegarde des modifications :
284 21 Joël Cuissinat
<pre>
285 21 Joël Cuissinat
# git stash save "en attente"
286 21 Joël Cuissinat
Saved working directory and index state On master: en attente
287 21 Joël Cuissinat
</pre>
288 21 Joël Cuissinat
* Liste des modifications sauvegardées :
289 21 Joël Cuissinat
<pre>
290 21 Joël Cuissinat
git stash list
291 21 Joël Cuissinat
stash@{0}: On master: en attente
292 21 Joël Cuissinat
</pre>
293 21 Joël Cuissinat
* Revenir à l'état sauvegardé (_stash@{1}_ pour restaurer la 2ème sauvegarde) :
294 21 Joël Cuissinat
<pre>
295 21 Joël Cuissinat
git stash apply [stash@{0}]
296 21 Joël Cuissinat
</pre>
297 21 Joël Cuissinat
* Nettoyer la liste des sauvegarde :
298 21 Joël Cuissinat
<pre>
299 21 Joël Cuissinat
git stash clear
300 21 Joël Cuissinat
</pre>
301 21 Joël Cuissinat
302 21 Joël Cuissinat
303 21 Joël Cuissinat
304 1 Redmine Admin
h1. Message de commit
305 1 Redmine Admin
306 1 Redmine Admin
*IMPORTANT* : ne pas effectuer de modifications sur des commits déjà envoyés sur le serveur origin (le dépot).
307 1 Redmine Admin
308 1 Redmine Admin
Avant d'envoyer vos données sur le serveur, il est possible de modifier/améliorer les messages de commit.
309 1 Redmine Admin
310 1 Redmine Admin
h2. Modifier le dernier message de commit
311 1 Redmine Admin
312 1 Redmine Admin
<pre>
313 1 Redmine Admin
git commit --amend
314 1 Redmine Admin
</pre>
315 1 Redmine Admin
Modifier, sauvegarder et quitter.
316 1 Redmine Admin
317 1 Redmine Admin
h2. Modifier les trois derniers messages
318 1 Redmine Admin
319 1 Redmine Admin
* On lance un rebase
320 1 Redmine Admin
<pre>
321 1 Redmine Admin
git rebase -i HEAD~3
322 1 Redmine Admin
</pre>
323 1 Redmine Admin
* Un éditeur de texte s'ouvre avec quelque chose qui ressemble à ça:
324 1 Redmine Admin
<pre>
325 1 Redmine Admin
pick 6ffa65b update des bases de donnees editable=0 et pas 2
326 1 Redmine Admin
pick 9697740 update des bases vers 2.2.3 : nettoyage et ajout d'un __init__.py (ref #11)
327 1 Redmine Admin
pick e56a7a4 Configuration des bases de donnees pour le passage en version 2.2.3 (fixes #11 : fixé)
328 1 Redmine Admin
329 1 Redmine Admin
# Rebase cd9333c..e56a7a4 onto cd9333c
330 1 Redmine Admin
#
331 1 Redmine Admin
# Commands:
332 1 Redmine Admin
#  p, pick = use commit
333 1 Redmine Admin
#  r, reword = use commit, but edit the commit message
334 1 Redmine Admin
#  e, edit = use commit, but stop for amending
335 1 Redmine Admin
#  s, squash = use commit, but meld into previous commit
336 1 Redmine Admin
#
337 1 Redmine Admin
# If you remove a line here THAT COMMIT WILL BE LOST.
338 1 Redmine Admin
# However, if you remove everything, the rebase will be aborted.
339 1 Redmine Admin
#
340 1 Redmine Admin
</pre>
341 1 Redmine Admin
* Changer pick en edit sur les lignes correspondantes aux commit à modifier, par exemple :
342 1 Redmine Admin
<pre>
343 1 Redmine Admin
edit 6ffa65b update des bases de donnees editable=0 et pas 2
344 1 Redmine Admin
pick 9697740 update des bases vers 2.2.3 : nettoyage et ajout d'un __init__.py (ref #11)
345 1 Redmine Admin
pick e56a7a4 Configuration des bases de donnees pour le passage en version 2.2.3 (fixes #11 : fixé)
346 1 Redmine Admin
</pre>
347 1 Redmine Admin
* Sauver et quitter.
348 1 Redmine Admin
* Lancer la commande :
349 1 Redmine Admin
<pre>
350 1 Redmine Admin
git commit --amend
351 1 Redmine Admin
</pre>
352 1 Redmine Admin
* Modifier les messages de commit, par ex :
353 1 Redmine Admin
<pre>
354 1 Redmine Admin
update des bases de donnees editable=0 et pas 2 (ref #11)
355 1 Redmine Admin
</pre> 
356 1 Redmine Admin
* Sauvegarder et quitter
357 1 Redmine Admin
* Lancer la commande :
358 1 Redmine Admin
<pre>
359 1 Redmine Admin
git rebase --continue
360 1 Redmine Admin
</pre>
361 1 Redmine Admin
* Vérifier les messages de commit
362 1 Redmine Admin
<pre>
363 1 Redmine Admin
git log
364 1 Redmine Admin
</pre>
365 1 Redmine Admin
366 1 Redmine Admin
367 1 Redmine Admin
h2. Fusionner des commits
368 1 Redmine Admin
369 1 Redmine Admin
Il est possible de fusionner des commit afin d'éviter des commits multiples pour des modifications mineures.
370 1 Redmine Admin
* Lancer un git rebase
371 1 Redmine Admin
<pre>
372 1 Redmine Admin
git rebase -i HEAD~3
373 1 Redmine Admin
</pre>
374 1 Redmine Admin
<pre>
375 1 Redmine Admin
pick 16098ec Ajout d'icône gepi et cdt (ref #51)
376 1 Redmine Admin
pick f244e89 Deplacement d'icone
377 1 Redmine Admin
pick 7c8670c Deplacement des icones sources
378 1 Redmine Admin
379 1 Redmine Admin
# Rebase 5f5bfee..7c8670c onto 5f5bfee
380 1 Redmine Admin
#
381 1 Redmine Admin
# Commands:
382 1 Redmine Admin
#  p, pick = use commit
383 1 Redmine Admin
#  r, reword = use commit, but edit the commit message
384 1 Redmine Admin
#  e, edit = use commit, but stop for amending
385 1 Redmine Admin
#  s, squash = use commit, but meld into previous commit
386 1 Redmine Admin
#
387 1 Redmine Admin
# If you remove a line here THAT COMMIT WILL BE LOST.
388 1 Redmine Admin
# However, if you remove everything, the rebase will be aborted.
389 1 Redmine Admin
#
390 1 Redmine Admin
</pre>
391 1 Redmine Admin
392 1 Redmine Admin
* Changer pick en squash fusionne votre commit avec la ligne au-dessus
393 1 Redmine Admin
<pre>
394 1 Redmine Admin
pick 16098ec Ajout d'icône gepi et cdt (ref #51)
395 1 Redmine Admin
squash f244e89 Deplacement d'icone
396 1 Redmine Admin
squash 7c8670c Deplacement des icones sources
397 1 Redmine Admin
</pre>
398 1 Redmine Admin
* Sauver et quitter, Un éditeur s'ouvre:
399 1 Redmine Admin
<pre>
400 1 Redmine Admin
# This is a combination of 3 commits.
401 1 Redmine Admin
# The first commit's message is:
402 1 Redmine Admin
Ajout d'icône gepi et cdt (ref #51)
403 1 Redmine Admin
404 1 Redmine Admin
# This is the 2nd commit message:
405 1 Redmine Admin
406 1 Redmine Admin
Deplacement d'icone
407 1 Redmine Admin
408 1 Redmine Admin
# This is the 3rd commit message:
409 1 Redmine Admin
410 1 Redmine Admin
Deplacement des icones sources
411 1 Redmine Admin
412 1 Redmine Admin
# Please enter the commit message for your changes. Lines starting
413 1 Redmine Admin
# with '#' will be ignored, and an empty message aborts the commit.
414 1 Redmine Admin
# Not currently on any branch.
415 1 Redmine Admin
# Changes to be committed:
416 1 Redmine Admin
#   (use "git reset HEAD <file>..." to unstage)
417 1 Redmine Admin
#
418 1 Redmine Admin
#       modified:   eole/tmpls/update_creole_posh.sql
419 1 Redmine Admin
#       renamed:    plugins/plugin_desktop/icones/old/Corbeille.png -> plugins/plugin_desktop/icones/Corbeille.png
420 1 Redmine Admin
#       renamed:    plugins/plugin_desktop/icones/old/Courrier.png -> plugins/plugin_desktop/icones/Courrier.png
421 1 Redmine Admin
#       renamed:    plugins/plugin_desktop/icones/old/agenda.png -> plugins/plugin_desktop/icones/agenda.png
422 1 Redmine Admin
#       new file:   plugins/plugin_desktop/icones/cdt.png
423 1 Redmine Admin
#       modified:   plugins/plugin_desktop/icones/dir.png
424 1 Redmine Admin
#       modified:   plugins/plugin_desktop/icones/gepi.png
425 1 Redmine Admin
#       renamed:    plugins/plugin_desktop/icones/old/mail.jpg -> plugins/plugin_desktop/icones/mail.jpg
426 1 Redmine Admin
#       modified:   plugins/plugin_desktop/icones/mail.png
427 1 Redmine Admin
#       new file:   sources-desktop/icones/cdt.xcf
428 1 Redmine Admin
#       renamed:    plugins/plugin_desktop/icones/grand/moodle.gif -> sources-desktop/icones/moodle.gif
429 1 Redmine Admin
#
430 1 Redmine Admin
# Untracked files:
431 20 Joël Cuissinat
#   (use "git add <file>..." to include in what will be committed)
432 19 Joël Cuissinat
#
433 19 Joël Cuissinat
#       databases/bdd/scribe-posh.sql.sav
434 19 Joël Cuissinat
</pre>
435 19 Joël Cuissinat
* Éditer les messages (un message suffit)
436 19 Joël Cuissinat
<pre>
437 19 Joël Cuissinat
# The first commit's message is:
438 19 Joël Cuissinat
Ajout d'icône pour les applications scribe (ref #51)
439 19 Joël Cuissinat
# This is the 2nd commit message:
440 19 Joël Cuissinat
441 19 Joël Cuissinat
# This is the 3rd commit message:
442 19 Joël Cuissinat
443 19 Joël Cuissinat
# Please enter the commit message for your changes. Lines starting
444 19 Joël Cuissinat
</pre>
445 19 Joël Cuissinat
* Sauver et quitter
446 19 Joël Cuissinat
* Vérifier que cela ressemble bien à ce que vous voulez
447 19 Joël Cuissinat
<pre>
448 19 Joël Cuissinat
git log
449 19 Joël Cuissinat
</pre>
450 19 Joël Cuissinat
451 19 Joël Cuissinat
452 19 Joël Cuissinat
453 1 Redmine Admin
h1. Trucs et astuces
454 1 Redmine Admin
455 1 Redmine Admin
* Résoudre un signalement avec l'ajout de "fixes #<numéro du signalement>"
456 1 Redmine Admin
<pre>
457 1 Redmine Admin
git commit -m"La nouvelle feature fixes #<numéro du signalement>"
458 1 Redmine Admin
git http-push ....
459 1 Redmine Admin
</pre>
460 1 Redmine Admin
461 1 Redmine Admin
* Faire référence à un signalement
462 1 Redmine Admin
<pre>
463 1 Redmine Admin
git commit -m"bla bla bal du bug #<numéro du signalement>"
464 1 Redmine Admin
</pre>
465 1 Redmine Admin
466 1 Redmine Admin
* Activer la coloration syntaxique 
467 1 Redmine Admin
<pre>
468 1 Redmine Admin
git config --global color.ui true
469 1 Redmine Admin
</pre>
470 1 Redmine Admin
471 1 Redmine Admin
* Pour controler les fichiers à ne JAMAIS prendre en compte (@commit@), utiliser le fichier @~/.gitignore@. Exemple d'un fichier @~/.gitignore@ :
472 1 Redmine Admin
<pre>
473 1 Redmine Admin
# ignorer le fichier lui même
474 1 Redmine Admin
.gitignore
475 1 Redmine Admin
# les fichiers de sauvegarde VIM
476 1 Redmine Admin
*~
477 1 Redmine Admin
# ignorer les fichiers html générés
478 1 Redmine Admin
*.html
479 1 Redmine Admin
# sauf mon_fichier.html que je veux prendre en compte
480 1 Redmine Admin
!mon_fichier.html
481 1 Redmine Admin
# ignorer les dossiers @.svn@
482 1 Redmine Admin
.svn
483 1 Redmine Admin
# ignore documentation buid html files
484 1 Redmine Admin
.build
485 1 Redmine Admin
</pre>
486 1 Redmine Admin
487 1 Redmine Admin
* Le fichier @~/.gitconfig@ peut permettre d'éviter de taper trop au clavier :
488 1 Redmine Admin
<pre>
489 1 Redmine Admin
[alias]
490 1 Redmine Admin
      st = status
491 1 Redmine Admin
      di = diff
492 1 Redmine Admin
      co = checkout
493 1 Redmine Admin
      ci = commit
494 1 Redmine Admin
      br = branch
495 1 Redmine Admin
      sta = stash
496 1 Redmine Admin
</pre>
497 1 Redmine Admin
498 1 Redmine Admin
* Pour éviter de taper l'URL et son mot de passe à chaque @push@ et @pull@, il faut :
499 1 Redmine Admin
500 1 Redmine Admin
 * configurer l'URL du projet
501 1 Redmine Admin
<pre>
502 1 Redmine Admin
git config remote.origin.url http://194.167.18.22/git/projet/
503 1 Redmine Admin
git config remote.origin.mirror false
504 1 Redmine Admin
</pre>
505 1 Redmine Admin
 * renseigner le fichier @~/.netrc@ :
506 1 Redmine Admin
<pre>
507 2 samuel morin
machine dev-eole.ac-dijon.fr
508 1 Redmine Admin
login monlogin
509 1 Redmine Admin
password monmotdepasse
510 1 Redmine Admin
</pre>
511 1 Redmine Admin
 * paramétrer les droits du fichier @~/.netrc@ :
512 1 Redmine Admin
<pre>
513 1 Redmine Admin
chmod 600 ~/.netrc
514 1 Redmine Admin
</pre>
515 1 Redmine Admin
Ensuite @git push@ et @git pull@ ne posent plus de questions.
516 1 Redmine Admin
517 1 Redmine Admin
518 1 Redmine Admin
* Pour faire le ménage :
519 1 Redmine Admin
<pre>
520 1 Redmine Admin
git repack
521 1 Redmine Admin
git prune
522 1 Redmine Admin
</pre>
523 1 Redmine Admin
524 1 Redmine Admin
* Pour repérer des @commit@ dans des branches qui n'ont pas été fusionnés (@merge@) dans la branche principale :
525 1 Redmine Admin
* Pour voir les @commit@ dans la branche *ma_branche* qui n'ont pas été fusionnés (@merge@) dans *master* : 
526 1 Redmine Admin
<pre>
527 1 Redmine Admin
git cherry -v master ma_branche
528 1 Redmine Admin
</pre>
529 1 Redmine Admin
530 1 Redmine Admin
h1. De subversion vers git
531 1 Redmine Admin
532 1 Redmine Admin
Il n'existe pas de commande *@update@*. Lorsqu'un fichier a été modifié localement par erreur et qu'on veut récupérer l'original, les habitudes étaient :
533 1 Redmine Admin
<pre>
534 1 Redmine Admin
rm mon_fichier
535 1 Redmine Admin
svn update
536 1 Redmine Admin
</pre>
537 1 Redmine Admin
538 1 Redmine Admin
A la place, il faut faire
539 1 Redmine Admin
<pre>
540 1 Redmine Admin
git checkout mon_fichier
541 1 Redmine Admin
</pre>
542 1 Redmine Admin
543 1 Redmine Admin
Pour revenir à un checkout frais dans le projet entier, utiliser *@reset@*. On peut annuler un commit en faisant :
544 1 Redmine Admin
545 1 Redmine Admin
<pre>
546 1 Redmine Admin
git reset --hard HEAD
547 1 Redmine Admin
</pre>
548 1 Redmine Admin
549 1 Redmine Admin
h1. Créer un patch et l'intégrer
550 1 Redmine Admin
551 1 Redmine Admin
Dans un projet (Ex.: conf-horus) on a créé une branche "ma_branche" dans laquelle on a fait des modifications (par rapport à "master").
552 1 Redmine Admin
553 1 Redmine Admin
On veut récupérer un fichier recensant les différences entre la branche *master* et la branche *ma_branche* (un fichier @diff@) :
554 1 Redmine Admin
<pre>
555 1 Redmine Admin
git diff master [nom-de-branche]  > file.patch
556 1 Redmine Admin
</pre>
557 1 Redmine Admin
558 1 Redmine Admin
* Une fois le patch récupéré, pour l'inclure dans la branche *master* :
559 1 Redmine Admin
560 1 Redmine Admin
<pre>
561 1 Redmine Admin
git apply --stat file.patch
562 1 Redmine Admin
git apply --check file.patch
563 10 Gaston TJEBBES
</pre> permet de tester le patch, et :
564 1 Redmine Admin
<pre>
565 1 Redmine Admin
git apply file.patch
566 1 Redmine Admin
</pre> permet de l'appliquer
567 9 Gaston TJEBBES
568 9 Gaston TJEBBES
h1. Tags
569 9 Gaston TJEBBES
570 9 Gaston TJEBBES
571 9 Gaston TJEBBES
*git* fait une différence entre les branches et les tags, cela se voit bien avec *git-gui* (vue de l'historique des branches).
572 9 Gaston TJEBBES
573 9 Gaston TJEBBES
Une branche est modifiable, un tag ne l'est pas. 
574 9 Gaston TJEBBES
575 9 Gaston TJEBBES
* Création du @tag@ :
576 9 Gaston TJEBBES
<pre>
577 9 Gaston TJEBBES
git tag mon-premier-tag
578 9 Gaston TJEBBES
</pre>
579 9 Gaston TJEBBES
580 9 Gaston TJEBBES
* Liste des tags :
581 9 Gaston TJEBBES
<pre>
582 9 Gaston TJEBBES
git tag
583 9 Gaston TJEBBES
</pre>
584 9 Gaston TJEBBES
585 9 Gaston TJEBBES
* Commit d'un @tag@ :
586 9 Gaston TJEBBES
<pre>
587 9 Gaston TJEBBES
git push --tags http://login@dev-eole.ac-dijon.fr/git/sandbox
588 9 Gaston TJEBBES
</pre>
589 9 Gaston TJEBBES
590 9 Gaston TJEBBES
 * ou bien :
591 9 Gaston TJEBBES
<pre>
592 9 Gaston TJEBBES
git push http://login@dev-eole.ac-dijon.fr/git/sandbox <nom_tag>
593 9 Gaston TJEBBES
</pre>
594 9 Gaston TJEBBES
595 9 Gaston TJEBBES
 * ou encore :
596 9 Gaston TJEBBES
<pre>
597 9 Gaston TJEBBES
git push http://login@dev-eole.ac-dijon.fr/git/sandbox <nom_branche> <nom_tag>
598 9 Gaston TJEBBES
</pre>
599 9 Gaston TJEBBES
600 9 Gaston TJEBBES
* Recupérer un @tag@ :
601 9 Gaston TJEBBES
<pre>
602 9 Gaston TJEBBES
git checkout tags/<nom_tag>
603 9 Gaston TJEBBES
</pre>
604 9 Gaston TJEBBES
605 9 Gaston TJEBBES
* Pour voir quel @commit@ exactement a été taggé :
606 9 Gaston TJEBBES
<pre>
607 9 Gaston TJEBBES
git show <nom_tag>
608 9 Gaston TJEBBES
</pre>