source: trunk/subversion/subversion.tex @ 392

Last change on this file since 392 was 392, checked in by nanardon, 11 years ago

conversion vers utf8

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