Consignes plus claires pour les exercices pour une utilisation en l'absence de formateur

This commit is contained in:
Benjamin Bohard 2015-07-20 17:53:41 +02:00
parent 32ab048803
commit 0cc6b9bc0b
3 changed files with 261 additions and 14 deletions

View File

@ -1,25 +1,132 @@
\begin{frame}
\frametitle{Inspection}
\framesubtitle{log}
Comparer les branches en explorant les différentes options de git log
Comparer les branches du dépôt \emph{exercices} en explorant les différentes options de git log (--graph, --all, --decorate, .., ...)
\commande{git log}
% contenu (pas trop long) de la diapositive
\end{frame}
\begin{frame}
\frametitle{Inspection}
\framesubtitle{log}
\begin{tikzpicture}
\begin{pgflowlevelscope}{\pgftransformscale{0.5}}
\gitDAG[grow right sep=1em]{
fcacc8a -- a3a980c -- {6d7f839 -- {d221665 -- 841f693 -- f5965df -- a12f94b -- 5464ee7, fe0c2b7 -- 6212e29 -- 0f13577 -- a60f3ed, f81ca5c, 7e54de0},
30a5821, b13bcf2, 902ae87}
};
\gitbranch
{master}
{above=of 6d7f839}
{6d7f839}
\gitbranch
{brancheindiscrete}
{right=of 902ae87}
{902ae87}
\gitbranch
{merge/conflit}
{right=of 30a5821}
{30a5821}
\gitbranch
{merge/automatique}
{right=of b13bcf2}
{b13bcf2}
\gitbranch
{merge/rebase}
{right=of 7e54de0}
{7e54de0}
\gitbranch
{branche/perdue}
{right=of f81ca5c}
{f81ca5c}
\gitbranch
{branche/minee}
{above=of 5464ee7}
{5464ee7}
\gitbranch
{histoire/confuse}
{right=of a60f3ed}
{a60f3ed}
\end{pgflowlevelscope}
\end{tikzpicture}
\end{frame}
\begin{frame}
\frametitle{Inspection}
\framesubtitle{bisect}
Travail à faire sur la branche branche/minee
\begin{minipage}{\textwidth}
\begin{tikzpicture}
%\begin{pgflowlevelscope}{\pgftransformscale{0.5}}
\begin{pgflowlevel}{\pgftransformscale{0.6}}
\gitDAG[grow right sep=1em]{
fcacc8a -- a3a980c -- {6d7f839 -- {d221665 -- 841f693 -- f5965df -- a12f94b -- 5464ee7}}
};
\gitbranch
{master}
{above=of 6d7f839}
{6d7f839}
\gitbranch
{branche/minee}
{above=of 5464ee7}
{5464ee7}
%\end{pgflowlevelscope}
\end{pgflowlevel}
\end{tikzpicture}
\end{minipage}
\commande{git bisect}
La branche minee schématise une situation dans laquelle un dysfonctionnement a été introduit mais pas détecté
aussitôt.
Un script \emph{test.sh} a été ajouté pour simuler le test du code.
Il retourne \emph{0} lorsque le code est bon, \emph{1} lorsque le code est mauvais.
L'exercice consiste donc à utiliser la commande \commande{git bisect} pour repérer le commit ayant introduit l'erreur, c'est-à-dire à partir duquel le script retourne \emph{1}.
\end{frame}
\begin{frame}
\frametitle{Inspection}
\framesubtitle{bisect}
Conditions de départ :
\begin{itemize}
\item dernier \emph{commit} de la branche \emph{branche/minee}
\item dernier état du code fonctionnel : dernier \emph{commit} de la branche \emph{master}.
\end{itemize}
\begin{enumerate}[<+->]
\item \commande{git checkout branche/minee}
\item \commande{git bisect start} \# démarrage de la session de recherche
\item \commande{git bisect bad} \# déclaration de l'état du dernier \emph{commit}
\item \commande{git bisect good \$(git log --oneline -1 --format=\%h master)} \# déclaration du dernier état fonctionnel connu
\end{enumerate}
% contenu (pas trop long) de la diapositive
\end{frame}
\begin{frame}
\frametitle{Inspection}
\framesubtitle{bisect}
À chaque déplacement contrôlé par \commande{git bisect}, exécuter \emph{test.sh} et indiquer si l'état est fonctionnel :
\commande{./test.sh; [[ \$? -eq 0 ]] \&\& git bisect good || git bisect bad}
\end{frame}
\begin{frame}
\frametitle{Inspection}
\framesubtitle{bisect}
\commande{a12f94b62f617417f4b1f8c5317bc2f033c92f5a is the first bad commit}
Terminer la session de recherche :
\commande{git bisect reset}
\end{frame}
\begin{frame}
\frametitle{Inspection}
\framesubtitle{blame}
La conclusion précédente, vu la simplicité du code en cause, aurait pu être tirée grâce à \commande{git blame} et \commande{git log}.
% contenu (pas trop long) de la diapositive
\end{frame}
\begin{frame}
\frametitle{Inspection}
\framesubtitle{blame}
Travail à faire sur la branche branche/minee
\commande{git blame}
% contenu (pas trop long) de la diapositive
\begin{itemize}
\item \commande{git blame test.sh}
\item \commande{git log -S"exit 1" test.sh}
\end{itemize}
\end{frame}

