Commit 92b499cd authored by Thibaud Duhautbout's avatar Thibaud Duhautbout

Fin de la partie 2 - Versionner son travail

Merge branch 'versionner_travail'
parents 89f6067c 3eb7ba41
Pipeline #32828 passed with stage
in 18 seconds
\begin{frame}
\frametitle{Création d'un dépôt git}
\begin{frame}[fragile]{Configuration de git et du dépôt}
On commence par créer un nouveau répertoire de travail qu'on va suivre avec Git :
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-\seplength}
\begin{Verbatim}
$ mkdir git-example
$ cd git-example
\end{Verbatim}
\end{beamercolorbox}
\Pause
On initialise ensuite le dépôt Git dans ce répertoire :
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-\seplength}
\begin{Verbatim}
$ git init
Dépôt Git vide initialisé dans /home/user/git-example/.git
\end{Verbatim}
\end{beamercolorbox}
Cette commande crée un répertoire caché \verb+.git+ dans le dossier courant, qui contient toutes les informations nécessaires pour enregistrer les versions.
\begin{alertblock}{}
\centering
\textit{Le contenu de ce répertoire ne sera pas détaillé dans cette formation, ne pas le modifier à la main si vous ne savez pas ce que vous faites !}
\end{alertblock}
\Pause
\begin{block}{}
\centering
\`A partir de maintenant, Git prend en charge la gestion de version du répertoire courant.
\end{block}
\end{frame}
\begin{frame}
\frametitle{Configuration locale / configuration globale}
\begin{frame}[fragile]{Configurer son identité}
\begin{block}{}
\centering
\enquote{Comment Git sait qui fait quoi sur le projet ?}
\end{block}
\Pause
Il faut commencer par configurer son \textbf{identité}, qui sera associée à chaque mise à jour.
Elle est définie par un \textbf{nom} et une \textbf{adresse mail}.
\medskip
Il y a deux possibilités de configuration de l'identité avec Git :
\begin{itemize}
\item \emph{configuration globale}, associée à l'utilisateur et valable pour tous les projets Git de cet utilisateur
\item \emph{configuration locale}, utilisée uniquement dans le répertoire courant
\end{itemize}
\end{frame}
\begin{frame}[fragile]{Configurer son identité -- application}
En pratique, on utilise la commande \verb+git config+ avec une option pour préciser si on configure une identité locale ou globale :
\medskip
Pour une configuration globale :
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-\seplength}
\begin{Verbatim}
$ git config --global user.name "<prénom nom>"
$ git config --global user.email "<adresse email>"
\end{Verbatim}
\end{beamercolorbox}
\medskip
Pour une configuration locale :
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-\seplength}
\begin{Verbatim}
$ git config --local user.name "<prénom nom>"
$ git config --local user.email "<adresse email>"
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}
\begin{frame}[fragile]
\frametitle{Créer des versions}
\framesubtitle{Working Directory <-> Staging Area}
\begin{block}{}
\centering
Pour créer une version, il faut d'abord préarer le commit : les modifications apportées au \emph{working directory} sont ajoutées au \emph{staging area}.
\end{block}
\Pause
\bigskip
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)}
\end{frame}
\begin{frame}[fragile]{}
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-\seplength}
\begin{Verbatim}
$ echo "Je suis le premier fichier utilisé pour cette API sur git" > API.txt
$ git status
Sur la branche master
Aucun commit
Fichiers non suivis:
\textcolor{red}{API.txt}
\end{Verbatim}
\Pause
\vspace{-\seplength}
\begin{Verbatim}
$ git add API.txt
\end{Verbatim}
\Pause
\vspace{-\seplength}
\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 : API.txt}
\end{Verbatim}
\Pause
\vspace{-\seplength}
\begin{Verbatim}
$ git reset API.txt
\end{Verbatim}
\Pause
\vspace{-\seplength}
\begin{Verbatim}
$ git status
Sur la branche master
Aucun commit
Fichiers non suivis:
\textcolor{red}{API.txt}
$ git add API.txt
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}
\begin{frame}[fragile]
\frametitle{Créer des versions}
\framesubtitle{Staging Area <-> Repository}
\begin{block}{}
\centering
Une fois que la version est prête, on peut valider le commit pour envoyer la version du \emph{staging area} vers le \emph{repository}.
\end{block}
\bigskip
Pour valider les changements qui ont été ajoutés au staging area :\\
\verb+$ git commit+
\medskip
Le commit doit contenir un message qui résume le contenu des modifications.
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) 712951d] Ajout du premier fichier
1 file changed, 1 insertion(+)
create mode 100644 API.txt
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}
\frametitle{Dissection d'un commit}
\begin{frame}{Dissection d'un commit}
\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 \enquote{père} ;
\item Un commit correspond à une version figée du projet ;
\item On peut naviguer dans les commits.
\end{itemize}
\end{block}
\end{frame}
\begin{frame}
\begin{frame}[fragile]
\frametitle{Visualiser des différences}
\framesubtitle{Git log}
Afficher l'historique des commits
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-\seplength}
\begin{Verbatim}
$ git log
\textcolor{yellow}{commit 712951dbb3ee0cc4d248582dc5408da3afdec853 (}{\bf \textcolor{cyan}{HEAD -> }\textcolor{green}{master}} \textcolor{yellow}{)}
Author: Thibaud Duhautbout <thibaud@duhautbout.ovh>
Date: Thu Jan 3 15:37:54 2019 +0100
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}
\end{frame}
\begin{frame}
\begin{frame}[fragile]
\frametitle{Visualiser des différences}
\framesubtitle{Git diff}
Le diff permet de voir les modifications apportées au dépôt :
\begin{itemize}
\item Depuis l'état du staging area : \verb+$ git diff+;
\item Depuis le dernier commit : \verb+$ git diff HEAD+;
\item Depuis un commit quelconque : \verb+$ git diff <id_commit>+;
\item Entre deux commits quelconques : \verb+$ git diff <id_commit_départ> <id_commit_arrivée>+.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-\seplength}
\begin{Verbatim}
$ echo "J'ajoute une ligne à mon fichier" >> API.txt
$\Pause git diff
{\bf diff --git a/API.txt b/API.txt}
{\bf index 7eec119..5596950 100644}
{\bf --- a/API.txt}
{\bf +++ b/API.txt}
\textcolor{cyan}{@@ -1 +1,2 @@}
Je suis le premier fichier utilisé pour cette API sur git
\textcolor{myGreen}{+J'ajoute une ligne à mon fichier}
$\Pause git add API.txt
$\Pause git diff
$\Pause git diff HEAD
{\bf diff --git a/API.txt b/API.txt}
{\bf index 7eec119..5596950 100644}
{\bf --- a/API.txt}
{\bf +++ b/API.txt}
\textcolor{cyan}{@@ -1 +1,2 @@}
Je suis le premier fichier utilisé pour cette API sur git
\textcolor{myGreen}{+J'ajoute une ligne à mon fichier}
$\Pause git commit -m "Second commit"
[master 5b63bd1] Second commit
1 file changed, 1 insertion(+)
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}
\begin{frame}[fragile]
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-\seplength}
\begin{Verbatim}
$ git log
\textcolor{yellow}{commit 5b63bd1f9afe4685b60074030960e39bb5152e67 (}{\bf\textcolor{cyan}{HEAD ->}\textcolor{green}{ master}}\textcolor{yellow}{)}
Author: Thibaud Duhautbout <thibaud@duhautbout.ovh>
Date: Thu Jan 3 15:55:33 2019 +0100
Second commit
\textcolor{yellow}{commit 712951dbb3ee0cc4d248582dc5408da3afdec853}
Author: Thibaud Duhautbout <thibaud@duhautbout.ovh>
Date: Thu Jan 3 15:37:54 2019 +0100
Ajout du premier fichier
$\Pause git diff 712951 5b63bd
{\bf diff --git a/API.txt b/API.txt}
{\bf index 7eec119..5596950 100644}
{\bf --- a/API.txt}
{\bf +++ b/API.txt}
\textcolor{cyan}{@@ -1 +1,2 @@}
Je suis le premier fichier utilisé pour cette API sur git
\textcolor{myGreen}{+J'ajoute une ligne à mon fichier}
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}[fragile]
\frametitle{Visualiser des différences}
\framesubtitle{Git show}
Pour visualiser les modifications introduites par un commit spécifique :\\
\verb+$ git show <sha du commit>+
\bigskip
\begin{beamercolorbox}[rounded=true,shadow=true]{terminal}
\vspace{-\seplength}
\begin{Verbatim}
\textcolor{yellow}{commit 5b63bd1f9afe4685b60074030960e39bb5152e67 (}{\bf\textcolor{cyan}{HEAD ->}\textcolor{green}{ master}}\textcolor{yellow}{)}
Author: Thibaud Duhautbout <thibaud@duhautbout.ovh>
Date: Thu Jan 3 15:55:33 2019 +0100
Second commit
{\bf diff --git a/API.txt b/API.txt}
{\bf index 7eec119..5596950 100644}
{\bf --- a/API.txt}
{\bf +++ b/API.txt}
\textcolor{cyan}{@@ -1 +1,2 @@}
Je suis le premier fichier utilisé pour cette API sur git
\textcolor{myGreen}{+J'ajoute une ligne à mon fichier}
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}
\frametitle{Working Directory vs. Staging area vs. Repository}
\framesubtitle{Explications}
\begin{frame}{Fonctionnement de Git}
Les versions sont enregistrées par Git sous forme de \emph{commits}.
\begin{block}{Pour faire court}
Un commit est un \textbf{point de sauvegarde}
\end{block}
\bigskip
\`A quoi ça sert ?
\begin{itemize}
\item Les commits sont enregistrés les uns à la suite des autres;
\item Sauvegarde incrémentale des modifications;
\item Possibilité de revenir à une version donnée.
\end{itemize}
\bigskip
Git s'organise en trois espaces principaux qui enregistrent les différents états du travail (cf slide suivante).
\end{frame}
\begin{frame}
\frametitle{Working Directory vs. Staging area vs. Repository}
\framesubtitle{Schéma}
\end{frame}
\framesubtitle{Explications}
\begin{frame}
\frametitle{Fonctionnement de Git}
\begin{block}{Repository [dépôt]}
Le Repository (ou dépôt) correspond aux fichiers dans l'état de la dernière validation connue par git.
\end{block}
\begin{block}{Working Directory [répertoire de travail]}
Le Working Directory correspond à l'état actuel du répertoire git :
\begin{itemize}
\item nouveaux fichiers pas encore ajoutés (\emph{suivis}) au Repository ;
\item fichiers modifiés depuis la dernière version.
\end{itemize}
\end{block}
\begin{block}{Staging Area [zone de préparation / zone d'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}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment