source: tags/20060223/subversion/subversion.tex @ 90

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