From 0cc6b9bc0b41a2d1d46ac28311f2254c43315989 Mon Sep 17 00:00:00 2001 From: Benjamin Bohard Date: Mon, 20 Jul 2015 17:53:41 +0200 Subject: [PATCH] Consignes plus claires pour les exercices pour une utilisation en l'absence de formateur --- .../scm/git/exercices/exercice_07/steps.tex | 123 +++++++++++++- .../scm/git/exercices/exercice_08/steps.tex | 150 +++++++++++++++++- presentations/outils/git/formation_git.tex | 2 +- 3 files changed, 261 insertions(+), 14 deletions(-) diff --git a/content/outils/scm/git/exercices/exercice_07/steps.tex b/content/outils/scm/git/exercices/exercice_07/steps.tex index ebbc783..92258be 100644 --- a/content/outils/scm/git/exercices/exercice_07/steps.tex +++ b/content/outils/scm/git/exercices/exercice_07/steps.tex @@ -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} - diff --git a/content/outils/scm/git/exercices/exercice_08/steps.tex b/content/outils/scm/git/exercices/exercice_08/steps.tex index 6367274..2f12a42 100644 --- a/content/outils/scm/git/exercices/exercice_08/steps.tex +++ b/content/outils/scm/git/exercices/exercice_08/steps.tex @@ -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} diff --git a/presentations/outils/git/formation_git.tex b/presentations/outils/git/formation_git.tex index 94ac6bf..8a564e0 100644 --- a/presentations/outils/git/formation_git.tex +++ b/presentations/outils/git/formation_git.tex @@ -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}