ARCHIVE ATELIER GIT
1 (16:30:07) davin.baragiotta: ======================= DEBUT : Atelier Git ===========================
2 (16:30:23) arnaud.amelina left the room.
3 (16:30:27) davin.baragiotta: Bonjour à tous! Cet atelier est co-animé par moi et progfou
4 (16:30:52) davin.baragiotta: Je vais vous guider pendant 1h sur les commandes de base Git
5 (16:31:26) davin.baragiotta: ensuite on aura un bon 30 min avec progfou pour la partie "suivre ses serveurs avec Git", une nouveauté cette année ;)
6 (16:31:37) davin.baragiotta: finalement on aura 20min de questions
7 (16:31:47) davin.baragiotta: support de présentation pour ma partie :
8 (16:31:54) davin.baragiotta: https://wiki.auf.org/wikiteki/Projet/SemaineTech/2013/Ateliers/Git/Support
9 (16:32:08) davin.baragiotta: grosso modo, c'est le même atelier que l'an dernier
10 (16:32:11) davin.baragiotta: mais un peu plus court
11 (16:32:22) davin.baragiotta: on pourra collaborer ensuite
12 (16:32:36) davin.baragiotta: dans un "labo" (autre nouveauté de cette année)
13 (16:32:49) davin.baragiotta: j'ai créé un labo-git... on en parle après...
14 (16:33:05) davin.baragiotta: maintenant, vous devriez avoir 3 fenêtres ouvertes
15 (16:33:11) davin.baragiotta: * celle-ci ;)
16 (16:33:21) davin.baragiotta: * le support de présentation (web)
17 (16:33:26) davin.baragiotta: * un terminal
18 (16:33:32) davin.baragiotta: c'est parti!
19 (16:33:35) davin.baragiotta: INTRODUCTION
20 (16:33:50) davin.baragiotta: notre objectif aujourd'hui est de connaître les commandes de base
21 (16:34:11) davin.baragiotta: pour pouvoir suivre localement les versions
22 (16:34:33) davin.baragiotta: utiliser les branches (sera certainement plus dans le "labo")
23 (16:34:44) davin.baragiotta: et surtout, faire le suivi des serveurs
24 (16:34:51) davin.baragiotta: vous devez avoir Git d'installé
25 (16:34:59) davin.baragiotta: sudo apt-get install git
26 (16:35:05) davin.baragiotta: (avant c'était git-core)
27 (16:35:23) davin.baragiotta: aussi, installer l'outil de visualisation graphique de git : gitk
28 (16:35:29) davin.baragiotta: sudo apt-get install gitk
29 (16:35:38) davin.baragiotta: mais pourquoi "versionner"?
30 (16:36:09) davin.baragiotta: en fait, on veut pouvoir "suivre" les modifications qu'on fait dans une arboresence de fichiers dans plusieurs cas
31 (16:36:13) davin.baragiotta: exemples
32 (16:36:29) davin.baragiotta: vous développez un logiciel... vous faites donc des modifications au code source
33 (16:36:44) davin.baragiotta: on veut suivre les modifications!
34 (16:37:06) davin.baragiotta: vous gérez un serveur à l'AUF et vous modifiez sa config, par exemple....
35 (16:37:11) davin.baragiotta: on veut suivre les modifications!
36 (16:37:40) davin.baragiotta: quand on dit suivre : c'est que on veut voir les modifications "voulues"... et pouvoir revenir en arrière si on s'est trompé, par exemple
37 (16:38:03) davin.baragiotta: Git est un "gestionnaire de version"... un VCS en anglais
38 (16:38:22) davin.baragiotta: Git est de la 3e génération des VCS, la génération plus récente
39 (16:38:39) davin.baragiotta: d'ailleurs on pourrait dire qu'il a su s'imposer par rapport aux autres VCS de 3e génération
40 (16:38:49) davin.baragiotta: en quoi Git est particulier?
41 (16:38:58) davin.baragiotta: d'abord, il est distribué
42 (16:39:06) davin.baragiotta: attention, c'est important! ;)
43 (16:39:30) davin.baragiotta: non.... il n'y a pas LE dépôt central avec Git...
44 (16:39:39) davin.baragiotta: il y a PLEIN de dépôts autonomes...
45
46 (16:40:06) davin.baragiotta: concrètement, quand on collabore : chaque collaborateur a une version locale complète des sources versionnées
47 (16:40:18) davin.baragiotta: indépendante...
48 (16:40:48) davin.baragiotta: bien sûr, après on peut tout fusionner les apports de chacun dans les dépôts
49 (16:40:59) davin.baragiotta: mais parlons concret : mettons les mains dans git
50 (16:41:21) davin.baragiotta: sur votre poste, créez-vous un répertoire nommé... disons "semainetech"
51 (16:41:32) davin.baragiotta: déplacez-y vous
52 (16:41:36) davin.baragiotta: mkdir semainetech
53 (16:41:40) davin.baragiotta: cd semainetech
54 (16:42:17) davin.baragiotta: pour amorcer le suivi de ce répertoire (et de TOUT son contenu) par git :
55 (16:42:26) davin.baragiotta: tapez la commande :
56 git init
57 (16:42:43) davin.baragiotta:
58 giotta@machina:~/projets/ateliers/git$ mkdir semainetech
59 giotta@machina:~/projets/ateliers/git$ cd semainetech
60 giotta@machina:~/projets/ateliers/git/semainetech$ git init
61 Initialized empty Git repository in /home/giotta/projets/ateliers/git/semainetech/.git/
62 (16:43:01) davin.baragiotta: si vous regardez vos fichiers cachés
63 (16:43:10) davin.baragiotta: vous allez voir un répertoire ".git"
64 (16:43:20) davin.baragiotta: TOUT le suivi est là
65 (16:43:38) davin.baragiotta: vous supprimez ce fichier? vous venez de supprimer TOUT le suivi Git.... !!!
66 (16:43:45) davin.baragiotta: *ce répertoire, dis-je
67 (16:44:08) davin.baragiotta: (contrairement à SVN qui crée des répertoire .SVN partout)
68 (16:44:18) davin.baragiotta: ok donc on vit d'amorcer le suivi de Git
69 (16:44:33) davin.baragiotta: on va maintenant se créer un nouveau fichier dans le répertoire semainetech
70 (16:44:37) davin.baragiotta: et un nouveau répertoire
71 (16:44:52) davin.baragiotta: je crée fichier "davin.txt" et répertoire "test"
72 (16:45:31) davin.baragiotta: maintenant, une nouvelle commande... presque la plus importante :
73 git status
74 (16:45:47) davin.baragiotta: status vous permet de voir à tout instant "où vous en êtes"
75 (16:46:02) davin.baragiotta:
76 giotta@machina:~/projets/ateliers/git/semainetech$ git status
77 # On branch master
78 #
79 # Initial commit
80 #
81 # Untracked files:
82 # (use "git add <file>..." to include in what will be committed)
83 #
84 # davin.txt
85 nothing added to commit but untracked files present (use "git add" to track)
86 (16:46:11) davin.baragiotta: on remarque 2 choses
87 (16:46:19) davin.baragiotta: en fait 3 ;)
88 (16:46:28) davin.baragiotta: 1. git est explicite : lisez ce qu'il vous dit
89 (16:46:51) davin.baragiotta: 2. en lisant, on lit que le fichiier "davin.txt" n'est pas suivi (untracked)
90 (16:47:22) davin.baragiotta: 3. on se rend compte qu'il ne parle pas de mon répertoire encore... c'est qu'il n'a rien dedans.... ajoutez un fichier dans le répertoire aussi
91 (16:48:07) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git status
92 # On branch master
93 #
94 # Initial commit
95 #
96 # Untracked files:
97 # (use "git add <file>..." to include in what will be committed)
98 #
99 # davin.txt
100 # test/
101 nothing added to commit but untracked files present (use "git add" to track)
102 (16:48:23) davin.baragiotta: voilà, maintenant on voit que test/ n'est pas suivi aussi
103 (16:48:27) davin.baragiotta: git est poli
104 (16:48:40) davin.baragiotta: il ne suit QUE ce que vous voulez qu'il suive...
105 (16:49:17) davin.baragiotta: actuellement, vu qu'il ne "suit pas" nos fichiers ajoutés : on peut les modifier tant qu'on veut... Git ne fera rien de particulier
106 (16:49:31) davin.baragiotta: donc on va mainteant dire à Git de suivre ces fichiers...
107 (16:49:54) davin.baragiotta: plus simplement, on va dire "suit TOUS les fichiers/répertoires dans semainetech"
108 (16:50:00) davin.baragiotta: commande :
109 git add .
110 (16:50:22) davin.baragiotta:
111 giotta@machina:~/projets/ateliers/git/semainetech$ git add .
112 giotta@machina:~/projets/ateliers/git/semainetech$ git status
113 # On branch master
114 #
115 # Initial commit
116 #
117 # Changes to be committed:
118 # (use "git rm --cached <file>..." to unstage)
119 #
120 # new file: davin.txt
121 # new file: test/conf.py
122 # new file: test/script.py
123 #
124 (16:50:45) davin.baragiotta: Aaaah! git status nous dit maintenant autre chose :
125 (16:50:58) davin.baragiotta: il y a 3 changements "à commiter"
126 (16:51:50) davin.baragiotta: c'est à dire que Git sait qu'on a ajouté 3 fichiers
127 (16:51:55) davin.baragiotta: mais
128 (16:52:18) davin.baragiotta: c'est à NOUS de dire à Git qu'on "commit" ces changements
129 (16:52:33) davin.baragiotta: commit en anglais veut dire "engager" en français
130 (16:53:37) davin.baragiotta: donc on peut modifier tout ce qu'on veut, tant qu'on veut... Git nous rappelle les changements : mais on doit lui dire un moment donné "c'est changements sont bons... je les ai faits consciemment, et je les veux"
131 (16:54:03) davin.baragiotta: les époux s'engagent entre eux en disant "oui je le veux".... ben on fait un peut pareil avec nos changements dans nos fichiers ;)
132 (16:54:06) davin.baragiotta: "je le veux"
133 (16:54:20) davin.baragiotta: alors, quelle est la commande pour "commiter" nos changements?
134 (16:54:37) davin.baragiotta:
135 git commit -a -m "Mon premier commit"
136 (16:55:07) davin.baragiotta:
137 giotta@machina:~/projets/ateliers/git/semainetech$ git commit -a -m "Mon premier commit"
138 [master (root-commit) 078d16b] Mon premier commit
139 0 files changed
140 create mode 100644 davin.txt
141 create mode 100644 test/conf.py
142 create mode 100644 test/script.py
143 (16:55:33) davin.baragiotta: Alors lisons un peu ce que Git nous dit après avoir fait notre commit
144 (16:55:43) davin.baragiotta: [master (root-commit) 078d16b] Mon premier commit
145 (16:55:52) davin.baragiotta: entre crochets [] : master
146 (16:56:16) davin.baragiotta: ça c'est la branche sur laquelle on est... on va y revenir plus tard aux "branches" (on sinon dans le labo-git)
147 (16:56:32) davin.baragiotta: mais quand on fait status, git nous dit sur quelle branche on est
148 (16:56:42) davin.baragiotta: (on était sur master : tout va bien)
149 (16:57:24) davin.baragiotta: (root-commit) : en fait, l'ensemble de nos commits... faut les voir comme des petits billes qui vont former un arbre
150 (16:57:41) davin.baragiotta: en fait, ce sera un Graphe acyclique... mais je ne veut pas dire de gros mots ;)
151 (16:57:46) davin.baragiotta: donc
152 (16:57:56) davin.baragiotta: c'est la racine de l'arbre de tous nos commits
153 (16:57:59) davin.baragiotta: racine = root
154 (16:58:12) davin.baragiotta: cet arbre aura aussi des branches... la métaphore se tient
155 (16:58:35) davin.baragiotta: root-commit = le premier de tous, la racine... avant c'est le néant.... là on vient de créer le Big Bang ;)
156 (16:58:46) davin.baragiotta: ok, ensuite... on a un morceau de hash
157 (16:58:55) davin.baragiotta: 078d16b
158 (16:59:26) davin.baragiotta: en interne, pour opérer sa "magie"... git hash tout (le contenu des fichiers) pour pouvoir savoir ce qui change ou pas
159 (16:59:47) davin.baragiotta: et finalement, le commit même a un hash... voyons le comme un identifiant unique
160 (17:00:29) davin.baragiotta: le hash est plus long que ça... mais utiliser les 6-8 premiers caractères du hash est sûr (git vous dira de toute façons si vous êtes ambigus et vous demander un identifiant plus long)
161 (17:00:44) davin.baragiotta: [master (root-commit) 078d16b] Mon premier commit
162 (17:01:03) davin.baragiotta: finalement... le "Mon premier commit" est le message que j'ai passé en paramètre
163 (17:01:28) davin.baragiotta: c'est très important d'avoir des noms de commits pertinents
164 (17:01:37) davin.baragiotta: le but est de pouvoir suivre l'historique des modifications
165 (17:01:52) davin.baragiotta: si vous écrivez toujours "changement", "modif", "correctifs"... euh
166 (17:02:04) davin.baragiotta: ben faut aller voir concrètement le travail qui a été fait
167 (17:02:08) davin.baragiotta: exemple :
168 (17:02:24) davin.baragiotta: vous modifier la config d'Apache et votre serveur est suivi par Git?
169 (17:02:33) davin.baragiotta: "Ajout du site cartographie"
170 (17:03:04) davin.baragiotta: là c'est clair que toutes les modifications faites dans ce commit concerne l,ajout du site cartographie sur le serveur
171 (17:03:07) davin.baragiotta: ok on continue
172 (17:03:21) davin.baragiotta: on était là :
173 (17:03:22) davin.baragiotta: giotta@machina:~/projets/ateliers/git/semainetech$ git commit -a -m "Mon premier commit"
174 [master (root-commit) 078d16b] Mon premier commit
175 0 files changed
176 create mode 100644 davin.txt
177 create mode 100644 test/conf.py
178 create mode 100644 test/script.py
179 (17:03:37) davin.baragiotta: le reste, c'est le détail des opérations sur les fichiers
180 (17:03:52) davin.baragiotta: (pas de changé, car on a juste ajouté)... 3 fichiers créés
181 (17:04:04) davin.baragiotta: reafites maintenant git status pour voir où vous en êtes
182 (17:04:17) davin.baragiotta:
183 giotta@machina:~/projets/ateliers/git/semainetech$ git status
184 # On branch master
185 nothing to commit (working directory clean)
186 (17:04:24) davin.baragiotta: voilà, Git est explicite :
187 (17:04:51) davin.baragiotta: vous êtes sur la branche master (celle par défaut... disons, le tronc de l'arbre des modifications)
188 (17:05:22) davin.baragiotta: rien à engager comme modifications car l'arborescence du répertoire "semainetech" que Git suit est "propre"
189 (17:05:38) davin.baragiotta: c'est à dire : on n'a fait aucune modification depuiss notre dernier commit
190 (17:05:48) davin.baragiotta: on récapitule les commandes vues :
191 (17:05:59) davin.baragiotta: git init, git status, git add, git commit
192 (17:06:01) davin.baragiotta: simple
193 (17:06:04) davin.baragiotta: des questions?
194 (17:07:14) davin.baragiotta: bon alors on continue... le modérateur me fera signe pour des questions tardive
195 (17:07:24) davin.baragiotta: on en est où dans le programme?
196 (17:07:33) davin.baragiotta: https://wiki.auf.org/wikiteki/Projet/SemaineTech/2013/Ateliers/Git/Support
197 (17:07:42) davin.baragiotta: on est sous VERSIONNER EN LOCAL
198 (17:08:07) davin.baragiotta: nous reste à voir la liste visuellement la liste de nos commits...
199 (17:08:24) davin.baragiotta: pour ce faire on va créer un ou 2 commits...
200 (17:08:29) davin.baragiotta: de plus
201 (17:08:47) davin.baragiotta: modifiez vos fichiers actuels (ou ajoutez-en)
202 (17:09:13) davin.baragiotta: assurez d,avoir "commité" vos changements... engagez-les car vous voulez ces changements
203 (17:10:39) davin.baragiotta:
204 giotta@machina:~/projets/ateliers/git/semainetech$ git status
205 # On branch master
206 nothing to commit (working directory clean)
207 giotta@machina:~/projets/ateliers/git/semainetech$ git status
208 # On branch master
209 # Changes not staged for commit:
210 # (use "git add <file>..." to update what will be committed)
211 # (use "git checkout -- <file>..." to discard changes in working directory)
212 #
213 # modified: test/script.py
214 #
215 no changes added to commit (use "git add" and/or "git commit -a")
216 giotta@machina:~/projets/ateliers/git/semainetech$ git commit -a -m "Amorce du code de ce fameux script : il print un truc"
217 [master e01b295] Amorce du code de ce fameux script : il print un truc
218 1 file changed, 1 insertion(+)
219 giotta@machina:~/projets/ateliers/git/semainetech$ git status
220 # On branch master
221 nothing to commit (working directory clean)
222 (17:11:04) davin.baragiotta: j'ai ajouté une ligne dans mon fichier script.py, et j'ai commité mon changement en donnant un message explicite à mon commit
223 (17:11:21) davin.baragiotta: excellent, j'ai maintenant 2 commits dans mon historique...
224 (17:11:26) davin.baragiotta: mais prouvons-le!
225 (17:11:32) davin.baragiotta: nouvelle commande : git log
226 (17:11:47) davin.baragiotta:
227 giotta@machina:~/projets/ateliers/git/semainetech$ git log
228 commit e01b2957231d8750bd1a5cea000f0963ad1b6860
229 Author: Davin Baragiotta <davin.baragiotta@auf.org>
230 Date: Mon Sep 2 10:09:55 2013 -0400
231 Amorce du code de ce fameux script : il print un truc
232 commit 078d16b50983723a2dc9e2620c4fde5fe22ff7d3
233 Author: Davin Baragiotta <davin.baragiotta@auf.org>
234 Date: Mon Sep 2 09:54:57 2013 -0400
235 Mon premier commit
236 (17:12:01) davin.baragiotta: a-ha!
237 (17:12:11) davin.baragiotta: on voit une liste de commits, avec leur hash complet
238 (17:12:32) davin.baragiotta: l'auteur... (modifier votre .gitconfig dans votre home si votre nom n'apparait pas correctement)
239 (17:12:53) davin.baragiotta: la date : wouhou! c'est mon anniversaire! (c'est vrai mais pas pertinent)
240 (17:13:00) davin.baragiotta: et dessous : les messages de commit
241 (17:13:18) davin.baragiotta: on voit que le tronc (master) pousse en ajoutant des commits
242 (17:13:27) davin.baragiotta: mais pour le voir plus clairement, on a installé gitk
243 (17:13:39) davin.baragiotta: lancez gitk en ligne de commande :
244 gitk
245 (17:14:08) davin.baragiotta: c'est la même information mais présentée graphiquement
246 (17:14:26) davin.baragiotta: on voit les petits ronds : ce sont les commits
247 (17:14:32) davin.baragiotta: ils s'empilent
248 (17:14:52) davin.baragiotta: on vient de voir toutes les commandes sous VERSIONNER EN LOCAL
249 (17:15:11) davin.baragiotta: on va sauter les parties collaboratives
250 (17:15:21) davin.baragiotta: mais je veux vous mentionner que tous nos projets, à l'AUF
251 (17:15:33) davin.baragiotta: se trouvent sur http://git.auf.org
252 (17:16:13) davin.baragiotta: ce dépôt est central parce qu'on le veut (qui n'impose pas de dépôt central) : les développeurs y "poussent" leur contributions
253 (17:16:32) davin.baragiotta: pour expérimenter ce travail collaboratif, on peut essayer en fin d'atelier ou sinon ce sera dans le labo-git
254 (17:17:08) davin.baragiotta: en fait, y,a seulement 2 choses à savoir de plus pour le travail collaboratif : push, pull
255 (17:17:30) davin.baragiotta: soit "pousser ces modifications" sur le dépôt central
256 (17:17:31) davin.baragiotta: ou
257 (17:17:55) davin.baragiotta: "tirer (pull) les modifications récentes provenant du dépôt central"
258 (17:17:58) davin.baragiotta: git push
259 (17:18:00) davin.baragiotta: git pull
260 (17:18:26) davin.baragiotta: autre commande à savoir, pas si vous ne la retenez pas, git vous la signale dansle contexte : git rm
261 (17:18:31) davin.baragiotta: oui rm = remove
262 (17:18:33) davin.baragiotta: donc
263 (17:18:50) davin.baragiotta: si vous supprimez un fichier dans l'arborescence
264 (17:19:07) davin.baragiotta: git status va vous le dire... on le fait tiens
265 (17:19:12) davin.baragiotta: supprimez un de vos fichier
266 (17:19:20) davin.baragiotta: (je supprime davin.txt)
267 (17:20:06) davin.baragiotta: (fermez la fenêtre de gitk au besoin)
268 (17:20:26) davin.baragiotta: j'ai supprimé mon fichier et git status me dit :
269 giotta@machina:~/projets/ateliers/git/semainetech$ git status
270 # On branch master
271 # Changes not staged for commit:
272 # (use "git add/rm <file>..." to update what will be committed)
273 # (use "git checkout -- <file>..." to discard changes in working directory)
274 #
275 # deleted: davin.txt
276 #
277 no changes added to commit (use "git add" and/or "git commit -a")
278 (17:21:07) davin.baragiotta: le fichier davin.txt a été supprimé de l'arborescence
279 (17:21:55) davin.baragiotta: on va confirmer à git, qu'on ne veut bien supprimer ce fichier
280 (17:21:56) davin.baragiotta: # (use "git add/rm <file>..." to update what will be committed)
281 (17:22:09) davin.baragiotta: donc on fait :
282 git rm davin.txt
283 (17:22:30) davin.baragiotta:
284 giotta@machina:~/projets/ateliers/git/semainetech$ git rm davin.txt
285 rm 'davin.txt'
286 giotta@machina:~/projets/ateliers/git/semainetech$ git status
287 # On branch master
288 # Changes to be committed:
289 # (use "git reset HEAD <file>..." to unstage)
290 #
291 # deleted: davin.txt
292 #
293 (17:22:46) davin.baragiotta: git comprend maintenant qu'on est prêt à commiter ce changement (ici, une suppression)
294 (17:22:54) davin.baragiotta: donc on commit.. comme d'habitude
295 (17:23:28) davin.baragiotta:
296 giotta@machina:~/projets/ateliers/git/semainetech$ git commit -a -m "Suppression de fichier davin"
297 [master f21ded1] Suppression de fichier davin
298 0 files changed
299 delete mode 100644 davin.txt
300 (17:23:56) davin.baragiotta: voilà, mon commit f21ded1 est la version de mon arborescence de semainetech... sans le fichier davin.txt
301 (17:24:04) davin.baragiotta: plutôt simple au final!
302 (17:24:14) davin.baragiotta: on regarde le programme
303 (17:24:22) davin.baragiotta: https://wiki.auf.org/wikiteki/Projet/SemaineTech/2013/Ateliers/Git/Support
304 (17:25:06) davin.baragiotta: le PROCESSUS DE VERSIONNAGE est donc les commandes de base à savoir...
305 incluant celles de push et pull pour travail collaboratif
306 (17:25:32) davin.baragiotta: pour ce qui est des branches et du travail collaboratif : plsu tard dans cet atelier ou labo-git
307 (17:26:01) davin.baragiotta: finalement, le WORKFLOW DE DÉVELOPPEMENT concerne plus ceux qui sont appelés à contribuer aux projets SI
308 (17:26:03) davin.baragiotta: mais
309 (17:26:21) davin.baragiotta: notre approche a un peu changer par rapport à ce qui est sur cette page...
310 (17:26:26) davin.baragiotta: on s'en parle au besoin ;)
311 (17:26:37) davin.baragiotta: CONCLUSION (partie Davin... celle de JC suit)
312 (17:26:48) davin.baragiotta: on n'a pas de raison de se passer de Git
313 (17:26:51) davin.baragiotta: c'est simple
314 (17:26:56) davin.baragiotta: quelques commandes suffisent
315 (17:27:06) davin.baragiotta: pour vous donner la toute puissance sur les modifications que vous faites
316 (17:27:15) davin.baragiotta: sur une arboresence de fichier
317 (17:27:23) davin.baragiotta: quoi, vous ne me croyez pas?
318 (17:27:24) davin.baragiotta: ok
319 (17:27:40) davin.baragiotta: supposons que supprimer votre fichier était une grosse bourde
320 (17:27:44) davin.baragiotta: et que vous en parlez avec JC
321 (17:28:07) davin.baragiotta: puis il vous dit : remet toute l'arborescence comme elle était AVANT que tu supprimes ton fichier
322 (17:28:15) davin.baragiotta: git log ou gitk
323 (17:28:32) davin.baragiotta:
324 giotta@machina:~/projets/ateliers/git/semainetech$ git log
325 commit f21ded178c5d7ca21100d682c4a18fb9e993b621
326 Author: Davin Baragiotta <davin.baragiotta@auf.org>
327 Date: Mon Sep 2 10:23:19 2013 -0400
328 Suppression de fichier davin
329 commit e01b2957231d8750bd1a5cea000f0963ad1b6860
330 Author: Davin Baragiotta <davin.baragiotta@auf.org>
331 Date: Mon Sep 2 10:09:55 2013 -0400
332 Amorce du code de ce fameux script : il print un truc
333 commit 078d16b50983723a2dc9e2620c4fde5fe22ff7d3
334 Author: Davin Baragiotta <davin.baragiotta@auf.org>
335 Date: Mon Sep 2 09:54:57 2013 -0400
336 Mon premier commit
337 (17:29:25) davin.baragiotta: On voit ici que j'ai supprimé mon fichier dans le commit "f21ded1".... (ne pas juste se fichier au nom de commit, vous pouvez regarder le détail des changements via gitk et git diff, notamment)
338 (17:29:30) davin.baragiotta: donc on veut le commit avant
339 (17:29:45) davin.baragiotta: le commit avant est : e01b29
340 (17:30:04) davin.baragiotta: on va donc "se déplacer dans l'historique"
341 (17:30:14) davin.baragiotta: pour revenir à une version antérieure!!!
342 (17:30:27) davin.baragiotta: commande :
343 git checkout e01b29
344 (17:31:03) davin.baragiotta:
345 giotta@machina:~/projets/ateliers/git/semainetech$ git checkout e01b29
346 Note: checking out 'e01b29'.
347 You are in 'detached HEAD' state. You can look around, make experimental
348 changes and commit them, and you can discard any commits you make in this
349 state without impacting any branches by performing another checkout.
350 If you want to create a new branch to retain commits you create, you may
351 do so (now or later) by using -b with the checkout command again. Example:
352 git checkout -b new_branch_name
353 HEAD is now at e01b295... Amorce du code de ce fameux script : il print un truc
354 (17:31:13) davin.baragiotta: git status
355 (17:31:35) davin.baragiotta:
356 giotta@machina:~/projets/ateliers/git/semainetech$ git status
357 # Not currently on any branch.
358 nothing to commit (working directory clean)
359 giotta@machina:~/projets/ateliers/git/semainetech$ git log
360 commit e01b2957231d8750bd1a5cea000f0963ad1b6860
361 Author: Davin Baragiotta <davin.baragiotta@auf.org>
362 Date: Mon Sep 2 10:09:55 2013 -0400
363 Amorce du code de ce fameux script : il print un truc
364 commit 078d16b50983723a2dc9e2620c4fde5fe22ff7d3
365 Author: Davin Baragiotta <davin.baragiotta@auf.org>
366 Date: Mon Sep 2 09:54:57 2013 -0400
367 Mon premier commit
368 (17:32:13) davin.baragiotta: ok, donc j'ai atteint mon objectif... mais c'est pas la meilleure façon de faire : je ne suis plus sur aucune branche
369 (17:32:39) davin.baragiotta: (ok je ne fais pas ça tous les jours... mais on prendre les questions et nos champions git vont nous dire LA façon de faire pour revenir en arrière)
370 (17:33:08) davin.baragiotta: toujours est-il que sans Git... l'idée de revenir dans un "état" antérieur est tout simplement pas possible
371 (17:33:15) davin.baragiotta: questions?
372 (17:34:46) yemen.sayour: jusqu'à maintenant non :)
373 (17:36:13) davin.baragiotta: ok, alors au final... regardez la doc de git... regardez les projets de l'AUF sur http://git.auf.org
374 (17:36:35) davin.baragiotta: et aussi, si vous aimez l'Open Source... énormement de choses se passe sur Git Hub
375 (17:36:45) davin.baragiotta: http://github.com
376 (17:37:05) davin.baragiotta: créez-vous un utilisateur et codez, participez! :)
377 (17:37:30) davin.baragiotta: voilà, je laisse la parole à progfou et on se revoit en fin d,atelier ou sur labo-git si on n'a pas le temps
378 (17:37:39) davin.baragiotta: progfou: à toi
379 (17:37:58) progfou: ok
380 (17:38:02) progfou: donc
381 (17:38:09) progfou: je vais maintenant vous parler d'un exemple concret d'utilisation de git
382 (17:38:17) progfou: mais pour autre chose que du développement logiciel ! :-)
383 (17:38:42) progfou: ce dont je vais vous parler est du suivi de configuration de serveur via git
384 (17:38:52) progfou: selon la méthode documentée sur https://wiki.auf.org/wikiteki/Git/SuiviDeConfiguration
385 (17:39:22) progfou: je ne vais pas vous refaire un laïus sur les commandes, vous venez de les voir
386 (17:39:39) progfou: je vais plutôt vous parler de l'intérêt de cette technique et de comment l'utiliser à l'AUF
387 (17:39:56) progfou: il s'agit ici de disposer d'une historique des modifications qui précise ce qui a été modifié, quand et pourquoi
388 (17:40:16) progfou: attention : ne pas confondre avec un IDS (système de détection d'intrusion)
389 (17:40:37) progfou: ici je parle d'un suivi volontaire et éventuellement collaboratif, je ne parle pas de sécurité
390 (17:40:59) progfou: pour ce faire, on utilise git, qu'on installe au niveau de la racine du serveur
391 (17:41:24) progfou: c'est à dit qu'on aura un dossier « caché » /.git contenant notre historique
392 (17:41:32) progfou: le fait de l'installer à la racine permet de suivre potentiellement la totalité des fichiers du serveurs !
393 (17:41:50) progfou: mais ce n'est évidement pas ce qu'on veut
394 (17:42:03) progfou: donc, ensuite, on utilise un fichier d'exclusions (/etc/auf-git-etc/info/exclude) pour préciser ce qui nous intéresse effectivement : en particulier /etc et /usr/local
395 (17:42:24) progfou: on y ajoute aussi quelques dossiers spécifiques, comme le /boot pour la configuration de grub
396 (17:42:36) progfou: ou encore le /var/chroot/bind pour les fichiers de bind9 en mode chroot
397 (17:42:46) progfou: et d'autres encore
398 (17:43:07) progfou: pour faciliter cette mise en place du suivi de configuration des serveurs à l'AUF, nous avons mis au point un paquet Debian : auf-git-etc
399 (17:43:25) progfou: (pour les curieux, les sources se trouvent sur http://git.auf.org/?p=auf-git-etc.git;a=tree et le paquet est disponible via notre dépôt apt.auf.org)
400 (17:43:51) progfou: ce paquet s'occupe de tout ce qu'il faut pour être immédiatement utilisable, ou presque…
401 (17:44:10) progfou: il requiert tout de même au préalable qu'un service minimal d'envoi de courriels soit disponible en local sur le serveur
402 (17:44:34) progfou: typiquement dans nos serveurs virtuels, un exim4 de base configuré pour envoyer vers un smarthost
403 (17:45:03) progfou: ce service d'envoi de courriels est aussi nécessaire pour une bonne gestion du serveur de toutes façons
404 (17:45:15) progfou: ne serait-ce que pour recevoir les résultat des tâches planifiées en cron !
405 (17:45:43) progfou: dès l'installation du paquet, un premier commit est automatiquement fait avec la configuration actuelle du serveur
406 (17:46:04) progfou: et à chaque commit, y compris ce commit initial, un courriel est envoyé pour informer des changements enregistrés
407 (17:46:36) progfou: le courriel est envoyé à root+git par défaut, ça se change dans /etc/auf-git-etc/hooks/post-commit
408 (17:47:16) progfou: (et bientôt dans /etc/auf-git-etc/config ;-) )
409 (17:47:38) progfou: par ailleurs, si des modifications sont faites et ne sont pas enregistrées dans git
410 (17:47:51) progfou: un cron s'exécutant à 10h et 16h va vous envoyer un courriel avec la liste des changements restant à valider
411 (17:48:45) progfou: la aussi le courriel est envoyé à root+git par défaut, ce sera aussi configurable via /etc/auf-git-etc/config dans la version à venir
412 (17:49:07) progfou: (en attendant vous pouvez aussi faire un alias de root+git vers votre adél dans /etc/aliases)
413 (17:49:53) progfou: un autre avantage d'avoir un suivi des modifications est qu'il permet aussi, accessoirement, comme en développement logiciel, de revenir en arrière sur une modification que l'on souhaiterait annuler
414 (17:50:23) progfou: ce qui se ferait soit avec un git checkout, en précisant éventuellement le ou les fichiers à reprendre, soit avec un git reset pour un retour en arrière général/massif
415 (17:51:29) progfou: pour finir, l'installation de auf-git-etc est obligatoire sur tous les serveurs AUF, donc planifiez votre déploiement ! <= ça c'est pour déclencher les questions ! :-D
416 (17:51:38) progfou: ça ira vite : pour chaque serveur, vérifier que l'envoi de courriel marche, puis installer le paquet auf-git-etc (en ajoutant la source APT AUF le cas échéant) et c'est fini !
417 (17:51:46) progfou: des questions ? ;-)
418 (17:52:51) ongolaBoy: QUESTION : différence entre git reset et git revert ?
419 (17:53:28) progfou: davin.baragiotta, c'est plus sur le plan des commandes, tu veux la prendre ?
420 (17:53:38) davin.baragiotta: oui
421 (17:53:59) davin.baragiotta: je les connais pas toutes, mais on utilise reset
422 (17:54:25) davin.baragiotta: en fait, faudrait lire la doc, en toute honnêteté...
423 (17:55:01) davin.baragiotta: ok je crois que progfou sait : go! ;)
424 (17:55:01) progfou: en fait, oui, c'est expliqué dans le man git-revert :
425 (17:55:12) progfou: un git reset est un peu violent
426 (17:55:23) progfou: on retourne en arrière, en perdant l'information de notre avancée précédente
427 (17:55:56) progfou: tandis que le git revert, lui, va conserver l'historique passée, et faire le retour en arrière et l'ajouter aux commits
428 (17:56:12) progfou: donc avec git-revert on garde toute l'historique, y compris celle du retour en arrière
429 (17:56:21) davin.baragiotta: y'a aussi rebase ;)
430 (17:56:25) progfou: tandis qu'avec git reset on perd l'info du retour en arrière
431 (17:56:48) progfou: oui, rebase est encore plus bas niveau (= à éviter, c'est pour les bidouille sur la façon dont le dépôt gère ses petits)
432 (17:57:26) progfou: c'est vrai qu'avec notre suivi des serveurs on pourrait faire un revert
433 (17:57:47) progfou: on garderait ainsi la trace de la tentative de config et du retour en arrière
434 (17:58:01) progfou: en fait, moi-même, j'utilise rarement git reset
435 (17:58:14) progfou: mais il est aussi rare que je retourne en arrière ;)
436 (17:58:54) progfou: ou bien si je le fais c'est assez rapidement => ça touche généralement juste 1 ou 2 fichiers => je me contente d'un git checkout pour récupérer juste ceux-là
437 (17:59:15) progfou: autres questions ? pour Davin ou moi
438 (18:00:10) progfou: je rends la main à Davin
439 (18:00:25) davin.baragiotta: bon alors, pour tous les champions dans cette salle qui suivent vraiment, on va s'amuser à collaborer!
440 (18:00:53) davin.baragiotta: svp, dans le salon tech, tapez "." pour montrer que vous n'êtes pas encore en pause café ;)
441 (18:01:04) davin.baragiotta: (surtout pour savoir avec qui je vais collaborer)
442 (18:01:30) claudine.mosozi: .
443 (18:02:15) davin.baragiotta: ok, pendant que les points s'ajoutent dans le salon tech... on va commencer tout de suite à collaborer
444 (18:02:42) davin.baragiotta: (je suppose que vous avez votre clé publique SSH sur le dépôt git.auf.org... mais on verra vite si vous ne l,avez pas)
445 (18:03:32) davin.baragiotta: dans un répertoire de test... disons un cran plus haut que votre répertoire semainetech... on va se positionner pour cloner le bacasable Git de l'AUF
446 (18:03:34) davin.baragiotta: cd ..
447 (18:03:54) davin.baragiotta: la commande pour cloner est dans notre doc AUF
448 (18:04:10) davin.baragiotta: dépendamment si on est dans ou hors RPV, on tape pas la même chose
449 (18:04:21) davin.baragiotta: http://wiki.auf.org/wikiteki/Git/D%C3%A9veloppeur
450 (18:04:35) davin.baragiotta: sous "Participer à un projet"
451 (18:04:49) davin.baragiotta: alors, je suppose que vous êtes dans RPV :
452 (18:05:00) davin.baragiotta: $ git clone ssh://gitosis@git.auf/bacasable
453 (18:05:12) davin.baragiotta: bacasable = nom du dépôt git qu'on veut cloner
454 (18:05:37) davin.baragiotta: si on va sur http://git.auf.org
455 (18:05:47) davin.baragiotta: et qu'on clique sur le projet bacasable
456 (18:05:51) davin.baragiotta: http://git.auf.org/?p=bacasable.git;a=summary
457 (18:06:19) davin.baragiotta: on voit que ce pauvre dépôt
458 (18:06:43) davin.baragiotta: n'a eu qu'un seul commit depuis le commit initial (root-commit) le 2011-08-31 ;)
459 (18:07:07) davin.baragiotta: tout le monde a cloné? alors on se déplace dans le répertoire bacasable
460 (18:07:27) davin.baragiotta: premier réflexe? git status
461 (18:07:35) davin.baragiotta: (on vient de cloner, tout devrait être beau)
462 (18:07:49) davin.baragiotta:
463 giotta@machina:~/projets/ateliers/git/bacasable$ git status
464 # On branch master
465 nothing to commit (working directory clean)
466 (18:07:59) davin.baragiotta: on est sûr master... l'arbo est propre
467 (18:08:30) davin.baragiotta: ok, svp : ajoutez un fichier nommé avec votre nom, ex.: "davin" pour moi, "claudine", etc.
468 (18:09:03) davin.baragiotta: ensuite? git status!
469 (18:09:26) davin.baragiotta: si vous venez d'ajouter un fichier, comme demandé... git va vous dire qu'il n'est pas suivi (untracked)
470 (18:09:59) davin.baragiotta: ajoutez-le au suivi avec "git agg nom-de-fichier" ou "git add ." (pour ajouter toutes les nouveautés)
471 (18:10:31) davin.baragiotta: donc
472 * git status
473 * éditer
474 * git add .
475 * git commit -a -m "Commit de untel"
476 (18:10:40) davin.baragiotta: finalement, commit ce changement
477 (18:11:46) davin.baragiotta: attention, si vous venez de modifier des fichiers en dehors de bacasable (comme je viens de le faire, j'étais encore dans semaintech)
478 (18:11:55) davin.baragiotta: le git de bacasable ne voit rien... évidemment
479 (18:12:09) davin.baragiotta: vous avez commité
480 (18:12:19) davin.baragiotta: vous êtes prêt à partager vos modifs
481 (18:12:25) davin.baragiotta: git push
482 (18:13:31) davin.baragiotta: moi quand j'ai fait git push
483 (18:13:33) davin.baragiotta: j'ai eu :
484 (18:13:34) davin.baragiotta:
485 giotta@machina:~/projets/ateliers/git/bacasable$ git push
486 To gitosis@git.auf.org:bacasable.git
487 ! [rejected] master -> master (non-fast-forward)
488 error: failed to push some refs to 'gitosis@git.auf.org:bacasable.git'
489 To prevent you from losing history, non-fast-forward updates were rejected
490 Merge the remote changes (e.g. 'git pull') before pushing again. See the
491 'Note about fast-forwards' section of 'git push --help' for details.
492 (18:13:37) davin.baragiotta: :)
493 (18:14:03) davin.baragiotta: ça veut dire en français "hey, tu veux ajouter un commit au dépôt... mais ta version locale n'est pas à jour"
494 (18:14:19) davin.baragiotta: sékou et willy m'ont pris de vitesse! ;)
495 (18:14:26) davin.baragiotta: http://git.auf.org/?p=bacasable.git;a=summary
496 (18:14:29) davin.baragiotta: pareil pour vous?
497 (18:14:33) davin.baragiotta: la solution : git pull
498 (18:14:44) davin.baragiotta: pour récupérer la version la plus récente du serveur
499 (18:15:08) davin.baragiotta: automatiquement : git va merger (fusionner) votre version avec la dernière version du serveur
500 (18:15:49) davin.baragiotta: voilà, j'ai pu collaborer : http://git.auf.org/?p=bacasable.git;a=summary
501 (18:15:55) davin.baragiotta: mon commit = Davin collabore
502 (18:16:27) davin.baragiotta: j'attends patrick, hassane, yemen, claudine et tout ceux qui ont dit qui suivait dans salon tech :
503 (18:16:33) davin.baragiotta: git pull...
504 (18:16:35) davin.baragiotta: git push
505 (18:17:16) davin.baragiotta: ok, on commence à manquer de temps
506 (18:17:25) davin.baragiotta: pour conclure cette mini-collaboration
507 (18:17:36) davin.baragiotta: (où chacun a ajouté un fichier)
508 (18:17:52) davin.baragiotta: regardez le commit final... celui en haut de la pile... en haut du tronc master
509 (18:17:59) davin.baragiotta: http://git.auf.org/?p=bacasable.git;a=summary
510 (18:18:14) davin.baragiotta: cliquez sur tree pour voir l'arborescence de fichier
511 (18:18:24) davin.baragiotta: http://git.auf.org/?p=bacasable.git;a=tree;h=7bb0d38a9741d09f2e66ca73790573d186aa3ec0;hb=7bb0d38a9741d09f2e66ca73790573d186aa3ec0
512 (18:18:39) davin.baragiotta: on voit que co-existent les fichiers de davin, sekou et willy
513 (18:19:04) davin.baragiotta: voilà... ça c'est la partie simple, car on "ne se marchait pas sur les pieds" : on était chacun dans notre fichier
514 (18:19:12) davin.baragiotta: mais on peut travailler sur le même fichier
515 (18:19:24) davin.baragiotta: git va faire un merge automatique (fusion)....
516 (18:19:28) davin.baragiotta: .... si il le peut.
517 (18:19:44) davin.baragiotta: Sinon : ce sera un conflit qu'il faudra régler manuellement
518 (18:19:59) davin.baragiotta: i.e : choisir le BON contenu entre les 2 contenus proposés
519 (18:20:26) davin.baragiotta: finalement, resterait à voir les branches pour vraiment voir toute la puissance de git
520 (18:20:32) davin.baragiotta: vous voulez jouez?
521 (18:20:47) davin.baragiotta: rendez-vous dans le salon "labo-git"... c'est branché!
522 (18:20:50) davin.baragiotta: ;)
523 (18:21:06) davin.baragiotta: ====================== FIN atelier git =========================