From 6ef3a883fa52c49ffe5a8e05dcd910860c3e8795 Mon Sep 17 00:00:00 2001 From: Philippe Dosch <Philippe.Dosch@loria.fr> Date: Sun, 5 Jan 2014 21:40:02 +0100 Subject: [PATCH] Branch part now splited into 3 files --- brancheintro.tex | 191 ++++++++++++++++++++ branchreco.tex | 38 ++++ branchusecase.tex | 221 +++++++++++++++++++++++ gitbranch.tex | 447 +--------------------------------------------- 4 files changed, 455 insertions(+), 442 deletions(-) create mode 100644 brancheintro.tex create mode 100644 branchreco.tex create mode 100644 branchusecase.tex diff --git a/brancheintro.tex b/brancheintro.tex new file mode 100644 index 0000000..59247b7 --- /dev/null +++ b/brancheintro.tex @@ -0,0 +1,191 @@ +%====================================================================== + +\section{Les branches} + +%====================================================================== + +\subsection{Présentation} + +%====================================================================== + +\frame{\frametitle{Introduction} + \begin{itemize} + \item + La manipulation des branches est certainement une des + fonctionnalités les plus puissantes sous git + \item + Elle est particulièrement simple et rapide par rapport aux autres + VCS, où les branches sont généralement difficiles à gérer + \item + Sous git, la création d'une branche est un processus léger, ce qui + encourage son utilisation + \item + Une \emph{branche} représente une partie de l'arborescence + créée par les différents commits contenus dans un dépôt + \end{itemize} +} + +%====================================================================== + +\frame{\frametitle{Représentation arborescente} + \begin{itemize} + \item + Chaque commit créé possède au moins un père : le commit dont il + est issu + \item + Il existe ainsi une filiation entre les différents commits d'un + dépôt, représentée sous forme d'arbre + \end{itemize} + \begin{center} + \includegraphics[scale=.4]{arbre.eps} + \end{center} +} + +%====================================================================== + +\frame{\frametitle{Branche \ext{master}} + \begin{itemize} + \item + Rappel : la création d'un dépôt git entraîne automatiquement la + création d'une branche par défaut, appelée \ex{master} + \item + Techniquement, cette branche correspond à une variable \ex{master} + pointant toujours vers le dernier commit réalisé + \end{itemize} + \begin{center} + \includegraphics[scale=.4]{arbremaster.eps} + \end{center} +} + +%====================================================================== + +\subsection{Création de nouvelles branches} + +%====================================================================== + +\frame{\frametitle{Intérêt de nouvelles branches} + \begin{itemize} + \item + Il est possible de créer de nouvelles branches pour faire évoluer, + \textit{simultanément}, le développement dans des directions + différentes + \begin{itemize} + \item + développement collaboratif (= plusieurs développeurs) + \item + correction de bugs + \item + ajout de fonctionnalités + \item + etc. + \end{itemize} + \item + Un moyen simple de savoir sur quelle branche on se trouve\\ + \mygit{git branch}{gitbranch1.txt} + \item + Le symbole \ex{*} désigne la branche courante (utile lorsque + plusieurs branches existent) + \end{itemize} +} + +%====================================================================== + +\frame{\frametitle{Création d'une nouvelle branche} + \begin{itemize} + \item + Pour créer une nouvelle branche, ajouter un nom de branche à la + commande précédente\\ + \mygitplus{git branch nouveau}\\ + \mygit{git branch}{gitbranch2.txt} + \item + Cette commande ne fait que créer une nouvelle branche, elle ne + permet pas de basculer vers cette nouvelle branche + \end{itemize} +} + +%====================================================================== + +\frame{\frametitle{Création d'une nouvelle branche} + \begin{itemize} + \item + La création d'une nouvelle branche entraîne la création d'une + nouvelle variable représentant cette branche + \end{itemize} + \begin{center} + \includegraphics[scale=.4]{arbremasternouv.eps} + \end{center} +} + +%====================================================================== + + +\frame{\frametitle{Le pointeur \ext{HEAD}} + \begin{itemize} + \item + Pour savoir dans quelle branche le dépôt se situe, git utilise un + pointeur spécial appelé \ex{HEAD} + \item + Cette variable pointe toujours vers (le dernier commit de) la + branche courante + \end{itemize} + \begin{center} + \includegraphics[scale=.4]{arbrehead.eps} + \end{center} +} + +%====================================================================== + +\frame{\frametitle{Passage d'une branche à une autre} + \begin{itemize} + \item + La commande permettant de changer de branche est \ex{git checkout + \emph{branche}}, soit dans l'exemple courant\\ + \mygitplus{git checkout nouveau}\\ + \mygit{git branch}{gitbranch3.txt} + \end{itemize} + \begin{center} + \includegraphics[scale=.4]{arbrehead2.eps} + \end{center} +} + +%====================================================================== + +\frame{\frametitle{Passage d'une branche à une autre} + \begin{itemize} + \item + Lors du passage d'une branche à une autre, git restaure le + répertoire de travail dans l'état correspondant à la branche + sélectionnée (uniquement pour les fichiers suivis par git) + \item + Attention : on ne peut pas changer de branche s'il reste + des modifications en attente dans le répertoire de travail + \item + Pour créer une branche tout en s'y déplaçant\\ + \mygit{git branch}{gitbranch1.txt} + \mygitplus{git checkout -b nouveau}\\ + \mygit{git branch}{gitbranch3.txt} + \end{itemize} +} + +%====================================================================== + +\frame{\frametitle{Introduction} + \begin{itemize} + \item + + \end{itemize} +} + +%====================================================================== + +\subsection{Fusion de branches} + +%====================================================================== + +\frame{\frametitle{Fusion de branches} + \begin{itemize} + \item + Les commandes \ex{merge} et \ex{rebase} + \end{itemize} +} + diff --git a/branchreco.tex b/branchreco.tex new file mode 100644 index 0000000..558c6f2 --- /dev/null +++ b/branchreco.tex @@ -0,0 +1,38 @@ +%====================================================================== + +\section{Recommandations} + +%====================================================================== + +\frame{\frametitle{} + \begin{itemize} + \item + + \end{itemize} +} + +%====================================================================== + +\section{Travail collaboratif} + +%====================================================================== + +\frame{\frametitle{Introduction} + \begin{itemize} + \item + Le travail de plusieurs personnes sur un même projet fait + automatiquement appel à de la gestion de branches + \item + Chaque personne travaille en effet sur une branche de son propre + dépôt + \item + La réconciliation du travail de ces différentes personnes se fait + en fusionnant les branches correspondantes + \item + Plusieurs stratégies peuvent alors être mises en place pour + effectuer cette fusion + \end{itemize} +} + +%====================================================================== + diff --git a/branchusecase.tex b/branchusecase.tex new file mode 100644 index 0000000..9621695 --- /dev/null +++ b/branchusecase.tex @@ -0,0 +1,221 @@ +%====================================================================== + +\section{Stratégies d'utilisation} + +%====================================================================== + +\frame{\frametitle{Introduction} + \begin{itemize} + \item + Afin de bien comprendre les particularités des différentes + stratégies liées aux branches + \begin{enumerate} + \item + on part d'une situation initiale correspondant à un dépôt + contenant uniquement une branche master avec 3 commits + \item + on simule un travail, correspondant à l'ajout d'une nouvelle + fonctionnalité tout en corrigeant un bug + \item + on applique une des 5 stratégies présentées + \item + on présente le résultat obtenu + \end{enumerate} + \item + Toutes les stratégies sont techniquement correctes + \item + Les résultats obtenus varient naturellement en fonction de la + stratégie appliquée + \end{itemize} +} + +%====================================================================== + +\frame{\frametitle{Introduction} + \framesubtitle{Détail de la simulation} + \begin{itemize} + \item + On crée une nouvelle branche \ex{nouvfonc} correspondant à l'ajout + d'une nouvelle fonctionnalité dans laquelle on ajoute 2 commits + \item + On revient parallèlement dans la branche \ex{master} pour y faire + une correction de bug + \item + On souhaite ensuite fusionner \ex{nouvfonc} dans \ex{master} et + supprimer ensuite la branche \ex{nouvfonc} + \end{itemize} + + \textbf{\huge Important} + \begin{itemize} + \item + Insérer ici une image de la situation de départ + \item + Reprendre les images de chaque stratégie et encercler en rouge les + 2 commits de la nouvelle fonctionnalité + \end{itemize} +} + +%====================================================================== + + +\frame{\frametitle{Introduction} + \framesubtitle{Détail des stratégies étudiées} + \begin{enumerate} + \item + \ex{checkout master, rebase nouvfonc, delete branch nouvfonc} + \item + \ex{checkout master, merge nouvfonc, delete branch nouvfonc} + \item + \ex{checkout nouvfonc, rebase master, checkout master, merge + nouvfonc, delete branch nouvfonc} + \item + \ex{checkout nouvfonc, rebase master, checkout master, merge + -{}-no-ff nouvfonc, delete branch nouvfonc} + \item + \ex{checkout master, merge nouvfonc -{}-no-ff, delete branch + nouvfonc} + \end{enumerate} +} + +%====================================================================== + +\newcommand{\branchstrategie}[4]{ +\frame{\frametitle{#1} + \begin{tabular}{lp{3cm}} + \begin{minipage}[b]{.5\linewidth} + {\small + #2 + } + \end{minipage} + & + \centerline{\includegraphics[scale=.5]{#3}} + \end{tabular} + #4 +}} + +%====================================================================== + +\branchstrategie{Stratégie 1} +{ + \ex{git checkout master}\\ + \ex{git rebase nouvfonc}\\ + \ex{git branch -d nouvfonc} +} +{strat1.png} +{ + \begin{itemize} + \item + Tout est linéaire, le commit de la branche dont on est parti étant + en dernier + \item + On ne voit pas bien les commits correspondant à la + nouvelle fonctionnalité + \end{itemize} +} + +%====================================================================== + +\branchstrategie{Stratégie 2} +{ + \ex{git checkout master}\\ + \ex{git merge nouvfonc}\\ + \ex{git branch -d nouvfonc} +} +{strat2.png} +{ + \begin{itemize} + \item + Le commit du changement de titre paraît à part, ce qui n'est pas + encore trop gênant + \item + On a l'impression que les premiers commits sont sur la même lancée + que la branche de nouvelle fonctionnalité, ce qui induit en erreur + : ce n'est pas clair + \end{itemize} +} + +%====================================================================== + +\branchstrategie{Stratégie 3} +{ + \ex{git checkout nouvfonc}\\ + \ex{git rebase master}\\ + \ex{git checkout master}\\ + \ex{git merge nouvfonc}\\ + \ex{git branch -d nouvfonc} +} +{strat3.png} +{ + \begin{itemize} + \item + Tout est linéaire, le commit de la branche dont on est parti étant + en dernier + \item + On ne voit pas bien les commits correspondant à la nouvelle + fonctionnalité (idem stratégie 1 donc) + \end{itemize} +} + +%====================================================================== + +\branchstrategie{Stratégie 4} +{ + \ex{git checkout nouvfonc}\\ + \ex{git rebase master}\\ + \ex{git checkout master}\\ + \ex{git merge -{}-no-ff nouvfonc}\\ + \ex{git branch -d nouvfonc} +} +{strat4.png} +{ + \begin{itemize} + \item + Les deux commits correspondant à la nouvelle fonctionnalité + apparaissent clairement. + \item + C'est le schéma le plus lisible. + \end{itemize} +} + +%====================================================================== + +\branchstrategie{Stratégie 5} +{ + \ex{git checkout master}\\ + \ex{git merge nouvfonc -{}-no-ff}\\ + \ex{git branch -d nouvfonc} +} +{strat5.png} +{ + \begin{itemize} + \item + Idem à la stratégie 2, ce n'est pas le ff qui s'est fait dans ce + cas. + \end{itemize} +} + +%====================================================================== + +% \frame{\frametitle{Stratégie 1} +% \begin{tabular}{lp{3cm}} +% \begin{minipage}[b]{.5\linewidth} +% {\small +% \ex{git checkout master}\\ +% \ex{git rebase nouvfonc}\\ +% \ex{git branch -d nouvfonc} +% } +% \end{minipage} +% & +% \centerline{\includegraphics[scale=.5]{strat1.png}} +% \end{tabular} + +% \begin{itemize} +% \item +% Tout est linéaire, le commit de la branche dont on est parti étant +% en dernier +% \item +% On ne voit pas bien les commits correspondant à la +% nouvelle fonctionnalité +% \end{itemize} +% } + diff --git a/gitbranch.tex b/gitbranch.tex index 9526a28..458c09c 100644 --- a/gitbranch.tex +++ b/gitbranch.tex @@ -1,9 +1,8 @@ \documentclass{IutSlideBeamerNew} \title{Git} -\subtitle{Principes et utilisation pour les projets tuteurés\\ -(et les autres projets...)} -\date{5 septembre 2013} +\subtitle{Gestion des branches} +\date{6 janvier 2014} \AtBeginSubsection[] { @@ -33,444 +32,8 @@ %====================================================================== -\section{Les branches} - -%====================================================================== - -\subsection{Présentation} - -%====================================================================== - -\frame{\frametitle{Introduction} - \begin{itemize} - \item - La manipulation des branches est certainement une des - fonctionnalités les plus puissantes sous git - \item - Elle est particulièrement simple et rapide par rapport aux autres - VCS, où les branches sont généralement difficiles à gérer - \item - Sous git, la création d'une branche est un processus léger, ce qui - encourage son utilisation - \item - Une \emph{branche} représente une partie de l'arborescence - créée par les différents commits contenus dans un dépôt - \end{itemize} -} - -%====================================================================== - -\frame{\frametitle{Représentation arborescente} - \begin{itemize} - \item - Chaque commit créé possède au moins un père : le commit dont il - est issu - \item - Il existe ainsi une filiation entre les différents commits d'un - dépôt, représentée sous forme d'arbre - \end{itemize} - \begin{center} - \includegraphics[scale=.4]{arbre.eps} - \end{center} -} - -%====================================================================== - -\frame{\frametitle{Branche \ext{master}} - \begin{itemize} - \item - Rappel : la création d'un dépôt git entraîne automatiquement la - création d'une branche par défaut, appelée \ex{master} - \item - Techniquement, cette branche correspond à une variable \ex{master} - pointant toujours vers le dernier commit réalisé - \end{itemize} - \begin{center} - \includegraphics[scale=.4]{arbremaster.eps} - \end{center} -} - -%====================================================================== - -\frame{\frametitle{Intérêt de nouvelles branches} - \begin{itemize} - \item - Il est possible de créer de nouvelles branches pour faire évoluer, - \textit{simultanément}, le développement dans des directions - différentes - \begin{itemize} - \item - développement collaboratif (= plusieurs développeurs) - \item - correction de bugs - \item - ajout de fonctionnalités - \item - etc. - \end{itemize} - \item - Un moyen simple de savoir sur quelle branche on se trouve\\ - \mygit{git branch}{gitbranch1.txt} - \item - Le symbole \ex{*} désigne la branche courante (utile lorsque - plusieurs branches existent) - \end{itemize} -} - -%====================================================================== - -\frame{\frametitle{Création d'une nouvelle branche} - \begin{itemize} - \item - Pour créer une nouvelle branche, ajouter un nom de branche à la - commande précédente\\ - \mygitplus{git branch nouveau}\\ - \mygit{git branch}{gitbranch2.txt} - \item - Cette commande ne fait que créer une nouvelle branche, elle ne - permet pas de basculer vers cette nouvelle branche - \end{itemize} -} - -%====================================================================== - -\frame{\frametitle{Création d'une nouvelle branche} - \begin{itemize} - \item - La création d'une nouvelle branche entraîne la création d'une - nouvelle variable représentant cette branche - \end{itemize} - \begin{center} - \includegraphics[scale=.4]{arbremasternouv.eps} - \end{center} -} - -%====================================================================== - - -\frame{\frametitle{Le pointeur \ext{HEAD}} - \begin{itemize} - \item - Pour savoir dans quelle branche le dépôt se situe, git utilise un - pointeur spécial appelé \ex{HEAD} - \item - Cette variable pointe toujours vers (le dernier commit de) la - branche courante - \end{itemize} - \begin{center} - \includegraphics[scale=.4]{arbrehead.eps} - \end{center} -} - -%====================================================================== - -\frame{\frametitle{Passage d'une branche à une autre} - \begin{itemize} - \item - La commande permettant de changer de branche est \ex{git checkout - \emph{branche}}, soit dans l'exemple courant\\ - \mygitplus{git checkout nouveau}\\ - \mygit{git branch}{gitbranch3.txt} - \end{itemize} - \begin{center} - \includegraphics[scale=.4]{arbrehead2.eps} - \end{center} -} - -%====================================================================== - -\frame{\frametitle{Passage d'une branche à une autre} - \begin{itemize} - \item - Lors du passage d'une branche à une autre, git restaure le - répertoire de travail dans l'état correspondant à la branche - sélectionnée (uniquement pour les fichiers suivis par git) - \item - Attention : on ne peut pas changer de branche s'il reste - des modifications en attente dans le répertoire de travail - \item - Pour créer une branche tout en s'y déplaçant\\ - \mygit{git branch}{gitbranch1.txt} - \mygitplus{git checkout -b nouveau}\\ - \mygit{git branch}{gitbranch3.txt} - \end{itemize} -} - -%====================================================================== - -\frame{\frametitle{Introduction} - \begin{itemize} - \item - - \end{itemize} -} - -%====================================================================== - -\frame{\frametitle{Fusion de branches} - \begin{itemize} - \item - Les commandes \ex{merge} et \ex{rebase} - \end{itemize} -} - -%====================================================================== - -\subsection{Exemples d'utilisation} - -%====================================================================== - -\frame{\frametitle{Introduction} - \begin{itemize} - \item - Afin de bien comprendre les particularités des différentes - stratégies liées aux branches - \begin{enumerate} - \item - on part d'une situation initiale correspondant à un dépôt - contenant uniquement une branche master avec 3 commits - \item - on simule un travail, correspondant à l'ajout d'une nouvelle - fonctionnalité tout en corrigeant un bug - \item - on applique une des 5 stratégies présentées - \item - on présente le résultat obtenu - \end{enumerate} - \item - Toutes les stratégies sont techniquement correctes - \item - Les résultats obtenus varient naturellement en fonction de la - stratégie appliquée - \end{itemize} -} - -%====================================================================== - -\frame{\frametitle{Introduction} - \framesubtitle{Détail de la simulation} - \begin{itemize} - \item - On crée une nouvelle branche \ex{nouvfonc} correspondant à l'ajout - d'une nouvelle fonctionnalité dans laquelle on ajoute 2 commits - \item - On revient parallèlement dans la branche \ex{master} pour y faire - une correction de bug - \item - On souhaite ensuite fusionner \ex{nouvfonc} dans \ex{master} et - supprimer ensuite la branche \ex{nouvfonc} - \end{itemize} - - \textbf{\huge Important} - \begin{itemize} - \item - Insérer ici une image de la situation de départ - \item - Reprendre les images de chaque stratégie et encercler en rouge les - 2 commits de la nouvelle fonctionnalité - \end{itemize} -} - -%====================================================================== - - -\frame{\frametitle{Introduction} - \framesubtitle{Détail des stratégies étudiées} - \begin{enumerate} - \item - \ex{checkout master, rebase nouvfonc, delete branch nouvfonc} - \item - \ex{checkout master, merge nouvfonc, delete branch nouvfonc} - \item - \ex{checkout nouvfonc, rebase master, checkout master, merge - nouvfonc, delete branch nouvfonc} - \item - \ex{checkout nouvfonc, rebase master, checkout master, merge - -{}-no-ff nouvfonc, delete branch nouvfonc} - \item - \ex{checkout master, merge nouvfonc -{}-no-ff, delete branch - nouvfonc} - \end{enumerate} -} - -%====================================================================== - -\newcommand{\branchstrategie}[4]{ -\frame{\frametitle{#1} - \begin{tabular}{lp{3cm}} - \begin{minipage}[b]{.5\linewidth} - {\small - #2 - } - \end{minipage} - & - \centerline{\includegraphics[scale=.5]{#3}} - \end{tabular} - #4 -}} - -%====================================================================== - -\branchstrategie{Stratégie 1} -{ - \ex{git checkout master}\\ - \ex{git rebase nouvfonc}\\ - \ex{git branch -d nouvfonc} -} -{strat1.png} -{ - \begin{itemize} - \item - Tout est linéaire, le commit de la branche dont on est parti étant - en dernier - \item - On ne voit pas bien les commits correspondant à la - nouvelle fonctionnalité - \end{itemize} -} - -%====================================================================== - -\branchstrategie{Stratégie 2} -{ - \ex{git checkout master}\\ - \ex{git merge nouvfonc}\\ - \ex{git branch -d nouvfonc} -} -{strat2.png} -{ - \begin{itemize} - \item - Le commit du changement de titre paraît à part, ce qui n'est pas - encore trop gênant - \item - On a l'impression que les premiers commits sont sur la même lancée - que la branche de nouvelle fonctionnalité, ce qui induit en erreur - : ce n'est pas clair - \end{itemize} -} - -%====================================================================== - -\branchstrategie{Stratégie 3} -{ - \ex{git checkout nouvfonc}\\ - \ex{git rebase master}\\ - \ex{git checkout master}\\ - \ex{git merge nouvfonc}\\ - \ex{git branch -d nouvfonc} -} -{strat3.png} -{ - \begin{itemize} - \item - Tout est linéaire, le commit de la branche dont on est parti étant - en dernier - \item - On ne voit pas bien les commits correspondant à la nouvelle - fonctionnalité (idem stratégie 1 donc) - \end{itemize} -} - -%====================================================================== - -\branchstrategie{Stratégie 4} -{ - \ex{git checkout nouvfonc}\\ - \ex{git rebase master}\\ - \ex{git checkout master}\\ - \ex{git merge -{}-no-ff nouvfonc}\\ - \ex{git branch -d nouvfonc} -} -{strat4.png} -{ - \begin{itemize} - \item - Les deux commits correspondant à la nouvelle fonctionnalité - apparaissent clairement. - \item - C'est le schéma le plus lisible. - \end{itemize} -} - -%====================================================================== - -\branchstrategie{Stratégie 5} -{ - \ex{git checkout master}\\ - \ex{git merge nouvfonc -{}-no-ff}\\ - \ex{git branch -d nouvfonc} -} -{strat5.png} -{ - \begin{itemize} - \item - Idem à la stratégie 2, ce n'est pas le ff qui s'est fait dans ce - cas. - \end{itemize} -} - -%====================================================================== - -% \frame{\frametitle{Stratégie 1} -% \begin{tabular}{lp{3cm}} -% \begin{minipage}[b]{.5\linewidth} -% {\small -% \ex{git checkout master}\\ -% \ex{git rebase nouvfonc}\\ -% \ex{git branch -d nouvfonc} -% } -% \end{minipage} -% & -% \centerline{\includegraphics[scale=.5]{strat1.png}} -% \end{tabular} - -% \begin{itemize} -% \item -% Tout est linéaire, le commit de la branche dont on est parti étant -% en dernier -% \item -% On ne voit pas bien les commits correspondant à la -% nouvelle fonctionnalité -% \end{itemize} -% } - -%====================================================================== - -\subsection{Travail collaboratif} - -%====================================================================== - -\frame{\frametitle{Introduction} - \begin{itemize} - \item - Le travail de plusieurs personnes sur un même projet fait - automatiquement appel à de la gestion de branches - \item - Chaque personne travaille en effet sur une branche de son propre - dépôt - \item - La réconciliation du travail de ces différentes personnes se fait - en fusionnant les branches correspondantes - \item - Plusieurs stratégies peuvent alors être mises en place pour - effectuer cette fusion - \end{itemize} -} - -%====================================================================== - -\subsection{Recommandations} - -%====================================================================== - -\frame{\frametitle{} - \begin{itemize} - \item - - \end{itemize} -} - -%====================================================================== +\input{brancheintro} +\input{branchusecase} +\input{branchreco} \end{document} -- GitLab