% $Id: perl.tex 183 2008-09-04 23:55:50Z nanardon $
\documentclass[notes]{beamer}
\usepackage[utf8]{inputenc}
\usepackage[frenchb]{babel}
\usepackage[T1]{fontenc}
\usepackage{moreverb}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{color}
\usepackage{eurosym}

\mode<presentation>
{
  \definecolor{beamerstructure}{RGB}{143,79,112}
  \definecolor{sidebackground}{RGB}{230,242,250}
  \color{beamerstructure}
  \usetheme[secheader]{Madrid}
  \usepackage{times}
  \userightsidebarcolortemplate{\color{sidebackground}}
  \beamertemplateballitem
}

\AtBeginSection[]
{
\begin{frame}<beamer>
    \frametitle{Plan}
    \tableofcontents[sectionstyle=show/shaded,subsectionstyle=show/show/hide,subsubsectionstyle=hide/hide/hide]

    \emph{Boule de poil à la fin !}
\end{frame}
}

\AtBeginSubsection[]
{
\begin{frame}<beamer>
    \frametitle{\subsecname}
    \tableofcontents[sectionstyle=show/shaded,subsectionstyle=show/shaded/hide,subsubsectionstyle=show/hide/hide]
\end{frame}
}

\AtBeginSubsubsection[]
{
\begin{frame}<beamer>
    \frametitle{\subsubsecname}
    \tableofcontents[sectionstyle=show/hide,subsectionstyle=show/shaded/hide,subsubsectionstyle=show/shaded/hide]
\end{frame}
}

\title{TP Subversion}
%%\subtitle{}
\author{Olivier Thauvin}
\date{\today}

\begin{document}

\frame{\titlepage}

\begin{frame}
\tableofcontents[hideallsubsections]
\end{frame}

\section{Les bases}

\begin{frame}
\frametitle{Généralités sur les VCS}
\begin{block}{Pourquoi utiliser un gestionnaire de versionnement ?}
\begin{itemize}
\item Archiver pas à pas les modifications
\pause
\item Retrouver n'importe quelle ancienne version
\pause
\item Gérer le stockage concurrent
\pause
\begin{itemize}
\item travail à plusieurs
\item travail depuis plusieurs machines
\end{itemize}
\end{itemize}
\end{block}
\end{frame}

\begin{frame}
\frametitle{Présentation de Subversion}
\begin{block}{CVS++}
un successeur à CVS
\end{block}
\vfill
\pause
\begin{block}{Historique:}
\begin{itemize}
\item Février 2000: Début du développement par CollabNet
\item 31 Août 2001: subversion est sous subversion
\item 23 Février 2004: version 1.0.0
\end{itemize}
\end{block}
\vfill
\pause
\begin{block}{Un projet libre}
"Redistribution and use in source and binary forms, with or without
modification, are permitted (\ldots)"
\end{block}
\end{frame}

\begin{frame}[fragile]
\frametitle{Les bases:}
\begin{block}{The commandes à connaitre}
\begin{enumerate}
\item \verb+svn help+
\pause
\item \verb+svn COMMANDE --help+
\end{enumerate}
\end{block}
\pause
\vfill
\begin{block}{Comprendre l'url}
\verb!svn+ssh://nanardon@forge.ipsl.jussieu.fr/svn/latmos!
\begin{itemize}
\item \verb!svn+ssh!: protocole
\item \verb+nanardon+: login
\item \verb+forge.ipsl.jussieu.fr+: le serveur
\item \verb+/svn/latmos+: chemin du dépôt
\end{itemize}
\end{block}
\end{frame}

\begin{frame}[fragile]
\frametitle{Sortir le dépôt}
\begin{block}{Dépôt du TP}
\begin{itemize}
\item protocol: ssh
\item serveur: svn.latmos.ipsl.fr
\item chemin: /svn/tp
\end{itemize}
\end{block}
\pause

\begin{block}{checkout}
\small
\begin{verbatim}
svn co \
    svn+ssh://svn.latmos.ipsl.fr/svn/tp \
    tpsvn
\end{verbatim}
\end{block}

\begin{block}{Remarques:}
\begin{itemize}
\item Que contient le répertoire \verb+tpsvn+ ?
\end{itemize}
\end{block}
\end{frame}

\begin{frame}[fragile]
\frametitle{Mettre à jour sa copie de tavail}
\begin{block}{update}
\begin{enumerate}
\item placez-vous dans \verb+tpsvn+
\item tapez \verb+svn update+
\end{enumerate}
\end{block}
\vfill
\pause
\begin{block}{Et maintenant ?}
\begin{itemize}
\item Que contient \verb+tpsvn+?
\item Que disent les commandes:
\begin{itemize}
\item \verb+svn log+
\item \verb+svn info+
\item \verb+svn status+
\item \verb+svn ls+
\end{itemize}
\end{itemize}
\end{block}
\end{frame}

\begin{frame}[fragile]
\frametitle{Premier commit}
\begin{block}{Ajout des fichiers}
FICHIER est à remplacer par le nom du fichier qui vous ai donné.
\begin{enumerate}
\item placez-vous dans trunk (\verb+cd trunk+)
\item copiez votre fichier (depuis \verb+../files+)
\pause
\item ajoutez votre fichier: \pause\verb+svn add FICHIER+
\pause
\item commitez: \pause\verb+svn commit -m "ajout FICHIER"+
\end{enumerate}
\end{block}
\vfill
\pause
\begin{block}{Analyse}
\begin{itemize}
\item Que dit \verb+svn commit+ ?
\item Voyez vous d'autres fichiers \verb+.txt+ ?
\pause
\item mettez à jour votre copie de travail
\end{itemize}
\end{block}
\end{frame}

\begin{frame}[fragile]
\frametitle{Deuxième commit}
\begin{block}{Modification du fichier}
A la fin du fichier ajouter l'auteur du texte contenu dans le fichier (si vous
ne savez pas demandez), de cette manière:
\begin{verbatim}
-- Auteur
\end{verbatim}
\end{block}
\vfill
\pause

