source: trunk/subversion/subversion.tex @ 124

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