View File

@ -1,16 +1,156 @@
\begin{frame}
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
Travail à faire sur la branche histoire/confuse
\begin{minipage}{\textwidth}
\begin{tikzpicture}
%\begin{pgflowlevelscope}{\pgftransformscale{0.5}}
\begin{pgflowlevel}{\pgftransformscale{0.6}}
\gitDAG[grow right sep=1em]{
fcacc8a -- a3a980c -- {6d7f839 -- {fe0c2b7 -- 6212e29 -- 0f13577 -- a60f3ed}}
};
\gitbranch
{master}
{above=of 6d7f839}
{6d7f839}
\gitbranch
{histoire/confuse}
{above=of a60f3ed}
{a60f3ed}
%\end{pgflowlevelscope}
\end{pgflowlevel}
\end{tikzpicture}
\end{minipage}
\commande{git rebase -i}
% contenu (pas trop long) de la diapositive
Le scénario proposé pour le nettoyage s'appuie sur la branche \emph{histoire/confuse}.
Les \emph{commit} n'y sont pas cohérents : mélange de corrections syntaxiques, orthographiques et grammaticales.
Le but est de redonner de la lisibilité à l'historique du dépôt en le réécrivant à l'aide de \commande{git rebase -i} et \commande{git add -i}.
\end{frame}
\begin{frame}
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
Travail à faire sur la branche branche/indiscrete
\begin{enumerate}[<+->]
\item \commande{git checkout histoire/confuse}
\item \commande{git show master..} \# aperçu des modifications à réorganiser
\item \commande{git rebase -i \$(git merge-base --fork-point master)} \# rebase de tous les commits depuis la divergence avec la branche \emph{master}
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
À l'origine :
\begin{minted}[fontsize=\tiny]{console}
pick fe0c2b7 Commit un peu rapide.
pick 6212e29 Premier commit de correction
pick 0f13577 Deuxième commit de correction
pick a60f3ed Troisième et dernier (on espère) commit de correction
\end{minted}
Ce qu'on veut faire :
\begin{itemize}
\item un \emph{commit} pour les espaces superflues (0f13577 et 6212e29)
\item un \emph{commit} pour l'orthographe et la grammaire (0f13577, a60f3ed et 6212e29)
\item un \emph{commit} pour le contresens
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
\begin{enumerate}[<+->]
\item s'arrêter sur le \emph{commit} 6212e29 et répartir les modifications sur trois \emph{commit}
\item s'arrèter sur le \emph{commit} 0f13577 et répartir les modifications sur deux \emph{commit}
\item reformuler le message du \emph{commit} a60f3ed
\end{enumerate}
\begin{minted}[fontsize=\tiny]{console}
pick fe0c2b7 Commit un peu rapide.
e 6212e29 Premier commit de correction
e 0f13577 Deuxième commit de correction
r a60f3ed Troisième et dernier (on espère) commit de correction
\end{minted}
\end{frame}
\begin{frame}[fragile]
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
Pour chaque \emph{commit} édité :
\begin{enumerate}[<+->]
\item \commande{git reset HEAD\~{}1}
\item \commande{git add -i}
\item \commande{patch} et sélection du fichier à éditer
\item validation, refus ou édition du fragment de patch
\item sortie du mode patch
\item \commande{git add doc/README} suivi de \commande{git commit}
\item si il n'y a plus de modifications, \commande{git rebase --continue}, sinon, retour à l'étape 2
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
\begin{minted}[fontsize=\tiny]{console}
f500056 Corrections orthographiques et grammaticales
a11256a Suppression des espaces superflues
1a03003 Corrections orthographiques et grammaticales
f48a802 Corrections orthographiques et grammaticales
9ed1adb Suppression des espaces superflues
7236369 Correction du contresens
fe0c2b7 Commit un peu rapide.
\end{minted}
\end{frame}
\begin{frame}[fragile]
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
Prêt pour la seconde passe.
\begin{minted}[fontsize=\tiny]{console}
pick fe0c2b7 Commit un peu rapide.
pick 7236369 Correction du contresens
pick 9ed1adb Suppression des espaces superflues
s a11256a Suppression des espaces superflues
pick f48a802 Corrections orthographiques et grammaticales
s 1a03003 Corrections orthographiques et grammaticales
s f500056 Corrections orthographiques et grammaticales
\end{minted}
\end{frame}
\begin{frame}[fragile]
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
Prêt pour la seconde passe.
\begin{minted}[fontsize=\tiny]{console}
f7caf4b Corrections orthographiques et grammaticales
cdcf39e Suppression des espaces superflues
7236369 Correction du contresens
fe0c2b7 Commit un peu rapide.
\end{minted}
\end{frame}
\begin{frame}
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
Évidemment, dans la situation décrite, peu de modifications mais imbriquées, un résultat équivalent mais plus rapidement obtenu avec :
\begin{enumerate}[<+->]
\item \commande{git reset \$(git merge-base --fork-point master)}
\item \commande{git add -i}
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Travail collaboratif}
\framesubtitle{Nettoyage}
\begin{minipage}{\textwidth}
\begin{tikzpicture}
%\begin{pgflowlevelscope}{\pgftransformscale{0.5}}
\begin{pgflowlevel}{\pgftransformscale{0.6}}
\gitDAG[grow right sep=1em]{
fcacc8a -- a3a980c -- {902ae87}
};
\gitbranch
{brancheindiscrete}
{above=of 902ae87}
{902ae87}
%\end{pgflowlevelscope}
\end{pgflowlevel}
\end{tikzpicture}
\end{minipage}
\commande{git filter-branch}
Il ne reste plus qu'à purger les \emph{commit} de tous les fichiers embarrassants, ajoutés par inadvertance.
\begin{enumerate}[<+->]
\item \commande{git checkout branche\_indiscrete}
\item \commande{git filter-branch --tree-filter "git rm password" master..}
\end{enumerate}
% contenu (pas trop long) de la diapositive
\end{frame}

View File

@ -58,7 +58,7 @@
\setbeamertemplate{background}
{\skbinput[from=fig]{cadoles/gray_frame_background}}
\newcommand{\commande}[1]{\texttt{#1}}
\newcommand{\commande}[1]{\texttt{\scriptsize{#1}}}
\title[]{Formation Git}
\subtitle{Oberthur Cash Protection}