Consignes plus claires pour les exercices pour une utilisation en l'absence de formateur
This commit is contained in:
parent
32ab048803
commit
0cc6b9bc0b
|
@ -1,25 +1,132 @@
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Inspection}
|
\frametitle{Inspection}
|
||||||
\framesubtitle{log}
|
\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}
|
\commande{git log}
|
||||||
% contenu (pas trop long) de la diapositive
|
% contenu (pas trop long) de la diapositive
|
||||||
\end{frame}
|
\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}
|
\begin{frame}
|
||||||
\frametitle{Inspection}
|
\frametitle{Inspection}
|
||||||
\framesubtitle{bisect}
|
\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
|
% contenu (pas trop long) de la diapositive
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Inspection}
|
\frametitle{Inspection}
|
||||||
\framesubtitle{blame}
|
\framesubtitle{blame}
|
||||||
Travail à faire sur la branche branche/minee
|
\begin{itemize}
|
||||||
|
\item \commande{git blame test.sh}
|
||||||
\commande{git blame}
|
\item \commande{git log -S"exit 1" test.sh}
|
||||||
% contenu (pas trop long) de la diapositive
|
\end{itemize}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,156 @@
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Travail collaboratif}
|
\frametitle{Travail collaboratif}
|
||||||
\framesubtitle{Nettoyage}
|
\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}
|
Le scénario proposé pour le nettoyage s'appuie sur la branche \emph{histoire/confuse}.
|
||||||
% contenu (pas trop long) de la diapositive
|
|
||||||
|
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}
|
\end{frame}
|
||||||
\begin{frame}
|
\begin{frame}
|
||||||
\frametitle{Travail collaboratif}
|
\frametitle{Travail collaboratif}
|
||||||
\framesubtitle{Nettoyage}
|
\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
|
% contenu (pas trop long) de la diapositive
|
||||||
\end{frame}
|
\end{frame}
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
\setbeamertemplate{background}
|
\setbeamertemplate{background}
|
||||||
{\skbinput[from=fig]{cadoles/gray_frame_background}}
|
{\skbinput[from=fig]{cadoles/gray_frame_background}}
|
||||||
|
|
||||||
\newcommand{\commande}[1]{\texttt{#1}}
|
\newcommand{\commande}[1]{\texttt{\scriptsize{#1}}}
|
||||||
|
|
||||||
\title[]{Formation Git}
|
\title[]{Formation Git}
|
||||||
\subtitle{Oberthur Cash Protection}
|
\subtitle{Oberthur Cash Protection}
|
||||||
|
|
Loading…
Reference in New Issue