
\section{Outils de gestion de code source (svn)}

\begin{frame}{\large \insertsection}
  \begin{block}{Subversion}
    \begin{itemize}
    \item système de gestion de code source
    \item journalisation
    \item travail collaboratif
    \item serveur dédié au module projets L3 : \url{https://193.49.201.37/svn/<projet>}
    \end{itemize}
  \end{block} 
\end{frame}

\begin{frame}{\large \insertsection}
  \begin{block}{Subversion : principe}
    \begin{itemize}
    \item système centralisé
    \item dépôt sur un serveur
    \item modifications via des copies locales
    \end{itemize}
    \centering
    \includegraphics[width=7cm,frame]{images/SVN_Server_Client_Structure.png}
  \end{block} 
\end{frame}

\begin{frame}{\large \insertsection}
  \begin{block}{Subversion : quelques notions}
    \begin{itemize}
    \item \textbf{dépôt (repository) :} données et méta-données
      du projet, sur le serveur
    \item \textbf{révision (revision) :} numéro de modification du dépôt
    \item \textbf{copie de travail (working copy) :} copie locale du
      projet, sur laquelle un intervenant peut travailler
    \end{itemize}
  \end{block} 
\end{frame}

\begin{frame}{\large \insertsection}
  \begin{block}{Subversion : quelques opérations}
    \begin{itemize}
    \item \textbf{créer (create) :} créé un dépôt (fait par
      l'administrateur)
    \item \textbf{récupérer (checkout) :} récupère les données du
      projet dans une copie de travail
    \item \textbf{mettre à jour (update) :} met à jour la copie de travail en
      récupérant la dernière révision du dépôt
    \item \textbf{publier (commit) :} envoie, dans le dépôt, les modifications
      réalisées sur la copie de travail
    \item \textbf{ajouter (add) :} demande d’ajouter, dans le dépôt,
      un fichier/répertoire de la copie de travail
    \item \textbf{supprimer (delete) :} demande de supprimer un
      fichier/répertoire
    \item \textbf{résoudre (resolve) :} résout un conflit sur la copie
      de travail
    \end{itemize}
  \end{block} 
\end{frame}

\begin{frame}{\large \insertsection}
  \begin{block}{Subversion : résumé de l'utilisation d'un dépôt SVN}
    \begin{itemize}
    \item pour récupérer le dépôt : checkout
    \item pour mettre à jour le dépôt :
      \begin{itemize}
      \item modifier la copie locale, add, delete\dots
      \item update
      \item resolve (si besoin)
      \item commit
      \end{itemize}
    \end{itemize}
  \end{block} 
\end{frame}

\begin{frame}{\large \insertsection}
  \begin{block}{Subversion : bonnes pratiques}
    \begin{itemize}
    \item supprimer les fichiers en utilisant la commande svn delete
    \item ne pas mettre, sur le dépôt, des fichiers générés
      automatiquement
    \item avant de publier une modification, vérifier que le code reste
      valide
    \item éviter les conflits potentiels en organisant le travail de telle
      sorte que les intervenants aient à travailler sur des fichiers
      différents
    \end{itemize}
  \end{block} 
\end{frame}

\begin{frame}[fragile]{\large \insertsection}
  \begin{block}{Subversion : configuration du client svn avec proxy}
    ~\\
    \begin{minted}[frame=single,label={\~~/.subversion/servers}]{bash}
  http-proxy-host=...
  http-proxy-port=...
  http-proxy-username=...
  http-proxy-password=...
    \end{minted}
  \end{block} 
\end{frame}
%http-proxy-host=192.168.22.62
%http-proxy-port=3128
%http-proxy-username=tseptemb
%http-proxy-password=septembre2013

\begin{frame}{\large \insertsection}
    \begin{block}{Subversion : checkout (avec eclipse+subversive)} 
        créer un nouveau projet de type svn \\~\\
        \centering
    \includegraphics[width=7cm]{images/svn_co1.png}
  \end{block} 
\end{frame}

\begin{frame}{\large \insertsection}
    \begin{block}{Subversion : checkout (avec eclipse+subversive)}  
        ~\\ ... \\
        \centering
    \includegraphics[width=7cm]{images/svn_co2.png}
  \end{block} 
\end{frame}

\begin{frame}{\large \insertsection}
    \begin{block}{Subversion : checkout (avec eclipse+subversive)} 
        spécifier le dépot à récupérer \\~\\
        \centering
    \includegraphics[width=6cm]{images/svn_co3.png}
  \end{block} 
\end{frame}


\begin{frame}{\large \insertsection}
    \begin{block}{Subversion : checkout (avec eclipse+subversive)} 
        ~\\ ... \\
        \centering
    \includegraphics[width=7cm]{images/svn_co4.png}
  \end{block} 
\end{frame}


\begin{frame}{\large \insertsection}
    \begin{block}{Subversion : checkout (avec eclipse+subversive)} 
        demander de créer un projet eclipse correspondant \\~\\
        \centering
    \includegraphics[width=8cm]{images/svn_co5.png}
  \end{block} 
\end{frame}


\begin{frame}{\large \insertsection}
    \begin{block}{Subversion : checkout (avec eclipse+subversive)} 
        ~\\ ... \\
        \centering
    \includegraphics[width=7cm]{images/svn_co6.png}
  \end{block} 
\end{frame}


\begin{frame}{\large \insertsection}
    \begin{block}{Subversion : checkout (avec eclipse+subversive)} 
        résultat \\~\\
        \centering
    \includegraphics[width=10cm]{images/svn_co7.png}
  \end{block} 
\end{frame}


\begin{frame}{\large \insertsection}
    \begin{block}{Subversion : commit (avec eclipse+subversive)} 
        \texttt{Team > Commit} \\~\\
        \centering
    \includegraphics[width=7cm]{images/svn_ci1.png}
  \end{block} 
\end{frame}


\begin{frame}{\large \insertsection}
    \begin{block}{Subversion : commit (avec eclipse+subversive)} 
        résultat \\~\\
        \centering
    \includegraphics[width=10cm]{images/svn_ci2.png}
  \end{block} 
\end{frame}



\begin{frame}[fragile]{\large \insertsection}
  \begin{block}{Subversion : scénario type d'un conflit}
    \begin{multicols}{2}
    \begin{enumerate}
      \scriptsize
    \item initialement tout le monde est à jour :\\
      \begin{tikzpicture}[thick,font=\scriptsize,align=center]
        \node [draw,fill=white, rounded corners=1mm] (D) at (0, 1) {dépôt r2};
        \node [draw,fill=white, rounded corners=1mm] (C1) at (-1.2, 0) {copie Ginette r2};
        \node [draw,fill=white, rounded corners=1mm] (C2) at (1.2, 0) {copie Roger r2};
        \draw [>=latex, thick] (C1) to (D) {};
        \draw [>=latex, thick] (C2) to (D) {};
      \end{tikzpicture}%
    \item Ginette et Roger modifient un même fichier :\\
      \begin{tikzpicture}[thick,font=\scriptsize,align=center]
        \node [draw,fill=white, rounded corners=1mm] (D) at (0, 1) {dépôt r2};
        \node [draw,fill=red!30, rounded corners=1mm] (C1) at (-1.2, 0) {copie Ginette r2'};
        \node [draw,fill=red!30, rounded corners=1mm] (C2) at (1.2, 0) {copie Roger r2''};
        \draw [>=latex, thick] (C1) to (D) {};
        \draw [>=latex, thick] (C2) to (D) {};
      \end{tikzpicture}%
    \item Ginette fait un update puis un commit :\\
      \begin{tikzpicture}[thick,font=\scriptsize,align=center]
        \node [draw,fill=red!30, rounded corners=1mm] (D) at (0, 1) {dépôt r3};
        \node [draw,fill=red!30, rounded corners=1mm] (C1) at (-1.2, 0) {copie Ginette r3};
        \node [draw,fill=white, rounded corners=1mm] (C2) at (1.2, 0) {copie Roger r2''};
        \draw [<->,>=latex, thick] (C1) to (D) {};
        \draw [>=latex, thick] (C2) to (D) {};
      \end{tikzpicture}%
    \item Roger fait un update, il y a un conflit :\\
      \begin{tikzpicture}[thick,font=\scriptsize,align=center]
        \node [draw,fill=white, rounded corners=1mm] (D) at (0, 1) {dépôt r3};
        \node [draw,fill=white, rounded corners=1mm] (C1) at (-1.2, 0) {copie Ginette r3};
        \node [draw,fill=red!30, rounded corners=1mm] (C2) at (1.2, 0) {copie Roger r2*};
        \draw [>=latex, thick] (C1) to (D) {};
        \draw [<-,>=latex, thick] (C2) to (D) {};
      \end{tikzpicture}%
    \item Roger doit modifier le fichier puis resolve puis commit :\\
      \begin{tikzpicture}[thick,font=\scriptsize,align=center]
        \node [draw,fill=red!30, rounded corners=1mm] (D) at (0, 1) {dépôt r4};
        \node [draw,fill=white, rounded corners=1mm] (C1) at (-1.2, 0) {copie Ginette r3};
        \node [draw,fill=red!30, rounded corners=1mm] (C2) at (1.2, 0) {copie Roger r4};
        \draw [>=latex, thick] (C1) to (D) {};
        \draw [->,>=latex, thick] (C2) to (D) {};
      \end{tikzpicture}%
    \end{enumerate}
    \end{multicols}
  \end{block} 
\end{frame}

\begin{frame}{\large \insertsection}
  \begin{block}{Subversion : détection d'un conflit}
    \begin{itemize}
    \item après un update
    \item création de 4 fichiers :
      \begin{itemize}
      \item fichier avec les modifs locales ("\texttt{readme.txt.mine}")
      \item fichier avec les modifs du dépôt ("\texttt{readme.txt.r3}")
      \item fichier à la précédente révision ("\texttt{readme.txt.r2}")
      \item fichier de résolution ("\texttt{readme.txt}")
      \end{itemize}
    \end{itemize}
    \centering
    \includegraphics[width=10cm]{images/svn_conflit1.png}
  \end{block} 
\end{frame}

\begin{frame}{\large \insertsection}
    \begin{block}{Subversion : résolution d'un conflit}
        \begin{itemize}
            \item éditer le fichier (\texttt{Team > Resolve conflicts}) \\
                \includegraphics[width=10cm]{images/svn_conflit2.png}
        \end{itemize}
    \end{block} 
\end{frame}

\begin{frame}{\large \insertsection}
  \begin{block}{Subversion : résolution d'un conflit}
        \begin{itemize}
        \item resolve (\texttt{Team > Mark as merged}) \\
      \includegraphics[width=10cm]{images/svn_conflit3.png}
    \item update, commit
    \end{itemize}
  \end{block} 
\end{frame}

