source: trunk/subversion/subversion.tex @ 70

Last change on this file since 70 was 70, checked in by nanardon, 18 years ago
  • more fix from chl
  • Property svn:keywords set to Id Author Revision
File size: 13.4 KB
RevLine 
[7]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}
[9]18    \maketitle
[7]19
[9]20    \part{Introduction}
[7]21
[9]22    \begin{slide}{Plan}
[7]23    \begin{itemize}
[56]24
25    \item{RCS et CVS}\\
26    Rappel
27    \item{Subversion}
[9]28        \begin{itemize}
[56]29        \item Administration
30        \item Commandes de base
[9]31        \end{itemize}
[56]32    \item{Autour de subversion}\\
33    Trac, svk, \ldots
[7]34    \end{itemize}
[9]35    \end{slide}
[7]36
[9]37    \begin{slide}{Généralités sur les VCS}
[64]38    Pourquoi utiliser un gestionnaire de versionnement ?
[9]39    \begin{itemize}
40        \item Archiver les différentes versions
41        \item Fournir n'importe quelle ancienne version
[51]42        \item Gérer le stockage concurrent
[9]43            \begin{itemize}
44                \item travail à plusieurs
[56]45                \item travail depuis plusieurs machines
[9]46            \end{itemize}
47    \end{itemize}
48    \end{slide}
49
50    \part{RCS et CVS}
51    \begin{slide}{RCS}
[51]52    Révision Control System (1991)
[11]53    \begin{itemize}
54        \item Projet GNU sous GPL
55        \item Dépôt décentralisé
56        \item Ne gère que des fichiers
[66]57        \item Se présente comme une suite de programmes\\
[11]58        {\small rcs ci co rcsdiff rlog rcsmerge rcsclean rcsfreeze}
59    \end{itemize}
[9]60    \end{slide}
61
62    \begin{slide}{CVS}
[12]63    Concurrent Versions System
[10]64    \begin{itemize}
65        \item Basé sur RCS
[51]66        \item Vieux\\
[10]67        {\small donc connu, courant et bien implanté}
[33]68        \item Dépôt centralisé
[10]69        \item Code monobloc
70    \end{itemize}
[64]71    \end{slide}
72   
[67]73    \begin{slide}{CVS: points faibles:}
[10]74    \begin{itemize}
75        \item Utilisation de \verb+$CVSROOT+ peu clair
[67]76        \item update ne crée pas les nouveaux répertoires\\
[10]77        {\small utilisation de -d}
[51]78        \item Étends toujours les mots clefs
[10]79        \item Pas de diff sur les nouveaux fichiers
80        \item Gestion des branches acrobatique
81    \end{itemize}
[9]82    \end{slide}
83
84    \part{Subversion}
[13]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}
[51]91        \item Février 2000: Début du développement par CollabNet
[13]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\\
[67]96    "Redistribution and use in source and binary forms, with or without
97    modification, are permitted (\ldots)"
[13]98    \end{itemize}
99    \end{slide}
100
101    \begin{slide}{CVS vs SVN}
102    \begin{itemize}
103    \item versionnement des répertoires
[16]104    \item numéros de révision unique au dépôt
[13]105    \item vrai historique\\
[19]106    {\small svn mv, svn cp}
[67]107    \item commits atomiques\\
[13]108    {\small tout ou rien}
109    \item metadonnées versionnées
[67]110    \item différentes méthodes d'accès aux dépôts\\
[13]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}
[14]117
[18]118    \begin{slide}{fonctionnement}
119    \begin{tabular}{lc}
120    La première fois:&
[38]121    \includegraphics*[height=0.5\textheight]{workco}\\
[23]122    \hline
[18]123    Après:&
[38]124    \includegraphics*[height=0.5\textheight]{workupdate}
[18]125    \end{tabular}
126    \end{slide}
127
[14]128    \begin{slide}{Administration}
[15]129    \begin{itemize}
130        \item elle doit se faire sur la machine elle même
[69]131        \item système de fichiers local
[15]132    \end{itemize}
133    \bigskip
[69]134    Création du dépôt:
[14]135    \begin{verbatim}
[15]136$ svnadmin create /tmp/repos
[14]137    \end{verbatim}
[52]138    Sauvegarde du dépôt:
[15]139    \begin{verbatim}
140$ svnadmin dump /tmp/repos > dump
141    \end{verbatim}
[14]142    \end{slide}
[18]143
[52]144    \begin{slide}{Accès au dépôt}
[18]145    Tout est url:
[19]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}
[18]152    \bigskip
[52]153    Pas de différence entre base du dépôt et chemin dans le dépôt:
[19]154
[35]155    \small\verb+file:///chemin/depot/sousrep/fichier+
[18]156    \end{slide}
157
[19]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\\
[67]164    update&up&mettre à jour une copie de travail\\
165    commit&&envoyer les modifications dans le dépôt\\
[19]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\\
[67]179    merge&&intégrer des changements à partir d'un diff\\
180    blame&&indiquer la révision des modifications (annotate)\\
[19]181    \end{tabular}
182    \end{small}
183    \end{slide}
184
[26]185    \begin{slide}{Créer une copie de travail}
186    Utilisation de \textit{checkout}
[19]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}
[26]198    \bigskip
[67]199    Subversion mémorise l'url du dépôt.
[18]200    \end{slide}
[19]201
[67]202    \begin{slide}{mettre à jour}
[26]203    \textit{svn update}
[19]204    \begin{itemize}
205        \item est récursif (voir -N)
[67]206        \item crée les nouveaux fichiers
[52]207        \item efface les anciens fichiers
208        \item donne un statut aux fichiers
[19]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
[27]223    \begin{slide}{soumettre les modifications}
224    \textit{svn commit}
[20]225    \begin{itemize}
226        \item est récursif (voir -N)
[67]227        \item seuls les fichiers précédemment ajoutés sont commités
[20]228        \item seuls les fichiers modifiés sont commités
229        \item log: utiliser -m ou placer \verb+$EDITOR+
230    \end{itemize}
231
[21]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}
[20]240   
241    \end{slide}
242
[29]243    \begin{slide}{ajouter / enlever des fichiers}
244    \textit{svn add}
[21]245    \begin{itemize}
246        \item est récursif (voir -N)
[67]247        \item est local (nécessite un commit)
[21]248    \end{itemize}
[29]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}
[21]255
256% TODO ajouter exemple
257    \end{slide}
258
[34]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
[67]265        \item deux révisions arbitraires
266        \item le chemin courant et un autre chemin
[34]267    \end{itemize}
[35]268    \bigskip
269    \textit{svn status}
[69]270    donne l'état de tous les fichiers
[35]271\begin{footnotesize}
272\begin{verbatim}
273$ svn status
274?      not_in_repos
275M      SPECS/postgresql.spec
276\end{verbatim}
277\end{footnotesize}
[34]278    \end{slide}
[35]279   
280    \begin{slide}{svn diff: exemple}
[36]281\begin{tiny}
[35]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
[34]290
[35]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}
[36]297\end{tiny}
[35]298
299    \end{slide}
[46]300   
[37]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
[46]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
[47]345    \begin{slide}{les "keywords"}
346    Ils ajoutent des informations de subversion dans le code source
347    \begin{itemize}
[67]348        \item ne sont pas activés par défaut
349        \item sont remplacés par \textit{export, checkout, update, commit}
[47]350    \end{itemize}
351    \bigskip
[49]352    Pour activer leur expansion:\\
353    \textit{svn propset svn:keywords Id fichier...}
354   
355    \bigskip
[47]356    Exemple:
[49]357    \bigskip
358    \begin{tiny}
[47]359    \begin{itemize}
[49]360        \item Id: \verb+$Id$+
361        \item Author: \verb+$Author$+
362        \item Revision: \verb+$Revision$+
[47]363    \end{itemize}
[49]364    \end{tiny}
[47]365    \end{slide}
366
[39]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 \textit{svn resolved}
378            \item corriger le code
379            \item commiter
380        \end{itemize}
381    \end{itemize}
382    \end{slide}
383
[40]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
[42]399    \begin{slide}{Les tags, les branches}
[70]400    Les branches et les tags sont des copies de fichiers:
[42]401    \begin{itemize}
402        \item avec \textit{svn copy}
[52]403        \item les données ne sont pas dupliquées dans le dépôt
[42]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
[34]412    \part{Autour de subversion}
413
[37]414    \begin{slide}{viewcvs}
415    \begin{figure}[htb]
[38]416    \includegraphics[width=90mm]{viewcvs}
[37]417    \end{figure}
418    \end{slide}
[41]419   
420    \begin{slide}{trac}
421    \begin{figure}[htb]
422    \includegraphics[width=90mm]{trac}
423    \end{figure}
424    \end{slide}
[37]425
[45]426    \begin{slide}{trac, quelques mots}
[67]427    Outil global de suivit de projet:
[45]428    \begin{itemize}
[52]429        \item écrit en python
[67]430        \item base de données SQL (sqlite, postgres depuis la 0.9.2)
[45]431        \item cgi, mod\_python ou démon
432    \end{itemize}
433    \bigskip
434    Trac apporte
435    \begin{itemize}
436        \item un wiki
437        \item un suivi des bugs et des fonctionnalités demandées
[64]438        \item un navigateur de dépôt subversion
[45]439        \item suivi des révisions vis à vis des bugs
440    \end{itemize}
441    \end{slide}
442
[50]443    \begin{slide}{svk}
[54]444    Apporte:
445    \begin{itemize}
[67]446        \item une gestion décentralisée
[54]447        \item travail hors connexion
448    \end{itemize}
449    \bigskip
450    \begin{itemize}
451        \item écrit en perl
[67]452        \item écrit pour subversion
[65]453        \item basé sur/utilise subversion
[54]454        \item gère également CVS
455    \end{itemize}
[55]456    \bigskip
457    SVK a malheureusement des limitations (nfs, double dépôt).
[50]458    \end{slide}
459
460    \begin{slide}{cvs2svn}
[52]461    Converti un dépôt cvs en dépôt subversion
[50]462    \begin{scriptsize}(comme son nom ne l'indique pas)\end{scriptsize}
463
464    \bigskip
465    Il fonctionne globalement bien mais\ldots
466    \begin{itemize}
467        \item faire attention aux "keywords"
468        \item faire attention aux EOL pour les binaires
469        \item ne fonctionne pas toujours
470    \end{itemize}
471    \end{slide}
[53]472   
473    \part{Conclusion}
[50]474
[53]475    \begin{slide}{Résumé}
476    Points forts:
477    \begin{itemize}
[70]478        \item simple à comprendre et à mettre en \oe uvre
[53]479        \item pas de gros changement par rapport à CVS
480        \item efficace
481    \end{itemize}
482   
483    Mais:
484    \begin{itemize}
[65]485        \item reste un VCS centralisé
[53]486        \item reste sur une base purement incrémentale
487    \end{itemize}
488    \end{slide}
489   
490    \begin{slide}{Fin}
491    \begin{huge}
492    Questions ?
493    \end{huge}
494    \bigskip
495   
[70]496    De toutes façons y'a plein de documentations
[53]497    sur le net: \verb+http://subversion.tigris.org/+.
[65]498
499    \bigskip
500    \bigskip
501    \footnotesize{Merci à misc :)}
[53]502    \end{slide}
[7]503\end{document}
Note: See TracBrowser for help on using the repository browser.