presentation.tex 11 KB
Newer Older
1
\documentclass[usepdftitle=false]{beamer}
Rémy Huet's avatar
Rémy Huet committed
2
3
4
5
6
7
8
9
10

\usepackage[frenchb]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{datetime}
\usepackage{eurosym}
\usepackage[]{url}
\usepackage[babel=true]{csquotes}
Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
11
\usepackage{listings}
12
13
\usepackage{fancyvrb}
\usepackage{xcolor}
14
15
16
17
18
19
20
\hypersetup{
pdfauthor={Thibaud Duhautbout - Rémy Huet},
pdftitle={Formation Picaosft : La gestion de version avec Git},
pdfsubject={Formation niveau 1 : les bases},
pdfkeywords={git, gestion de version, VCS},
pdfproducer={Latex},
}
Rémy Huet's avatar
Rémy Huet committed
21

Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
22
23
\beamertemplatenavigationsymbolsempty
\setbeamercolor{orangebox}{bg=orange,fg=black}
24
\setbeamercolor{terminal}{bg=darkgray,fg=white}
Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
25

Rémy Huet's avatar
Rémy Huet committed
26
\newdateformat{nombres}{\THEDAY-\THEMONTH-\THEYEAR}
27
\def\seplength{.5\topsep}
Rémy Huet's avatar
Rémy Huet committed
28

29
30
31
32
33
34
35
36
% Dans le cas d'une compilation pour la présentation, on active les
% pauses dans les slides (inutiles pour la version support à diffuser)
\newcommand{\Pause}{%
\ifdef{\Release}
  {\pause}
  {}
}

Rémy Huet's avatar
Rémy Huet committed
37
\title[Formation Git\_v1]{\today \\ Formation Picasoft : La gestion de version avec Git (niveau 1)}
Rémy Huet's avatar
Rémy Huet committed
38
\titlegraphic{\includegraphics[scale=.1]{picasoft_logo.png}}
Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
39
\author[T. Duhautbout - R. Huet]{Thibaud {\sc Duhautbout} \\ Rémy {\sc Huet}}
Rémy Huet's avatar
Rémy Huet committed
40
41
42
43
44
45
\institute[Picasoft]{Association Picasoft}
\date\today

\usetheme{AnnArbor}
\usecolortheme{crane}

46
47
\fvset{fontsize=\tiny,commandchars=\\\{\}}

Rémy Huet's avatar
Rémy Huet committed
48
49
50
51
52
53
54
55
56
57
\AtBeginSection[]
{
	\begin{frame}
		\tableofcontents[currentsection, hideothersubsections]
	\end{frame}
}

\begin{document}

\begin{frame}
58
	\titlepage
Rémy Huet's avatar
Rémy Huet committed
59
60
\end{frame}

61
62
63
\section{Introduction}

\begin{frame}{Pourquoi la gestion de version ?}
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Pour tout le monde :
\begin{itemize}
\item sauvegarde incrémentale du travail
\item suivi des modifications et retour en arrière
\item partage des modifications avec d'autres personnes
\end{itemize}

\medskip

Pour les développeurs :
\begin{itemize}
\item centralisation des sources
\item collaboration simplifiée
\item possibilité de maintenir plusieurs versions
78
\item ...
79
\end{itemize}
80
81
82
\end{frame}

\begin{frame}{Les différents logiciels de version}
83
84
85
86
87
88
89
90
91
92
93
94
95
96
\includegraphics[height=2cm]{./imgs/logo_git.png}
\hfill
\includegraphics[height=2cm]{./imgs/logo_svn.png}
\hfill
\includegraphics[height=2cm]{./imgs/logo_mercurial.png}

\bigskip

\centering
Et plein d'autres !

37 systèmes recensés sur Wikipedia

(\url{https://en.wikipedia.org/wiki/Comparison_of_version_control_software})
97
98
99
\end{frame}

\begin{frame}{Petite histoire de git\ldots}
Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
100
101
102
103
104
105
106
107
108
109
110
111

\begin{center}
\includegraphics[height=2cm]{./imgs/logo_git.png}
\end{center}

\begin{itemize}
\item Créé en 2005 par les développeurs du noyau Linux
\item Système de gestion de version distribué
\item Rapide
\item Possibilité de développements non-linéaires (branches)
\item Popularité grandissante chez les développeurs (GitHub, GitLab)
\end{itemize}
Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
112
113
114
115
116
117
118
119
120
121
122
123
124
\end{frame}

\begin{frame}
\begin{beamercolorbox}[sep=5pt,center,rounded=true,shadow=true]{orangebox}
\Large
\textsc{On passe à la partie pratique !}
\end{beamercolorbox}
\begin{center}
\includegraphics[height=3cm]{./imgs/warning.jpg}
\end{center}

\centering
Dans la suite, on considère que git est installé pour toutes les machines !
Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
125

Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
126
127
128
129
130
131
132
133
134
\medskip

\centering
En cas de problème, n'hésitez pas à demander de l'aide aux gentils animateurs munis d'une pancarte \enquote{HELP} :)

\begin{block}{}
\centering
On ouvre un terminal ou Git Bash !
\end{block}
135
136
137
138
139
140
\end{frame}

\section{Concepts de base}

\subsection{Configuration et initialisation}

Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
141
142
\begin{frame}[fragile]{Configuration de git et du repo}

143
144
145
146
147
148
149
150
Création d'un nouveau répertoire de travail
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-\seplength}
\begin{Verbatim}
$ mkdir formation_git
$ cd formation_git
\end{Verbatim}
\end{beamercolorbox}
Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
151

152
153
154
155
156
157
Configuration de l'identité de l'utilisateur :
\begin{itemize}
\item Permet d'identifier l'auteur des mises à jour \\
\item \verb+global+ : configuration au niveau du système \\
\item \verb+local+ : configuration au niveau du répertoire courant
\end{itemize}
Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
158

159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-\seplength}
\begin{Verbatim}
$ git config --global/local user.name "<prénom nom>"
$ git config --global/local user.email "<adresse email>"
\end{Verbatim}
\end{beamercolorbox}

