Commit e3bd8e7b authored by Remy Huet's avatar Remy Huet

Merge branch 'gestion_non_linéaire'

parents 4ecc749e 3c1f4f3f
Pipeline #33577 passed with stages
in 1 minute and 4 seconds
24 janvier 2019
Rémy Huet (remy.huet@etu.utc.fr), Thibaud Duhautbout (thibaud@duhautbout.ovh), Association Picasoft (picasoft@assos.utc.fr)
Rémy Huet (remy.huet@etu.utc.fr), Thibaud Duhautbout (thibaud@duhautbout.ovh), Quentin Duchemin (quentinduchemin@tuta.io), Association Picasoft (picasoft@assos.utc.fr)
La présentation et tous les fichiers qui composent ce dépôt sont sous licence
Creative Commons 4.0 Attribution - Partage dans les Mêmes Conditions 4.0
......
......@@ -2,7 +2,7 @@
## Description
Repo de la formation git de l'api/casoft Init. **En cas de questions :** [remy.huet@etu.utc.fr](mailto://remy.huet@etu.utc.fr), [thibaud@duhautbout.ovh](mailto://thibaud@duhautbout.ovh).
Repo de la formation git de l'api/casoft Init. **En cas de questions :** [remy.huet@etu.utc.fr](mailto://remy.huet@etu.utc.fr), [thibaud@duhautbout.ovh](mailto://thibaud@duhautbout.ovh), [quentinduchemin@tuta.io](mailto://quentinduchemin@tuta.io).
Pour aller plus loin : lire la [documentation de git](https://git-scm.com/docs).
......
......@@ -11,8 +11,9 @@
\usepackage{listings}
\usepackage{fancyvrb}
\usepackage{xcolor}
\usepackage{tikz}
\hypersetup{
pdfauthor={Rémy Huet, Thibaud Duhautbout},
pdfauthor={Rémy Huet, Thibaud Duhautbout, Quentin Duchemin},
pdftitle={Api/casoft Init - Jour 4 : Git},
pdfsubject={Formation git},
pdfkeywords={git, gestion de version, VCS},
......@@ -37,9 +38,9 @@ pdfproducer={Latex},
\title[Api/casoft Init - Git]{Api/casoft Init - Jour 4 - Git}
\titlegraphic{\includegraphics[width=5em]{./imgs/picasoft_logo.png}\\ \href{https://creativecommons.org/licenses/by-sa/4.0/deed.fr}{\includegraphics[width=4em]{./imgs/licence.eps}}}
\author[R. Huet, T. Duhautbout]{%
\phantom{x}\hfill Rémy {\sc Huet} \hfill Thibaud {\sc Duhautbout} \hfill\phantom{x}}
\institute[Picasoft]{Association Picasoft}
\author[R. Huet, T. Duhautbout, Q. Duchemin]{%
\phantom{x}\hfill Rémy {\sc Huet} \hfill Thibaud {\sc Duhautbout} \hfill Quentin \textsc{Duchemin} \hfill \phantom{x}}
\institute[]{Association Picasoft}
\date[24/01/2019]{Jeudi 24 janvier 2018}
\usetheme{AnnArbor}
......
\begin{frame}
\frametitle{Gestion des branches}
\begin{frame}[fragile]
\frametitle{Gestion pratique des branches}
\begin{block}{Création d'une branche}
\begin{itemize}
\item \verb+git branch <nom>+ pour créer une branche ;
\item \verb+git checkout -b <nom>+ pour créer une branche et changer la branche courante pour celle-ci.
\end{itemize}
\end{block}
\Pause
\begin{block}{Statut des branches}
\begin{itemize}
\item La commande \verb+git status+ indique la branche courante;
\item La commande \verb+git branch+ montre la liste des branches et la branche courante.
\end{itemize}
\end{block}
\Pause
\begin{block}{Suppression d'une branche}
\begin{itemize}
\item \verb+git branch -d <nom>+ pour supprimer une branche;
\item Si la branche n'a pas été fusionnée, \verb+git branch -D <nom>+.
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]
\frametitle{Application}
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\begin{Verbatim}
$ git branch premiere_branche \Pause
$ git branch \Pause
* \textcolor{myGreen}{master}
premiere_branche \Pause
$ git checkout -b develop \Pause
Basculement sur la nouvelle branche 'develop' \Pause
$ git status \Pause
Sur la branche develop
rien à valider, la copie de travail est propre \Pause
$ git branch -d premiere_branche \Pause
Branche premiere_branche supprimée (précédemment 168efba)
$ touch dev.txt \Pause
$ git add -A && git commit -m ''Ajout fichier dev'' \Pause
[develop 2292018] Ajout fichier dev
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 dev.txt
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}
\begin{frame}[fragile]
\frametitle{Changer de branche}
\framesubtitle{Plus facile qu'à l'UTC !}
\begin{block}{Comment faire ?}
\begin{itemize}
\item Une commande simple : \verb+git checkout <nom_de_la_branche>+;
\item {\bf Attention :} ne pas avoir de changements non validés ! (ou passer par un \verb+git stash+)
\end{itemize}
\end{block}
\Pause
\begin{block}{Rappel}
\verb+git checkout+ sert aussi à se déplacer sur un commit précis. \\
En fait, cette commande sert à déplacer le \verb+HEAD+. On peut assimiler un \verb+checkout+ sur une branche à un \verb+checkout+ sur un commit.\\
En fait, le nom de le branche n'est {\bf qu'une étiquette} sur le dernier commit de celle-ci.
\end{block}
\end{frame}
\begin{frame}
\begin{frame}[fragile]
\frametitle{Visualisation}
\framesubtitle{Un joli graphe !}
\begin{itemize}
\item En console : \verb+git log --graph --decorate --all+
\item Depuis GitLab :
\end{itemize}
\begin{center}
\includegraphics[height=.5\paperheight]{imgs/graph_gitlab.png}
\end{center}
\end{frame}
\begin{frame}[fragile]
\frametitle{Visualisation}
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
\begin{Verbatim}
$ git checkout master && ls \Pause
Basculement sur la branche 'master'
Votre branche est à jour avec 'origin/master'.
API.txt \Pause
$ git log --graph --decorate --all \Pause
* \textcolor{yellow}{commit 2292018a27182fef507601140c7f93d679b93678 (}{\bf\textcolor{green}{develop}}\textcolor{yellow}{)}
\textcolor{red}{|} Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{red}{|} Date: Mon Jan 14 14:01:37 2019 +0100
\textcolor{red}{|}
\textcolor{red}{|} Ajout fichier dev
\textcolor{red}{|}
* \textcolor{yellow}{commit 168efba77dcfd59ba4346fe4a34427b71db75da7 (}{\bf\textcolor{cyan}{HEAD -> }\textcolor{green}{master}}\textcolor{yellow}{)}
\textcolor{red}{|} Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{red}{|} Date: Fri Jan 11 14:53:09 2019 +0100
\textcolor{red}{|}
\textcolor{red}{|} Commit supplémentaire
\textcolor{red}{|}
* \textcolor{yellow}{commit a04da653083b6b0ba3eea2bce98d903acfd0a4d3}
\textcolor{red}{|} Author: huetremy <remy.huet@etu.utc.fr>
\textcolor{red}{|} Date: Fri Jan 11 10:16:10 2019 +0100
\textcolor{red}{|}
\textcolor{red}{|} Troisième commit
[\ldots]
\end{Verbatim}
\end{beamercolorbox}
\end{frame}
\begin{frame}
\frametitle{Principe de la gestion non linéaire}
Jusqu'ici, on n'a fait que de la gestion linéaire.
Tous les commits étaient sur {\bf une unique branche} (master)
En pratique, tous les commits ne sont pas nécessairement sur la même branche de l'arbre.
\begin{figure}[h]
\centering
\input{src/tikz/arbre.tex}
\end{figure}
{\it Le sens des flèches n’est pas chronologique !
Chaque commit pointe vers son père.}
\end{frame}
\begin{frame}[fragile]{Gestion non linéaire}
\begin{block}{}
\centering
\enquote{Mais pourquoi est-ce qu'on fait ça ?}
\end{block}
\bigskip
\Pause
Une divergence s'effectue à partir d'un certain point : tout le travail précédent l'instant de divergence est commun à toutes les branches postérieures à la création de la divergence.
\medskip
On peut donner quelques raisons \enquote{générales} sur l'utilité des divergences :
\begin{itemize}
\item isoler les travaux indépendants en cours
\item traiter les problèmes d'intégration séparément
\item enregistrer des versions spécifiques
\end{itemize}
En pratique, l'utilisation des divergences dépend beaucoup du type de projet, de la répartition des travaux entre les contributeurs et des méthodes de travail adoptées.
\end{frame}
\begin{frame}
\frametitle{Création d'une divergence}
\framesubtitle{Comment créer une divergence}
\framesubtitle{Analyse}
\begin{figure}[h]
\centering
\input{src/tikz/arbre.tex}
\end{figure}
\begin{itemize}
\item C2 et C3 ont tous les deux C1 comme père
\item C2 et C3 introduisent des modifications différentes après C1
\item ici, C2 et C3 sont sur \textbf{deux branches différentes de C1}
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Création d'une divergence}
\framesubtitle{Explications}
\framesubtitle{Analyse}
\begin{figure}[h]
\centering
\input{src/tikz/arbre.tex}
\end{figure}
\begin{itemize}
\item C4 et C5 ont tous les deux C3 comme père
\item C4 et C5 introduisent des modifications différentes après C3
\item C4 est sur une branche \textbf{différente de C3}
\item C5 est sur \textbf{la même branche que C3}
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Création d'une divergence}
\framesubtitle{Mise en contexte}
\begin{block}{}
Alice, Bob et Charlie travaillent sur un rapport ensemble et décident d'utiliser Git pour gérer l'avancée de leur travail.
\end{block}
\begin{figure}[h]
\centering
\input{src/tikz/arbre.tex}
\end{figure}
\begin{itemize}
\item Alice met en place la structure globale du rapport avec C0 et C1
\Pause
\item Bob se charge de la partie 1, il crée une nouvelle branche dédiée à sa partie et ajoute C2
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Création d'une divergence}
\framesubtitle{Illustrations / exemple}
\framesubtitle{Mise en contexte}
\begin{figure}[h]
\centering
\input{src/tikz/arbre.tex}
\end{figure}
\begin{itemize}
\item Charlie s'occupe de la partie 2.1 : il ajoute la structure de la partie 2 avec C3 sur une nouvelle branche, et avance sa partie avec C5
\Pause
\item Alice rédige la partie 2.2 : elle crée une nouvelle branche à partir de C3 pour récupérer la structure de la partie 2, puis ajoute C4 et C6
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Fusion !}
\begin{figure}[h]
\centering
\input{src/tikz/arbre.tex}
\end{figure}
\begin{block}{}
\centering
\enquote{Attends un peu, et C7 il fait quoi ? Et pourquoi il a deux pères ?}
\end{block}
\Pause
\begin{itemize}
\item C7 est un commit un peu spécial : c'est un \textbf{commit de fusion};
\item Objectif : intégrer les modifications de la branche bleue dans la branche verte (Alice fusionne ses modifications dans la branche de Charlie);
\item Il a bien \textbf{deux} pères (c'est la seule situation où ça arrive);
\item \textbf{Attention !} Si C5 et C6 portent des modifications qui se recouvrent, la fusion va créer des \textbf{conflits} qu'il faudra régler avant de créer C7.
\end{itemize}
\end{frame}
\tikzstyle{commit}=[draw,circle]
\begin{tikzpicture}[scale=0.7]
\node[commit, fill=green!60] (C3)at(4,0){C3};
\node[commit, fill=green!60] (C5)at(6,0){C5};
\node[commit, fill=green!60] (C7)at(8,0){C7};
\node[commit, text=red, fill=cyan!80] (C4)at(10,0){C4'};
\node[commit, text=red, fill=cyan!80] (C6)at(12,0){C6'};
\draw[->, >=latex] (C5) -- (C3) ;
\draw[->, >=latex] (C7) -- (C5) ;
\draw[->, >=latex] (C4) -- (C7) ;
\draw[->, >=latex] (C6) -- (C4) ;
\end{tikzpicture}
\tikzstyle{commit}=[draw,circle]
\begin{tikzpicture}[scale=0.7]
\node[commit, fill=red!50] (C0)at(0,0){C0} ;
\node[commit, fill=red!50] (C1)at(1.5,0){C1} ;
\node[commit, fill=magenta!80] (C2)at(3,1){C2};
\node[commit, fill=green!60] (C3)at(4,-1.5){C3};
\node[commit, fill=green!60] (C5)at(6,-1.5){C5};
\node[commit, fill=green!60] (C7)at(8,-1.5){C7};
\node[commit, fill=cyan!90] (C4)at(5,-2.5){C4};
\node[commit, fill=cyan!90] (C6)at(7,-2.5){C6};
\draw[->, >=latex] (C1) -- (C0) ;
\draw[->, >=latex] (C2) -- (C1) ;
\draw[->, >=latex] (C3) -- (C1) ;
\draw[->, >=latex] (C5) -- (C3) ;
\draw[->, >=latex] (C7) -- (C5) ;
\draw[->, >=latex] (C4) -- (C3) ;
\draw[->, >=latex] (C6) -- (C4) ;
\draw[->, >=latex] (C7) -- (C6) ;
\end{tikzpicture}
\tikzstyle{commit}=[draw,circle]
\begin{tikzpicture}[scale=0.7]
\node[commit, fill=green!60] (C3)at(4,-1.5){C3};
\node[commit, fill=green!60] (C5)at(6,-1.5){C5};
\node[commit, fill=green!60] (C7)at(8,-1.5){C7};
\node[commit, fill=cyan!90] (C4)at(5,-2.5){C4};
\node[commit, fill=cyan!90] (C6)at(7,-2.5){C6};
\draw[->, >=latex] (C5) -- (C3) ;
\draw[->, >=latex] (C7) -- (C5) ;
\draw[->, >=latex] (C4) -- (C3) ;
\draw[->, >=latex] (C6) -- (C4) ;
\end{tikzpicture}
\tikzstyle{commit}=[draw,circle]
\begin{tikzpicture}[scale=0.7]
\node[commit, fill=red!50] (C0)at(0,0){C0} ;
\node[commit, fill=red!50] (C1)at(3,0){C1} ;
\node[commit, fill=red!50] (C2)at(6,0){C2};
\node[commit, fill=green!60] (C3)at(3,-1.5){C3};
\node[commit, fill=green!60] (C4)at(6,-1.5){C4};
\node[commit, fill=green!60] (C5)at(9,-1.5){C5};
\draw[->, >=latex] (C1) -- (C0) ;
\draw[->, >=latex] (C2) -- (C1) ;
\draw[->, >=latex] (C3) -- (C0) ;
\draw[->, >=latex] (C4) -- (C3) ;
\draw[->, >=latex] (C5) -- (C4) ;
\Pause
\onslide<+->{\node[commit, fill=red!50] (C4b)at(9,0){C4*} ;\draw[->, >=latex] (C4b) -- (C2) ;}
\end{tikzpicture}
\ No newline at end of file
\tikzstyle{commit}=[draw,circle]
\begin{tikzpicture}[scale=0.7]
\node[commit, fill=green!60] (C3)at(4,-1.5){C3};
\node[commit, fill=green!60] (C5)at(6,-1.5){C5};
\node[commit, fill=green!60] (C7)at(8,-1.5){C7};
\node[commit, fill=cyan!90] (C4)at(5,-2.5){C4};
\node[commit, fill=cyan!90] (C6)at(7,-2.5){C6};
\draw[->, >=latex] (C5) -- (C3) ;
\draw[->, >=latex] (C7) -- (C5) ;
\draw[->, >=latex] (C4) -- (C3) ;
\draw[->, >=latex] (C6) -- (C4) ;
\draw[->, >=latex] (C7) -- (C6) ;
\end{tikzpicture}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment