gitFlow.tex 5.98 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
\begin{frame}[fragile]
\frametitle{Organiser tout ça}
Il existe de nombreuses méthodes et modèles pour organiser tout ce joyeux bazar à base de branches, d'issues et de merge request. L'une d'entre elles est git flow.

Git flow est un workflow, un modèle définissant où stocker quelle information et dans quel ordre exécuter quelles tâches; mais c'est aussi un outil en ligne de commande qui permet d'accélérer la mise en place de ce workflow.

Il faut l'installer en plus de git. Sous debian et dérivées:
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
  \begin{Verbatim}
# apt update && apt -y install git-flow
  \end{Verbatim}
\end{beamercolorbox}

\end{frame}

\begin{frame}[fragile]
	\frametitle{Le workflow}
	Problématique de collaboration sur des gros projets :
	\begin{itemize}
		\item Avoir une branche \verb+master+ stable à tout moment;
		\item Créer une branche par nouvelle fonctionnalité :
			\begin{itemize}
				\item Pour une organisation plus claire;
				\item Pour développer plusieurs fonctionnalités en parallèle.
			\end{itemize}
		\item Avoir une branche de développement pour merge les fonctionnalités finies, mais qui n'est pas une branche stable.
	\end{itemize}
\end{frame}

\begin{frame}
	\frametitle{Comment ça fonctionne ?}
	\framesubtitle{Les branches master et develop}
	\begin{block}{La branche master}
		Il s'agit d'une branche stable. À tout moment son commit le plus récent correspond à une version fonctionnelle du projet.
	\end{block}

	\Pause

	\begin{block}{La branche develop}
		C'est la branche de travail courante. C'est sur celle-ci qu'on ajoute au fur et à mesure les fonctionnalités, et que l'on mergera dans master pour effectuer une release
	\end{block}
\end{frame}

\begin{frame}
	\frametitle{Comment ça fonctionne ?}
	\framesubtitle{Feature, bugfix, release et hotfix}
	Ce sont des branches avec des utilités bien définies :
	\begin{block}{feature}
		Une fonctionnalité particulière, qui sera merge dans develop quand elle sera finie
	\end{block}

	\Pause

	\begin{block}{bugfix}
		Résolution d'un bug {\bf qui n'existe que sur develop}. Sera merge dans develop
	\end{block}

	\Pause

	\begin{block}{release}
		Permet de faire des modifications sur le projet avant la sortie d'une release. Merge dans master et dans develop (crée un tag sur master)
	\end{block}
\end{frame}

\begin{frame}
	\frametitle{Comment ça fonctionne ?}
	\framesubtitle{Hotfix}
	\begin{block}{hotfix}
		Pour résoudre un bug qui est présent sur une version \enquote{stable} (donc dans master). Sera merge dans develop {\bf et} dans master (crée un tag sur master).
	\end{block}
	\begin{center}
		\includegraphics[height=.5\paperheight]{imgs/git_flow.png}
	\end{center}
\end{frame}

\begin{frame}[fragile]
  \frametitle{En pratique}
  \framesubtitle{init}
Tout commence par un \textbf{init}, à l'intérieur d'un repo. Appuyez sur entrée à chaque question, on reste sur les noms par défaut.
    \begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
      \begin{Verbatim}
git flow init
Branch name for production releases: [master]
Branch name for "next release" development: [develop]

How to name your supporting branch prefixes?
Feature branches? [feature/]
Bugfix branches? [bugfix/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []
Hooks and filters directory? [./.git/hooks]
    \end{Verbatim}
  \end{beamercolorbox}

\end{frame}

\begin{frame}[fragile]
\frametitle{En pratique}
\framesubtitle{Si vous êtes développeur: créer des features}
Pour créer une feature du nom de pigeon:
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
  \begin{Verbatim}
git flow feature start pigeon
Basculement sur la nouvelle branche 'feature/pigeon'

Summary of actions:
- A new branch 'feature/pigeon' was created, based on 'develop'
- You are now on branch 'feature/pigeon'

Now, start committing on your feature. When done, use:

     git flow feature finish pigeon
  \end{Verbatim}
\end{beamercolorbox}
Git flow a créé la branche feature/pigeon.

\end{frame}
\begin{frame}[fragile]
\frametitle{En pratique}
122
\framesubtitle{Si vous êtes peu de développeurs: merge des features}
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
  \begin{Verbatim}
git flow feature finish pigeon
Basculement sur la branche 'develop'
Déjà à jour.
Branche feature/pigeon supprimée (précédemment 83fb6b9).

Summary of actions:
- The feature branch 'feature/pigeon' was merged into 'develop'
- Feature branch 'feature/pigeon' has been locally deleted
- You are now on branch 'develop'
  \end{Verbatim}
\end{beamercolorbox}
Git flow a merge la feature dans develop et a supprimé la branche feature/pigeon.
\end{frame}
\begin{frame}[fragile]
\frametitle{En pratique}
140
\framesubtitle{Si vous êtes une grande équipe: push des features}
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
  \begin{Verbatim}
git flow feature publish pigeon
  \end{Verbatim}
\end{beamercolorbox}
Ceci va tout simplement push la branche feature/pigeon sur le serveur. On pourra éventuellement faire une merge request pour la mettre dans develop.
Pour pull les features des autres:
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
  \begin{Verbatim}
git flow feature pull origin pigeon
\end{Verbatim}
\end{beamercolorbox}

\end{frame}

\begin{frame}[fragile]
\frametitle{En pratique}
\framesubtitle{La release: pour les changements de dernière minute}
\begin{beamercolorbox}[rounded=true, shadow=true]{terminal}
  \begin{Verbatim}
git flow release start pigeon2000
Basculement sur la nouvelle branche 'release/pigeon2000'

Summary of actions:
- A new branch 'release/pigeon2000' was created, based on 'develop'
- You are now on branch 'release/pigeon2000'

Follow-up actions:
- Bump the version number now!
- Start committing last-minute fixes in preparing your release
- When done, run:

     git flow release finish 'pigeon2000'
   \end{Verbatim}
 \end{beamercolorbox}
\end{frame}
177
\begin{frame}
178
\frametitle{Résumé des comandes}
179 180
\input{src/tikz/commandes_gitFlow.tex}
\end{frame}