source: trunk/subversion-short/subversion.tex @ 235

Last change on this file since 235 was 235, checked in by nanardon, 15 years ago
  • create a short talk of subversion from initial one
  • Property svn:keywords set to Id Author Revision
File size: 15.6 KB
Line 
1% $Id$
2\documentclass[notes]{beamer}
3%\documentclass[blends,frameColor,colorBG,pdf,ps2pdf]{prosper}
4\usepackage[frenchb]{babel}
5\usepackage[T1]{fontenc}
6\usepackage{multicol}
7\usepackage{moreverb}
8
9\mode<presentation>
10{
11  \definecolor{beamerstructure}{RGB}{143,79,112}
12  \definecolor{sidebackground}{RGB}{230,242,250}
13  \color{beamerstructure}
14  \usetheme[secheader]{Madrid}
15  \usepackage{times}
16  \userightsidebarcolortemplate{\color{sidebackground}}
17  \beamertemplateballitem
18}
19
20\AtBeginSection[]
21{
22\begin{frame}<beamer>
23    \frametitle{Plan}
24    \tableofcontents[currentsection,hideothersubsections]
25\end{frame}
26}
27
28\title{Subversion}
29\subtitle{parce que cvs sucks}
30\author{Olivier Thauvin}
31%%\email{olivier.thauvin@aerov.jussieu.fr}
32%%\institution{
33%%  \includegraphics*[height=0.3\textheight]{gnutux.eps}
34%%}
35
36\begin{document}
37   
38\begin{frame}
39    \maketitle
40\end{frame}
41
42\begin{frame}{Plan}
43    \tableofcontents
44\end{frame}
45
46\section*{Introduction}
47
48\begin{frame}{Généralités sur les VCS}
49\begin{block}{Pourquoi utiliser un gestionnaire de versionnement ?}
50    \begin{itemize}
51        \item Archiver pas à pas les modifications
52        \pause
53        \item Retrouver n'importe quelle ancienne version
54        \pause
55        \item Gérer le stockage concurrent
56        \pause
57            \begin{itemize}
58                \item travail à plusieurs
59                \item travail depuis plusieurs machines
60            \end{itemize}
61    \end{itemize}
62\end{block}
63
64\begin{block}{Plusieurs approches}
65    \pause
66    \begin{itemize}
67    \item centralisé vs décentralisé
68    \pause
69    \item révisions incrémentales vs patch
70    \end{itemize}
71\end{block}
72\end{frame}
73
74\section{RCS et CVS}
75
76\begin{frame}[fragile]
77    \frametitle{RCS}
78    \begin{block}{Révision Control System (1991)}
79    \begin{itemize}
80        \item Projet GNU sous GPL
81        \item Dépôt décentralisé
82        \item Ne gère que des fichiers
83        \item Se présente comme une suite de programmes\\
84        {\small \verb+rcs ci co rcsdiff rlog rcsmerge rcsclean rcsfreeze+}
85    \end{itemize}
86    \end{block}
87\end{frame}
88
89\begin{frame}{CVS}
90    \begin{block}{Concurrent Versions System}
91    \begin{itemize}
92        \item Basé sur RCS
93        \item Vieux\\
94        {\small donc connu, courant et bien implanté}
95        \item Dépôt centralisé
96        \item Code monobloc
97    \end{itemize}
98    \end{block}
99\end{frame}
100   
101\begin{frame}[fragile]
102    \frametitle{CVS: points faibles:}
103    \begin{block}{}
104    \begin{itemize}
105        \item Utilisation de \verb+$CVSROOT+ peu clair
106        \item update ne crée pas les nouveaux répertoires\\
107        {\small utilisation de -d}
108        \item Étends toujours les mots clefs
109        \item Pas de diff sur les nouveaux fichiers
110        \item Gestion des branches acrobatique
111    \end{itemize}
112    \end{block}
113\end{frame}
114
115\section{Subversion}
116
117\subsection{Présentation}
118
119\begin{frame}
120    \frametitle{Présentation}
121    \begin{block}{CVS++}
122    un successeur à CVS
123    \end{block}
124    \vfill
125    \pause
126    \begin{block}{Historique:}
127    \begin{itemize}
128        \item Février 2000: Début du développement par CollabNet
129        \item 31 Août 2001: subversion est sous subversion
130        \item 23 Février 2004: version 1.0.0
131    \end{itemize}
132    \end{block}
133    \vfill
134    \pause
135    \begin{block}{Un projet libre}
136    "Redistribution and use in source and binary forms, with or without
137    modification, are permitted (\ldots)"
138    \end{block}
139\end{frame}
140
141\begin{frame}
142    \frametitle{CVS vs SVN}
143    \begin{block}{}
144    \begin{itemize}
145    \item versionnement des répertoires
146    \pause
147    \item numéros de révision unique au dépôt
148    \pause
149    \item vrai historique\\
150    {\small svn mv, svn cp}
151    \pause
152    \item commits atomiques\\
153    {\small tout ou rien}
154    \pause
155    \item metadonnées versionnées
156    \pause
157    \item différentes méthodes d'accès aux dépôts\\
158    {\small local, ssh, http, svnserver}
159    \pause
160    \item gestion des branches revue\\
161    {\small comprendre, plus de branches ! :)}
162    \pause
163    \item fonctionne avec des librairies
164    \end{itemize}
165    \end{block}
166\end{frame}
167
168\subsection{Administration}
169
170\begin{frame}[fragile]
171    \frametitle{Administration}
172    \begin{block}{}
173    \begin{itemize}
174        \item elle doit se faire sur la machine elle même
175        \item système de fichiers local
176    \end{itemize}
177    \end{block}
178    \pause
179    \vfill
180    \begin{block}{Création du dépôt}
181    \begin{verbatim}
182$ svnadmin create /tmp/repos
183    \end{verbatim}
184    \end{block}
185    \pause
186    \vfill
187    \begin{block}{Sauvegarde du dépôt}
188    \begin{verbatim}
189$ svnadmin dump /tmp/repos > dump
190    \end{verbatim}
191    \end{block}
192\end{frame}
193
194\subsection{Utilisation}
195
196\begin{frame}
197    \frametitle{svn, commandes de base}
198    \begin{block}{}
199    \textbf{svn} \textit{options} commande
200    \bigskip
201    \begin{small}
202    \begin{tabular}{lll}
203    checkout&co&créer une copie de travail\\
204    update&up&mettre à jour une copie de travail\\
205    commit&&envoyer les modifications dans le dépôt\\
206    add&&prendre en charge un nouveau fichier\\
207    rm&&"éfface" un fichier\\
208    help&&affiche l'aide\\
209    \end{tabular}
210    \end{small}
211    \end{block}
212\end{frame}
213
214\begin{frame}{svn, autres commandes}
215    \begin{block}{}
216    \textbf{svn} \textit{options} commande
217    \bigskip
218    \begin{small}
219    \begin{tabular}{lll}
220    diff&&obtenir un \textit{diff}\\
221    rm&&effacer un fichier\\
222    revert&&annuler les changements non commités\\
223    merge&&intégrer des changements à partir d'un diff\\
224    blame&&indiquer la révision des modifications (annotate)\\
225    \end{tabular}
226    \end{small}
227    \end{block}
228\end{frame}
229
230\begin{frame}[fragile]
231    \frametitle{Accès au dépôt}
232    \begin{block}{Tout est url:}
233    \begin{tabular}{ll}
234    local&\verb+file:///chemin+\\
235    http(s)&\verb+http://host/chemin+\\
236    ssh&\verb$svn+ssh://user@host/chemin$\\
237    svnserv&\verb+svn://user@host/chemin+
238    \end{tabular}
239    \end{block}
240    \vfill
241    \pause
242
243    \begin{block}{Accès au sein du dépôt}
244    \small\verb+file:///chemin/depot/sousrep/fichier+
245    \end{block}
246\end{frame}
247
248\begin{frame}
249    \frametitle{Fonctionnement}
250    \begin{columns}                                                                                                                     
251    \column{.4\textwidth
252    \begin{block}{La première fois:}
253    \includegraphics[height=0.4\textheight]{workco}\\
254    \end{block}
255    \column{.4\textwidth
256    \pause
257    \begin{block}{Au quotidien:}
258    \includegraphics[height=0.4\textheight]{workupdate}\\
259    \end{block}
260    \end{columns}
261\end{frame}
262
263\begin{frame}[fragile]
264    \frametitle{Créer une copie de travail}
265    \begin{exampleblock}{Utilisation de \textit{checkout}}
266\begin{scriptsize}
267\begin{verbatim}
268$ svn co http://virgo/svn/[...]/subversion/ subversion/
269A    subversion/workco.fig
270A    subversion/workupdate.fig
271A    subversion/Makefile
272A    subversion/subversion.tex
273Révision 18 extraite.
274$ cd subversion/
275\end{verbatim}
276\end{scriptsize}
277\end{exampleblock}
278    \vfill
279\begin{alertblock}{}
280    Subversion mémorise l'url du dépôt.
281\end{alertblock}
282\end{frame}
283
284\begin{frame}[fragile]
285    \frametitle{mettre à jour}
286    \begin{block}{svn update}
287    \begin{itemize}
288        \item est récursif (voir -N)
289        \item crée les nouveaux fichiers
290        \item efface les anciens fichiers
291        \item donne un statut aux fichiers
292    \end{itemize}
293    \end{block}
294\vfill
295\pause
296\begin{exampleblock}{}
297\begin{footnotesize}
298\begin{verbatim}
299$ svn update
300U    subversion.tex
301Actualisé à la révision 18.
302$ svn update -r 17 subversion.tex
303U    subversion.tex
304Actualisé à la révision 17.
305\end{verbatim}
306\end{footnotesize}
307\end{exampleblock}
308\end{frame}
309
310\begin{frame}[fragile]
311    \frametitle{soumettre les modifications}
312    \begin{block}{svn commit}
313    \begin{itemize}
314        \item est récursif (voir -N)
315        \item seuls les fichiers précédemment ajoutés sont commités
316        \item seuls les fichiers modifiés sont commités
317        \item log: utiliser -m ou placer \verb+$EDITOR+
318    \end{itemize}
319    \end{block}
320
321\vfill
322\pause
323\begin{exampleblock}{}
324\begin{footnotesize}
325\begin{verbatim}
326$ svn commit -m "- add commit frame"
327Envoi          subversion/subversion.tex
328Transmission des données .
329Révision 20 propagée.
330\end{verbatim}
331\end{footnotesize}
332\end{exampleblock}
333\end{frame}
334
335\begin{frame}{ajouter / enlever des fichiers}
336    \begin{block}{svn add}
337    \begin{itemize}
338        \item est récursif (voir -N)
339        \item est local (nécessite un commit)
340    \end{itemize}
341    \end{block}
342    \vfill
343    \pause
344    \begin{block}{svn remove}
345    \begin{itemize}
346        \item efface aussi le fichier local
347        \item est récursif (voir -N)
348    \end{itemize}
349    \end{block}
350
351% TODO ajouter exemple
352\end{frame}
353
354\begin{frame}[fragile]
355    \frametitle{Comparer}
356    \begin{block}{svn diff}
357    produit un \textit{diff} entre
358    \begin{itemize}
359        \item le fichier local et la révision courante
360        \item le fichier local et une révision arbitraire
361        \item deux révisions arbitraires
362        \item le chemin courant et un autre chemin
363    \end{itemize}
364    \end{block}
365    \vfill
366    \pause
367    \begin{block}{svn status}
368    donne l'état de tous les fichiers
369\begin{footnotesize}
370\begin{verbatim}
371$ svn status
372?      not_in_repos
373M      SPECS/postgresql.spec
374\end{verbatim}
375\end{footnotesize}
376\end{block}
377\end{frame}
378   
379\begin{frame}[fragile]
380\frametitle{svn diff: exemple}
381\begin{exampleblock}{svn diff}
382\begin{tiny}
383\begin{verbatim}
384Index: SPECS/postgresql.spec
385===================================================================
386--- SPECS/postgresql.spec       (révision 28)
387+++ SPECS/postgresql.spec       (copie de travail)
388@@ -17,7 +17,7 @@
389 %define current_major_version 8.1
390 %define current_minor_version 1
391
392-%define release %mkrel 3
393+%define release %mkrel 4
394
395 %define libname %mklibname pq %{major}
396 %define libecpg %mklibname ecpg %{major_ecpg}
397\end{verbatim}
398\end{tiny}
399\end{exampleblock}
400\end{frame}
401   
402\begin{frame}[fragile]
403\frametitle{voir l'historique}
404\begin{block}{svn log}
405affiche les... logs
406\end{block}
407\vfill
408\begin{exampleblock}{}
409\begin{tiny}
410\begin{verbatim}
411$ svn log SPECS/postgresql.spec
412------------------------------------------------------------------------
413r28 | nanardon | 2006-01-02 11:07:34 +0100 (lun, 02 jan 2006) | 1 line
414
415- remove jdbc
416------------------------------------------------------------------------
417r27 | nanardon | 2006-01-02 10:29:35 +0100 (lun, 02 jan 2006) | 1 line
418
419- postgresql-8.1.1-3mdk
420------------------------------------------------------------------------
421r2 | nanardon | 2005-12-26 03:28:50 +0100 (lun, 26 déc 2005) | 1 line
422
423Add postgresql
424------------------------------------------------------------------------
425\end{verbatim}
426\end{tiny}
427\end{exampleblock}
428\end{frame}
429
430\begin{frame}[fragile]
431\frametitle{rechercher d'où vient le code}
432\begin{block}{svn blame}
433affiche l'origine des lignes d'un fichier (révision, auteur et la ligne):
434\begin{tiny}
435\begin{verbatim}
436     7   nanardon \begin{document}
437     9   nanardon     \maketitle
438     7   nanardon
439     9   nanardon     \part{Introduction}
440     7   nanardon
441     9   nanardon     \begin{frame}{Plan}
442     7   nanardon     \begin{itemize}
443     9   nanardon       \item Généralités sur les VCS
444     9   nanardon       \item RCS et CVS
445     9   nanardon       \item Subversion
446     9   nanardon         \begin{itemize}
447    13   nanardon             \item Présentation
448\end{verbatim}
449\end{tiny}
450\end{block}
451\end{frame}
452
453\begin{frame}[fragile]
454\frametitle{les "keywords"}
455    Ils ajoutent des informations de subversion dans le code source
456    \begin{itemize}
457        \item ne sont pas activés par défaut
458        \item sont remplacés par \textit{export, checkout, update, commit}
459    \end{itemize}
460    \bigskip
461    Pour activer leur expansion:\\
462    \textit{svn propset svn:keywords Id fichier...}
463   
464    \bigskip
465    Exemple:
466    \bigskip
467    \begin{tiny}
468    \begin{itemize}
469        \item Id: \verb+$Id$+
470        \item Author: \verb+$Author$+
471        \item Revision: \verb+$Revision$+
472    \end{itemize}
473    \end{tiny}
474\end{frame}
475
476\begin{frame}[fragile]
477\frametitle{Gérer les conflits}
478    \begin{figure}[htb]
479    \includegraphics[height=0.3\textheight]{conflict}
480    \end{figure}
481    Si 2 commits sur le même fichier
482
483    \begin{itemize}
484    \item fusion automatique
485    \item conflit:
486        \begin{itemize}
487            \item corriger le code
488            \item \textit{svn resolved}
489            \item commiter
490        \end{itemize}
491    \end{itemize}
492\end{frame}
493
494\begin{frame}[fragile]
495    \frametitle{Annuler un changement}
496    \textit{svn merge} intègre les changements \verb+de:à+ dans
497    la copie de travail.
498    \bigskip
499    \begin{itemize}
500        \item les changements peuvent venir d'un autre chemin (branches)
501        \item n'agit que sur la copie locale (il faut commiter)
502    \end{itemize}
503   
504    \bigskip
505    \begin{figure}[htb]
506    \includegraphics[width=0.9\textwidth]{merge}
507    \end{figure}
508\end{frame}
509
510\begin{frame}[fragile]
511    \frametitle{Les tags, les branches}
512    Les branches et les tags sont des copies de fichiers:
513    \begin{itemize}
514        \item avec \textit{svn copy}
515        \item les données ne sont pas dupliquées dans le dépôt
516        \item l'historique est conservé
517    \end{itemize}
518    \bigskip
519    \begin{figure}[htb]
520    \includegraphics[width=0.9\textwidth]{branches}
521    \end{figure}
522\end{frame}
523
524    \section{Autour de subversion}
525
526    \begin{frame}{tortoisesvn}
527    Client subversion pour Windows
528
529    \begin{figure}[htb]
530    \includegraphics[height=60mm]{tortoisesvn}
531    \end{figure}
532   
533    \end{frame}
534
535    \begin{frame}{viewcvs}
536    \begin{figure}[htb]
537    \includegraphics[width=90mm]{viewcvs}
538    \end{figure}
539    \end{frame}
540   
541    \begin{frame}{trac}
542    \begin{figure}[htb]
543    \includegraphics[width=90mm]{trac}
544    \end{figure}
545    \end{frame}
546
547    \begin{frame}{trac, quelques mots}
548    Outil global de suivit de projet:
549    \begin{itemize}
550        \item écrit en python
551        \item base de données SQL (sqlite, postgres depuis la 0.9.2)
552        \item cgi, mod\_python ou démon
553    \end{itemize}
554    \bigskip
555    Trac apporte
556    \begin{itemize}
557        \item un wiki
558        \item un suivi des bugs et des fonctionnalités demandées
559        \item un navigateur de dépôt subversion
560        \item suivi des révisions vis à vis des bugs
561    \end{itemize}
562    \end{frame}
563
564    \begin{frame}{svk}
565    Apporte:
566    \begin{itemize}
567        \item une gestion décentralisée
568        \item travail hors connexion
569    \end{itemize}
570    \bigskip
571    \begin{itemize}
572        \item écrit en perl
573        \item écrit pour subversion
574        \item basé sur/utilise subversion
575        \item gère également CVS
576    \end{itemize}
577    \bigskip
578    SVK a malheureusement des limitations (nfs, double dépôt).
579    \end{frame}
580
581    \begin{frame}{cvs2svn}
582    Converti un dépôt cvs en dépôt subversion
583    \begin{scriptsize}(comme son nom ne l'indique pas)\end{scriptsize}
584
585    \bigskip
586    Il fonctionne globalement bien mais\ldots
587    \begin{itemize}
588        \item faire attention aux "keywords"
589        \item faire attention aux EOL pour les binaires
590        \item ne fonctionne pas toujours
591    \end{itemize}
592    \end{frame}
593   
594    \section{Conclusion}
595
596    \begin{frame}{Résumé}
597    Points forts:
598    \begin{itemize}
599        \item simple à comprendre et à mettre en \oe uvre
600        \item pas de gros changement par rapport à CVS
601        \item efficace
602    \end{itemize}
603   
604    Mais:
605    \begin{itemize}
606        \item reste un VCS centralisé
607        \item reste sur une base purement incrémentale
608    \end{itemize}
609    \end{frame}
610   
611    \begin{frame}{Fin}
612    \begin{huge}
613    Questions ?
614    \end{huge}
615    \bigskip
616   
617    De toutes façons y'a plein de documentations
618    sur le net: \url{http://subversion.tigris.org/}.
619
620    \bigskip
621    \bigskip
622    \footnotesize{Merci à misc :)}
623    \end{frame}
624\end{document}
Note: See TracBrowser for help on using the repository browser.