presentation.tex 9.22 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
27
\newdateformat{nombres}{\THEDAY-\THEMONTH-\THEYEAR}

28
29
30
31
32
33
34
35
% 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
36
\title[Formation Git\_v1]{\today \\ Formation Picasoft : La gestion de version avec Git (niveau 1)}
Rémy Huet's avatar
Rémy Huet committed
37
\titlegraphic{\includegraphics[scale=.1]{picasoft_logo.png}}
Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
38
\author[T. Duhautbout - R. Huet]{Thibaud {\sc Duhautbout} \\ Rémy {\sc Huet}}
Rémy Huet's avatar
Rémy Huet committed
39
40
41
42
43
44
\institute[Picasoft]{Association Picasoft}
\date\today

\usetheme{AnnArbor}
\usecolortheme{crane}

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

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

\begin{document}

\begin{frame}
	\titlepage 
\end{frame}

60
61
62
\section{Introduction}

\begin{frame}{Pourquoi la gestion de version ?}
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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
77
\item ...
78
\end{itemize}
79
80
81
\end{frame}

\begin{frame}{Les différents logiciels de version}
82
83
84
85
86
87
88
89
90
91
92
93
94
95
\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})
96
97
98
\end{frame}

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

\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
111
112
113
114
115
116
117
118
119
120
121
122
123
\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
124

Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
125
126
127
128
129
130
131
132
133
\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}
134
135
136
137
138
139
\end{frame}

\section{Concepts de base}

\subsection{Configuration et initialisation}

Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
\begin{frame}[fragile]{Configuration de git et du repo}

\begin{block}{Création d'un nouveau répertoire de travail}
\verb+$ mkdir formation_git+ \\
\verb+$ cd formation_git+
\end{block}

\begin{block}{Configuration de l'identité de l'utilisateur}
Permet d'identifier l'auteur des mises à jour \\
\verb+$ git config --global/local user.name "<prénom nom>"+ \\
\verb+$ git config --global/local user.email "<adresse email>"+ \\
\verb+global+ : configuration au niveau du système \\
\verb+local+ : configuration au niveau du répertoire courant 
\end{block}

\begin{block}{Initialisation du repo git}
\verb+$ git init+
157
\verb+Dépôt Git vide initialisé dans /home/user/project/.git/+
Thibaud Duhautbout's avatar
Thibaud Duhautbout committed
158
\end{block}
159
160
161

\end{frame}

162
\subsection{\'Etat du répertoire local}
163

164
165
166
167
\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
168
	\begin{block}{Utilité}
169
		Permet de connaître à tout moment l'état d'un répertoire git :
Rémy Huet's avatar
Rémy Huet committed
170
171
172
173
174
175
176
177
178
179
180
		\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}
181
182
\end{frame}

183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
\begin{frame}[fragile]{\texttt{git status} à la loupe}
	Pour le moment...

	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\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}
\begin{Verbatim}
$ echo "J'apprends à utiliser git" > formation.txt
\end{Verbatim}
\Pause
\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}

223
224
\subsection{Ajouter une version}

225
226
227
228
229
230
231
\begin{frame}{Un commit, c'est quoi ?}
% Commencer par là peut-être ? Un commit c'est un ensemble de modifications par rapport à la version précédente ? Histoire de poser l'objectif avant la suite, sinon ça risque d'être flou le staging area
\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
232
	\end{block}
233
234
235

	\begin{block}{Working Directory}
		Le Working Directory correspond à l'état actuel du répertoire git :
Rémy Huet's avatar
Rémy Huet committed
236
		\begin{itemize}
237
238
			\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
239
240
		\end{itemize}
	\end{block}
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312

	\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) : \\
	\verb+$ git add -a+

	\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}

\begin{frame}[fragile]{Ajouter des modifications pour validation}
	\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\begin{Verbatim}
$ git status
Sur la branche master
Aucun commit
Fichiers non suivis:

	\textcolor{red}{formation.txt}
\end{Verbatim}
\Pause
\begin{Verbatim}
$ git add formation.txt
\end{Verbatim}
\Pause
\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
\begin{Verbatim}
$ git reset formation.txt
\end{Verbatim}
\Pause
\begin{Verbatim}
$ git status
Sur la branche master
Aucun commit
Fichiers non suivis:

	\textcolor{red}{formation.txt}

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

\begin{frame}[fragile]{Valider des modifications}

Rémy Huet's avatar
Rémy Huet committed
313
	\begin{block}{Valider le staging area}
314
315
316
317
318
319
320
		Valider les changements qui ont été ajoutés au staging area :\\
		\verb+$ git commit+.

		\medskip

		Le commit doit contenir un message. Pour l'entrer directement : \\
		 \verb+$ git commit -m "<message>"+ \\
Rémy Huet's avatar
Rémy Huet committed
321
	\end{block}
322
323
\end{frame}

324
325
326
327
\begin{frame}{Dissection d'un commit}
		Chaque commit possède un identifiant unique.
\end{frame}

328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
\subsection{Voir l'historique}

\begin{frame}{git log}
\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
378
\end{document}