diff --git a/branchreco.tex b/branchreco.tex index 558c6f2ff1f07645581616f1bb09b8c360bf138c..1730b1e6ad709c92b611b98e037b0381d081b415 100644 --- a/branchreco.tex +++ b/branchreco.tex @@ -1,18 +1,5 @@ %====================================================================== -\section{Recommandations} - -%====================================================================== - -\frame{\frametitle{} - \begin{itemize} - \item - - \end{itemize} -} - -%====================================================================== - \section{Travail collaboratif} %====================================================================== diff --git a/branchusecase.tex b/branchusecase.tex index c304ee07bdbe3b4dfedf5e1272a944b2a61b1de7..0a7c3f971897e43ef894abc083c1f8bfb677fe0e 100644 --- a/branchusecase.tex +++ b/branchusecase.tex @@ -124,11 +124,13 @@ { \begin{itemize} \item - Tout est linéaire, le commit de la branche dont on est parti étant - en dernier + Dans cette stratégie, on utilise pas de \ex{merge} \item - On ne voit pas bien les commits correspondant à la - nouvelle fonctionnalité + L'historique est linéaire, le \emph{commit} de la branche + \ex{master} étant en dernier + \item + Les \emph{commits} correspondant à la nouvelle fonctionnalité ne + ressortent pas \end{itemize} } @@ -144,12 +146,13 @@ { \begin{itemize} \item - Le commit du changement de titre paraît à part, ce qui n'est pas - encore trop gênant + Les \emph{commits} de la nouvelle fonctionnalité sont alignés sur + les \emph{commits} initiaux : la branche \ex{nouvfonc}, utilisée + temporairement, ne ressort pas clairement \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 + Le \ex{merge} fait l'objet d'un \emph{commit} (en haut de + l'historique) : cela reflète la réalité, mais entrave un peu la + lisibilité \end{itemize} } @@ -167,11 +170,13 @@ { \begin{itemize} \item - Tout est linéaire, le commit de la branche dont on est parti étant - en dernier + Dans cette stratégie, on utilise \ex{merge} et \ex{rebase} + \item + L'historique est linéaire, le \emph{commit} de la nouvelle branche + étant en dernier \item - On ne voit pas bien les commits correspondant à la nouvelle - fonctionnalité (idem stratégie 1 donc) + Les \emph{commits} correspondant à la nouvelle fonctionnalité ne + ressortent pas \end{itemize} } @@ -189,52 +194,88 @@ { \begin{itemize} \item - Les deux commits correspondant à la nouvelle fonctionnalité - apparaissent clairement. + Les \emph{commits} de la nouvelle fonctionnalité apparaissent + clairement + \item + Le \ex{merge} est exécuté avec l'option \ex{-{}-no-ff}, obligeant + Git à choisir une stratégie de fusion différente de celle qu'il + aurait choisi par défaut \item - C'est le schéma le plus lisible. + \textbf{C'est l'historique 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} -{ +% \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} +% } + +%====================================================================== + +\subsection{Recommandations} + +%====================================================================== + +\frame{\frametitle{Synthèse} \begin{itemize} \item - Idem à la stratégie 2, ce n'est pas le ff qui s'est fait dans ce - cas. + Le choix d'une stratégie d'intégration des branches est libre, + chaque personne / équipe est libre d'opter pour la stratégie + qu'elle veut + \item + La stratégie 4, plébiscitée par de nombreuses équipes, présente + l'avantage de faire ressortir clairement les \emph{commits} d'une + branche, mais introduit un \emph{commit} supplémentaire + explicitant la fusion finale + \item + D'autres équipes considèrent que ce \emph{commit} supplémentaire + pollue l'historique, préfèrent avoir un historique «~plat~», et + optent pour la stratégie 3 + \item + Les stratégies 1 et 2 restent possibles, mais engendrent + potentiellement plus de conflits à la fusion \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} -% } +\frame{\frametitle{Recommandations} + \begin{itemize} + \item + \emph{A priori}, il faut opter pour la stratégie 3 ou 4 + \item + En particulier, lors de l'insertion d'une nouvelle fonctionnalité + par une nouvelle branche, des \ex{rebase} réguliers à partir de la + branche de départ + \begin{itemize} + \item + permettent de «~rejouer~» les \emph{commits} de la branche de + départ (s'il y en a bien sûr) au fur et à mesure, limitant les + conflits lors de la fusion finale + \item + mais ne doivent être utilisés que pour les branches locales, non + partagées avec des dépôts distants + \end{itemize} + \item + Quelques liens pour alimenter le débat + \begin{itemize} + \item + \url{http://blogs.atlassian.com/2013/10/git-team-workflows-merge-or-rebase/} + \item + \url{http://fr.slideshare.net/rschwietzke/git-the-incomplete-overview} + \end{itemize} + \end{itemize} +} diff --git a/gitcommon.sty b/gitcommon.sty index 82ba17f79ea235e3f021550301998d0cbe91050c..9625c19e3d73ca28ae4a643e20810bc11656cfa2 100644 --- a/gitcommon.sty +++ b/gitcommon.sty @@ -24,32 +24,6 @@ % ------------------------------------------------------------------- -% Par ailleurs : -% ------------- - -% Dérouler plusieurs scénarios (cas d'usage) en montrant les différences -% obtenues à la fin de chaque stratégie. Le contexte : un dépôt -% contenant uniquement la branche master avec 3 commits (par exemple) à -% l'intérieur. La manip : - -% - On crée une nouvelle branche correspondant à l'ajout d'une nouvelle -% fonctionnalités (nouvfonc) dans laquelle on ajoute 2 commits -% - On revient dans la branche master pour y faire un bugfix -% - On souhaite maintenant fusionner nouvfonc dans master et supprimer -% ensuite la branche - -% Montrer la situation courante sous forme d'arbre. On peut appliquer -% plusieurs stratégies : - -% 1) M: rebase N, delete branch N -% 2) M: merge N, delete branch N -% 3) N: rebase M, M: merge N, delete branch N -% 4) N: rebase M, M: merge --no-ff N, delete branch N - -% -> Montrer le résultat final à chaque fois sous forme d'arbre. -% -> À compléter avec le paragraphe suivant qui contient un lien -% proposant une discussion à ce sujet -% ------------------------------------------------------------------- % Important : une bonne ressource avec enfin une bonne discussion sur % les avantages et les inconvénients à utiliser soit merge soit diff --git a/strat1.png b/strat1.png index 7b96d2a73173274e32201ce40b0f7f4ae6507197..f47c535a3aa864e0d4608570cd5e129f5c90092d 100644 Binary files a/strat1.png and b/strat1.png differ diff --git a/strat2.png b/strat2.png index 8b30e1eb9961e8028ebb1fa80d64124e0ee40650..8132ad2a748cdc18252ace3f36dd52c65e030e3d 100644 Binary files a/strat2.png and b/strat2.png differ diff --git a/strat3.png b/strat3.png index 943e97eec7ff23658a9c936318e8bd89ef6acb76..7bbaf2de8d61c3572ea0b9c0941f42872526bd9d 100644 Binary files a/strat3.png and b/strat3.png differ diff --git a/strat4.png b/strat4.png index 044d8ffe161f39763660bad881072c85b662a5ab..8bc65711fef35546901b26021105dcd86dfd84b6 100644 Binary files a/strat4.png and b/strat4.png differ diff --git a/strat5.png b/strat5.png index 637efae1091cdd063527ee3fe19087dafdc19d58..f2fe65cba6a4fca8be05363b29814f1e20505212 100644 Binary files a/strat5.png and b/strat5.png differ