Projet

Général

Profil

RecueilGit » Historique » Version 11

Arnaud FORNEROT, 03/10/2013 09:48

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