% $Id$ \documentclass[blends,slideColor,colorBG,pdf,ps2pdf]{prosper} \usepackage[frenchb]{babel} \usepackage[T1]{fontenc} \usepackage{multicol} \title{Subversion} \subtitle{parce que cvs sucks} \author{Olivier Thauvin} \email{olivier.thauvin@aerov.jussieu.fr} %%\institution{ %% \includegraphics*[height=0.3\textheight]{gnutux.eps} %%} \NoFrenchBabelItemize \begin{document} \maketitle \part{Introduction} \begin{slide}{Plan} \begin{itemize} \item Généralités sur les VCS \item RCS et CVS \item Subversion \begin{itemize} \item Présentation \item Administration \item Utilisation \item Allez plus loin \end{itemize} \end{itemize} \end{slide} \begin{slide}{Généralités sur les VCS} Pourquoi utiliser un Version Control System ? \begin{itemize} \item Archiver les différentes versions \item Fournir n'importe quelle ancienne version \item Gerer le stockage concurrent \begin{itemize} \item travail à plusieurs \item travail depuis plusieurs machine \end{itemize} \end{itemize} \end{slide} \part{RCS et CVS} \begin{slide}{RCS} Revision Control System (1991) \begin{itemize} \item Projet GNU sous GPL \item Dépôt décentralisé \item Ne gère que des fichiers \item Se présente comme un suite de programmes\\ {\small rcs ci co rcsdiff rlog rcsmerge rcsclean rcsfreeze} \end{itemize} \end{slide} \begin{slide}{CVS} Concurrent Versions System \begin{itemize} \item Basé sur RCS \item Vieu\\ {\small donc connu, courant et bien implanté} \item Dépôt centralisé \item Code monobloc \end{itemize} Les points faibles: \begin{itemize} \item Utilisation de \verb+$CVSROOT+ peu clair \item update ne créer pas les nouveaux répertoires\\ {\small utilisation de -d} \item Etends toujours les mots clefs \item Pas de diff sur les nouveaux fichiers \item Gestion des branches acrobatique \end{itemize} \end{slide} \part{Subversion} \begin{slide}{Présentation} \begin{itemize} \item CVS++, se veut un remplaçant de CVS \item Historique: \begin{itemize} \item Février 2000: Début du dévelloppement par CollabNet \item 31 Août 2001: subversion est sous subversion \item 23 Février 2004: version 1.0.0 \end{itemize} \item est libre\\ Redistribution and use in source and binary forms, with or without modification, are permitted (\ldots) \end{itemize} \end{slide} \begin{slide}{CVS vs SVN} \begin{itemize} \item versionnement des répertoires \item numéros de révision unique au dépôt \item vrai historique\\ {\small svn mv, svn cp} \item commit atomiques\\ {\small tout ou rien} \item metadonnées versionnées \item différentes méthode d'accès aux dépots\\ {\small local, ssh, http, svnserver} \item gestion des branches revue\\ {\small comprendre, plus de branches ! :)} \item fonctionne avec des librairies \end{itemize} \end{slide} \begin{slide}{fonctionnement} \begin{tabular}{lc} La première fois:& \includegraphics*[height=0.5\textheight]{workco.eps}\\ \hline Après:& \includegraphics*[height=0.5\textheight]{workupdate.eps} \end{tabular} \end{slide} \begin{slide}{Administration} \begin{itemize} \item elle doit se faire sur la machine elle même \item système de fichier local \end{itemize} \bigskip Création du dépôt \begin{verbatim} $ svnadmin create /tmp/repos \end{verbatim} Sauvegarde du dépot: \begin{verbatim} $ svnadmin dump /tmp/repos > dump \end{verbatim} \end{slide} \begin{slide}{Accès au depôt} Tout est url: \begin{tabular}{ll} local&\verb+file:///chemin/+\\ http(s)&\verb+http://host/chemin+\\ ssh&\verb$svn+ssh://user@host/chemin$\\ svnserv&\verb+svn://user@host/chemin+ \end{tabular} \bigskip Pas de différence entre base du dépot et chemin dans le depôt: \small\verb+file:///chemin/depot/sousrep/fichier+ \end{slide} \begin{slide}{svn, commandes de base} \textbf{svn} \textit{options} commande \bigskip \begin{small} \begin{tabular}{lll} checkout&co&créer une copie de travail\\ update&up&mettre à jours une copie de travail\\ commit&&envoit les modifications dans le dépôt\\ add&&prendre en charge un nouveau fichier\\ \end{tabular} \end{small} \end{slide} \begin{slide}{svn, autres commandes} \textbf{svn} \textit{options} commande \bigskip \begin{small} \begin{tabular}{lll} diff&&obtenir un \textit{diff}\\ rm&&effacer un fichier\\ revert&&annuler les changements non commités\\ merge&&intégrer des changement à partir d'un diff\\ blame&&indiquer la révision des modifications\\ \end{tabular} \end{small} \end{slide} \begin{slide}{Créer une copie de travail} Utilisation de \textit{checkout} \begin{scriptsize} \begin{verbatim} $ svn co http://virgo/svn/[...]/subversion/ subversion/ A subversion/workco.fig A subversion/workupdate.fig A subversion/Makefile A subversion/subversion.tex Révision 18 extraite. $ cd subversion/ \end{verbatim} \end{scriptsize} \bigskip Subversion mémorise l'url du dépots. \end{slide} \begin{slide}{mettre à jours} \textit{svn update} \begin{itemize} \item est récursif (voir -N) \item créer les nouveaux fichiers \item éfface les anciens fichiers \item donne un status aux fichiers \end{itemize} \begin{footnotesize} \begin{verbatim} $ svn update U subversion.tex Actualisé à la révision 18. $ svn update -r 17 subversion.tex U subversion.tex Actualisé à la révision 17. \end{verbatim} \end{footnotesize} \end{slide} \begin{slide}{soumettre les modifications} \textit{svn commit} \begin{itemize} \item est récursif (voir -N) \item seuls les fichiers précédement ajouté sont commités \item seuls les fichiers modifiés sont commités \item log: utiliser -m ou placer \verb+$EDITOR+ \end{itemize} \begin{footnotesize} \begin{verbatim} $ svn commit -m "- add commit slide" Envoi subversion/subversion.tex Transmission des données . Révision 20 propagée. \end{verbatim} \end{footnotesize} \end{slide} \begin{slide}{ajouter / enlever des fichiers} \textit{svn add} \begin{itemize} \item est récursif (voir -N) \item est locale (nécéssite un commit) \end{itemize} \bigskip \textit{svn remove} \begin{itemize} \item efface aussi le fichier local \item est récursif (voir -N) \end{itemize} % TODO ajouter exemple \end{slide} \begin{slide}{Comparer} \textit{svn diff} produit un \textit{diff} entre \begin{itemize} \item le fichier local et la révision courante \item le fichier local et une révision arbitraire \item deux révisions arbitraire \item un autre chemin \end{itemize} \bigskip \textit{svn status} donne l'état de tout les fichiers \begin{footnotesize} \begin{verbatim} $ svn status ? not_in_repos M SPECS/postgresql.spec \end{verbatim} \end{footnotesize} \end{slide} \begin{slide}{svn diff: exemple} \begin{scriptsize} \begin{verbatim} Index: SPECS/postgresql.spec =================================================================== --- SPECS/postgresql.spec (révision 28) +++ SPECS/postgresql.spec (copie de travail) @@ -17,7 +17,7 @@ %define current_major_version 8.1 %define current_minor_version 1 -%define release %mkrel 3 +%define release %mkrel 4 %define libname %mklibname pq %{major} %define libecpg %mklibname ecpg %{major_ecpg} \end{verbatim} \end{scriptsize} \end{slide} \part{Autour de subversion} \end{document}