\begin{block}{Que donne:}
\begin{itemize}
\item \verb+svn status+?
\pause
\item \verb+svn annotate FICHIER+?
\pause
\item \verb+svn log FICHIER+?
\end{itemize}
\pause

Commitez.
\end{block}
\end{frame}

\begin{frame}[fragile]
\frametitle{Avorter des modifications}
\begin{block}{Modification du fichier}
A la fin du fichier ajouter le texte suivant:
\begin{verbatim}
A la verticale.
\end{verbatim}
\end{block}
\vfill
\pause
\begin{block}{Que donne:}
\begin{itemize}
\item \verb+svn status+?
\item \verb+svn diff+?
\end{itemize}
\end{block}
\pause
\vfill
\begin{block}{Annuler les modifications}
Tapez: \verb+svn revert -R .+

\pause
Que donne
\begin{itemize}
\item \verb+svn status+?
\item \verb+svn diff+?
\end{itemize}
\end{block}
\end{frame}


\section{Propriété des fichiers}

\begin{frame}[fragile]
\frametitle{Les propriétés}

\begin{block}{Qu'est-ce donc ?}
Métadonnées associées aux fichiers. Exemples:
\begin{itemize}
\item \verb+svn:executable+: fichier exécutable
\item \verb+svn:eol-style+: type de fin de ligne
\item \verb+svn:mime-type+: type de fichier
\end{itemize}
\end{block}
\pause
\vfill

\begin{block}{Commandes:}
\begin{itemize}
\item Lister les propriété: \verb+svn proplist FICHIER+
\pause
\item Voir une propriété: \verb+svn propget PROPRIETE FICHIER+
\end{itemize}
\end{block}
\end{frame}

\begin{frame}[fragile]
\frametitle{Propriété \og{}keywords\fg{}}
\begin{block}{Marquer un fichier:}
\begin{enumerate}
\item editez le FICHIER et ajouter une ligne à la fin contenant:
\verb+-- $Id$+
\item tapez \verb+svn propset svn:keywords Id FICHIER+
\pause
\item commitez
\pause
\item mettez à jour votre copie de travail
\end{enumerate}
\end{block}
\pause
\vfill
\begin{block}{Discution}
\begin{itemize}
\item Que contient la dernière ligne du FICHIER ?
\pause
\item Que contiennent les autres fichiers ?
\end{itemize}
\end{block}
\end{frame}

\section{Les Tags, les Branches}

\begin{frame}[fragile]
\frametitle{}
\begin{block}{Créer une branche ou un tag}
\begin{enumerate}
\item mettez à jour votre copie de travail
\pause
\item revenez à la recine de la copie de travail: \verb+cd ..+
\item créez une branche: \verb+svn cp trunk branches/LOGIN+
\pause
\item commitez
\end{enumerate}
\end{block}
\pause
\vfill
\begin{block}{Discussion}
\begin{itemize}
\item Que donne \verb+svn log trunk+?
\item Que donne \verb+svn log+?
\pause
\item Et après \verb+svn update+?
\pause
\item Retournez dans trunk: \verb+cd trunk+
\end{itemize}
\end{block}
\end{frame}

\section{Diff et Merge}

\begin{frame}[fragile]
\frametitle{svn diff}
\begin{block}{diff et patch}
\begin{itemize}
\item \verb+diff -Naur+ produit la différence entre deux fichiers
\pause
\item \verb+patch+ applique une différence (produite par diff)
\end{itemize}
\end{block}
\pause
\vfill
\begin{block}{et Subversion ?}
Que donne:
\begin{enumerate}
\item \verb+svn diff+?
\pause
\item \verb+svn diff -r2:4+?
\pause
\item \verb+svn diff -r4:2+?
\end{enumerate}
\end{block}
\end{frame}

\begin{frame}[fragile]
\frametitle{Merge: Appliquer une modif sur une branche}
\begin{block}{Modifier votre FICHIER}
\begin{enumerate}
\item Ajouter devant le tag \verb+$Id$+: \og{}\verb+Ref: +\fg{}
\item commitez
\end{enumerate}
\end{block}
\pause
\vfill
\begin{block}{Mise ne pratique}
\begin{enumerate}
\item Repérez les numéros de révision que vous voulez appliquez (ici le dernier)
\pause
\item Repérez la source et la destination (chemin)
\pause
\item tapez \verb+svn merge -rN-1:N . ../branches/LOGIN+
\pause
\item commitez (attention au chemin)
\pause
\end{enumerate}
\end{block}
\end{frame}

\begin{frame}[fragile]
\frametitle{Merge: Annulez une modification}
\begin{block}{1ère étape:}
\begin{enumerate}
\item mettez à jour votre copie de travail
\item Editez le FICHIER2, sabotter la ligne (retirez l'auteur, ...):
\item commitez
\end{enumerate}
\end{block}
\pause
\vfill
\begin{block}{Annuler le changement}
\begin{enumerate}
\item mettez à jour votre copie de travail
\item regardez votre FICHIER
\pause
\item identifiez la révision fautive
\pause
\item tapez \verb+svn merge -rN:N' FICHIER+, où \verb+N+ est le numéro de
révision et \verb+N'+ le numéro précédent.
\pause
\item commitez
\end{enumerate}
\end{block}
\end{frame}

\section{Conflits}

\begin{frame}[fragile]
\frametitle{Gérer un conflit}
\begin{block}{Modification du FICHIER:}
\begin{enumerate}
\item ajouter le titre à la suite du nom de l'auteur:
\begin{verbatim}
-- Auteur, Titre
\end{verbatim}
\pause
\item commitez
\end{enumerate}

que se passe-t-il ?
\end{block}
\vfill
\pause
\begin{block}{Corriger le pb: svn update}
{\small
\begin{verbatim}
Sélectionner : (p) report, (df) diff entier, (e) édite,
        (mc) mes conflits, (tc) autres conflits,
        (s) affiche toutes les options :
\end{verbatim}
}
Choisissez \verb+p+ (report)
\begin{itemize}
\item Que dit \verb+svn update+?
\item Que contient FICHIER ?
\end{itemize}
\end{block}
\end{frame}

\begin{frame}[fragile]
\frametitle{Régler le conflit}
\begin{block}{Pratique}
\begin{enumerate}
\item corrigez le contenu du fichier
\pause
\item enlever le marqueur de conflit: \verb+svn resolved FICHIER+
\pause
\item commitez
\end{enumerate}
\end{block}
\end{frame}

\begin{frame}
\frametitle{Régler un conflit}
\begin{block}{Discussion: svn update}
{\small
\begin{itemize}
\item{(e)  édite:} résout manuellement le conflit avec un éditeur
\item{(df) diff complet:} montre toutes les différences du fichier fusionné
\item{(r)  résolu:} utilise la version fusionnée
\item{(dc) affiche conflits:} affiche tous les conflits (ignore version fusionnée)
\item{(mc) mes conflits:} accepte ma version pour tous les conflits
\item{(tc) autres conflits:} accepte l'autre version pour tous les conflits
\item{(m) mien complet:} utilise ma version (ignore les autres éditions)
\item{(tf) autre complet:} prends la version du dépôt (perds mes éditions)
\item{(p)  report:} marque ce conflit pour résolution ultérieure
\item{(l)  lance:} utilise un outil externe pour résoudre le conflit
\end{itemize}
}
\end{block}
\end{frame}

\include{cc_by_sa}

\begin{frame}
\frametitle{Merci}
\center{
\huge{Questions ?}

\huge{Boule de poils:}

\includegraphics[width=0.4\linewidth]{Abrichatons}

\small{(c) Wikipédia}
}
\end{frame}


\end{document}