Initialisation du repo git :
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-\seplength}
\begin{Verbatim}
$ git init
Dépôt Git vide initialisé dans /home/user/project/.git/
\end{Verbatim}
\end{beamercolorbox}
175
176
177

\end{frame}

178
\subsection{\'Etat du répertoire local}
179

180
181
182
183
\begin{frame}[fragile]{Voir l'état du répertoire local}
	\begin{block}{La commande}
		\verb+$ git status+
	\end{block}
Rémy Huet's avatar
Rémy Huet committed
184
	\begin{block}{Utilité}
185
		Permet de connaître à tout moment l'état d'un répertoire git :
Rémy Huet's avatar
Rémy Huet committed
186
187
188
189
190
191
192
193
194
195
196
		\begin{itemize}
			\item La branche sur laquelle on se situe
			\item La divergence avec un repo distant
			\item Les fichiers suivis ou non suivis
			\item Les fichiers modifiés depuis la dernière validation
			\item Les fichiers qui seront validés et ceux qui ne le seront pas.
		\end{itemize}
	\end{block}
	\begin{block}{En résumé}
		{\bf Le Saint Graal des commandes git !}
	\end{block}
197
198
\end{frame}

199
200
201
202
\begin{frame}[fragile]{\texttt{git status} à la loupe}
	Pour le moment...

	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
203
\vspace{-\seplength}
204
205
206
207
208
209
210
211
212
213
214
215
216
\begin{Verbatim}
$ git status
Sur la branche master

Aucun commit

rien à valider (créez/copiez des fichiers et utilisez "git add" pour les suivre)
\end{Verbatim}
	\end{beamercolorbox}

	On va créer un fichier !

	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
217
\vspace{-\seplength}
218
219
220
221
\begin{Verbatim}
$ echo "J'apprends à utiliser git" > formation.txt
\end{Verbatim}
\Pause
222
\vspace{-\seplength}
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
\begin{Verbatim}
$ git status
Sur la branche master

Aucun commit

Fichiers non suivis:
  (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)

	\textcolor{red}{formation.txt}

aucune modification ajoutée à la validation mais des fichiers non suivis sont présents
(utilisez "git add" pour les suivre)

\end{Verbatim}
\end{beamercolorbox}

\end{frame}

242
243
\subsection{Ajouter une version}

244
\begin{frame}{Un commit, c'est quoi ?}
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260

Pour faire court :
\begin{itemize}
\item Commit = Validation
\item Point de sauvegarde
\item Ensemble de \textbf{modifications} depuis le dernier commit
\end{itemize}

\bigskip

\`A quoi ça sert ?
\begin{itemize}
\item Les commits se suivent
\item Sauvegarde incrémentale
\item Possibilité de revenir à une version donnée
\end{itemize}
261
262
263
264
265
\end{frame}

\begin{frame}{Working Directory vs. Staging Area vs. Repository}
	\begin{block}{Repository}
		Le Repository correspond aux fichiers dans l'état de la dernière validation connue par git.
Rémy Huet's avatar
Rémy Huet committed
266
	\end{block}
267
268
269

	\begin{block}{Working Directory}
		Le Working Directory correspond à l'état actuel du répertoire git :
Rémy Huet's avatar
Rémy Huet committed
270
		\begin{itemize}
271
272
			\item nouveaux fichiers pas encore ajoutés au Repository (fichiers non suivis)
			\item fichiers modifiés depuis la dernière version
Rémy Huet's avatar
Rémy Huet committed
273
274
		\end{itemize}
	\end{block}
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289

	\begin{block}{Staging Area (ou Index)}
		Zone intermédiaire entre le Working Directory et le Repository.
		Elle contient les modifications apportées dans le Working Directory que git va ajouter au Repository.
	\end{block}

\end{frame}

\begin{frame}[fragile]{Ajouter des modifications pour validation}
	Ajouter les modifications d'un fichier pour validation : \\
	\verb+$ git add <fichier(s)>+

	\medskip

	Ajouter toutes les modifications pour validation (tous les fichiers) : \\
290
	\verb+$ git add -A+
291
292
293
294
295
296
297
298
299
300

	\medskip

	Enlever les modifications d'un fichier de la validation : \\
	\verb+$ git reset <fichier>+ \\
	{\it (ne change pas le contenu du fichier mais indique juste à git d'ignorer ses modifications pour la validation)}

	% faire une jolie image avec un rond Working Directory et Staging Area avec une flèche dans un sens "git add" et une flèche "git reset"
\end{frame}

301
302
303
\begin{frame}[fragile]
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-\seplength}
304
305
306
307
308
309
310
311
312
\begin{Verbatim}
$ git status
Sur la branche master
Aucun commit
Fichiers non suivis:

	\textcolor{red}{formation.txt}
\end{Verbatim}
\Pause
313
\vspace{-\seplength}
314
315
316
317
\begin{Verbatim}
$ git add formation.txt
\end{Verbatim}
\Pause
318
\vspace{-\seplength}
319
320
321
322
323
324
325
326
327
328
329
330
\begin{Verbatim}
$ git status
Sur la branche master

Aucun commit

Modifications qui seront validées :
  (utilisez "git rm --cached <fichier>..." pour désindexer)

	\textcolor{green}{nouveau fichier : formation.txt}
\end{Verbatim}
\Pause
331
\vspace{-\seplength}
332
333
334
335
\begin{Verbatim}
$ git reset formation.txt
\end{Verbatim}
\Pause
336
\vspace{-\seplength}
337
338
339
340
341
342
343
344
345
346
\begin{Verbatim}
$ git status
Sur la branche master
Aucun commit
Fichiers non suivis:

	\textcolor{red}{formation.txt}

$ git add formation.txt
\end{Verbatim}
347
\end{beamercolorbox}
348
349
\end{frame}

350
351
352
353
\begin{frame}[fragile]{Valider les modifications}

Valider les changements qui ont été ajoutés au staging area :\\
\verb+$ git commit+.
354

355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
\medskip

Le commit doit contenir un message. Pour l'entrer directement : \\
\verb+$ git commit -m "<message>"+ \\

\bigskip

\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-\seplength}
\begin{Verbatim}
$ git commit -m "Ajout du premier fichier"
[master (commit racine) 6b6799b] Ajout du premier fichier
 1 file changed, 1 insertion(+)
 create mode 100644 formation.txt
\end{Verbatim}
\end{beamercolorbox}
371
372


373
374
\end{frame}

375
\begin{frame}{Dissection d'un commit}
376
377
378
379
380
381
382
383
	\begin{block}{À propos du commit}
		\begin{itemize}
			\item Chaque commit possède un identifiant unique;
			\item Un commit est asocié à une unique personne;
			\item L'historique des commits est incrémental. Tout commit (excepté le premier) a un commit "père"
			\item Un commit correspond à une version figée du projet;
		\end{itemize}
	\end{block}
384
385
\end{frame}

386
387
\subsection{Voir l'historique}

388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
\begin{frame}[fragile]{git log}
	Afficher l'historique des commits
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
		\vspace{-\seplength}
		\begin{Verbatim}
			$ git log
			\textcolor{yellow}{commit 2487fdd243542146f15a8e6bb00a94a39117ea1b (}{\bf \textcolor{cyan}{HEAD -> }\textcolor{green}{master}} \textcolor{yellow}{)}
			Author: huetremy <remy.huet@etu.utc.fr>
			Date:   Mon Sep 24 09:54:14 2018 +0200

    				Ajout du premier fichier
		\end{Verbatim}
	\end{beamercolorbox}
	\Pause
	On peut voir ici : \Pause
	\begin{itemize}
		\item L'identifiant unique du commit \Pause
		\item L'auteur (et son mail) \Pause
		\item La date du commit \Pause
		\item Le message qui a été mis lors du commit
	\end{itemize}
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
\end{frame}

\begin{frame}{git diff}
\end{frame}

\section{Concepts avancés}

\subsection{Le HEAD}

\begin{frame}{Le HEAD}
\end{frame}

\subsection{Enregistrer les modifications locales}

\begin{frame}{git stash}
\end{frame}

\subsection{Changer de version}

\begin{frame}{git checkout}
\end{frame}

\subsection{Annuler les modifications sur un fichier précis}

\begin{frame}{git checkout -- file}
\end{frame}

\section{Les remotes}

\subsection{Principe et application avec Gitlab}

\begin{frame}{Gitlab}
	Création d'un repo
\end{frame}

\subsection{Récupérer les ajouts distants}

\begin{frame}{git clone -- git pull}
	cloner le repo de la présentation (en HTTPS)
\end{frame}

\subsection{Envoyer des modifications}

\begin{frame}{git push}
	Sur repo perso
\end{frame}

Rémy Huet's avatar
Rémy Huet committed
456
\end{document}