Projet

Général

Profil

RecueilGit » Historique » Version 12

Arnaud FORNEROT, 03/10/2013 09:55

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