source: presentations/Subversion/subversion.html@ 118

Last change on this file since 118 was 118, checked in by perus, 19 years ago

Import

File size: 18.0 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" />
2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr" lang="fr">
3
4<head profile="http://purl.org/net/uriprofile/">
5 <title>JI'06:Subversion</title>
6
7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
8 <meta http-equiv="Content-Language" content="fr" />
9 <meta http-equiv="Content-Style-Type" content="text/css" />
10 <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
12 <meta name="author" content="Antoine P&eacute;rus &lt;perus@lal.in2p3.fr&gt;" />
13 <meta name="description" content="Pr&eacute;sentation de Subversion aux JI06 de Lyon" />
14 <meta name="keywords" content="XHTML, CSS, HTML, (X)HTML" />
15
16 <link rel="stylesheet" href="../Tools/v2/css/screen.css" type="text/css" media="screen, projection, tv, print" />
17 <link rel="stylesheet" href="../Tools/v2/Slidy/slidy-toc.css" type="text/css" media="screen, projection, print" />
18
19 <script src="../Tools/v2/Slidy/slidy.js" type="text/javascript"></script>
20 <script src="../Tools/v2/Slidy/slidy-toc.js" type="text/javascript"></script>
21</head>
22
23<body style="font-size: 18pt;">
24
25<!-- Introduction [Start] -->
26
27<div style="border-style: none; display: block; visibility: visible; position: absolute;" class="slide" id="cover">
28
29 <p id="title">Subversion</p>
30 <p id="subtitle">Un outil pour le d&#233;veloppement collaboratif</p>
31 <p id="author"><a href="mailto:perus@lal.in2p3.fr">Antoine P&eacute;rus</a>
32 <br /><a href="mailto:garnier@lal.in2p3.fr">Laurent Garnier</a>
33 </p>
34 <p id="date">20 Septembre 2006<br /></p>
35 <p id="event"><a href="http://ji.in2p3.fr/">Journ&eacute;es Informatique IN2P3-DAPNIA</a>, Lyon</p>
36
37</div>
38
39<!-- Introduction [Start] -->
40<h2 id="introduction">Introduction</h2>
41
42<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide" id="logo">
43
44 <h1>Plan</h1>
45
46 <ul class="outline">
47 <li>La gestion de version
48 <ul>
49 <li>comme outil de d&eacute;veloppement collaboratif</li>
50 <li>les diff&egrave;rents mod&egrave;les</li>
51 <li>CVS versus Subversion</li>
52 </ul>
53 </li>
54 <li>Passer de CVS &agrave; Subversion
55 <ul>
56 <li>quelques trucs
57 <ul>
58 <li>la commande <em>status</em>
59 </li>
60 <li>r&eacute;organisation</li>
61 <li><em>&eacute;tiquettes (tags)</em> et <em>branches</em></li>
62 <li><em>revert</em></li>
63 <li>la commande <em>log</em></li>
64 </ul>
65 </li>
66 </ul>
67 </li>
68 <li>Quelques "bonnes pratiques" avec Svn
69 <ul>
70 <li>&agrave; propos des <em>commits</em></li>
71 <li>&agrave; propos des branches</li>
72 <li>les <em>meta-donn&eacute;es (properties)</em></li>
73 <li>&agrave; propos des <em>locks</em></li>
74 <li>revenir sur un <em>commit</em></li>
75 <li>r&eacute;surection d'un fichier</li>
76 <li>basculer d'une branche &agrave; l'autre</li>
77 <li><em>monter</em> son d&eacute;p&ocirc;t</li>
78 </ul>
79 </li>
80 </ul>
81
82</div>
83
84<!-- Diapo -->
85<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide themes" >
86
87 <h1 class="hidden">Transition: VCS</h1>
88 <h2>
89 <span>Transition:<br /></span>
90 <abbr title="La gestion de version">La gestion de version ...</abbr>
91 </h2>
92
93</div>
94
95
96<!-- Diapo -->
97<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
98
99 <h1>La gestion de version</h1>
100
101 <ul class="incremental">
102 <li class="non-incremental">VCS : <em>Version Control System</em>
103 <p align="center"><br />un des principaux outils de travail collaboratif<br /></p>
104 </li>
105 <li>Pour qui ?
106 <ul>
107 <li>les d&eacute;veloppeurs</li>
108 <li>webmestres : gestion d'un site Web</li>
109 <li>administrateurs : gestion des fichiers de configuration</li>
110 <li>gestion d'une documentation, d'un support de cours</li>
111 </ul>
112 </li>
113 <li>Pour quoi ?
114 <ul>
115 <li>historique de toutes les op&eacute;rations</li>
116 <li>d&eacute;veloppement concurrent avec gestion des conflits</li>
117 <li>travail en parall&egrave;le sur plusieurs branches<br
118 /><br /></li>
119 </ul>
120 </li>
121 <li>
122 En fait, indispensable m&ecirc;me pour un utilisateur isol&eacute; !
123 </li>
124 </ul>
125
126</div>
127
128
129<!-- Diapo -->
130<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
131
132 <h1>Les syst&egrave;mes de gestion de version</h1>
133
134 <ul class="incremental">
135 <li>Le mod&egrave;le centralis&eacute;
136 <ul>
137 <li>
138 caract&eacute;ris&eacute; par un d&eacute;p&ocirc;t
139 (<em>repository</em>) privil&eacute;gi&eacute;
140 </li>
141 <li>CVS, Subversion (Svn)</li>
142 <li>politique stricte d'acc&egrave;s au d&eacute;p&ocirc;t<br
143 /><br /></li>
144 </ul>
145 </li>
146 <li>Le mod&egrave;le d&eacute;centralis&eacute; ou
147 r&eacute;parti
148 <ul>
149 <li>sans d&eacute;p&ocirc;t de r&eacute;f&eacute;rence ou privil&eacute;gi&eacute;</li>
150 <li>Arch, Darcs</li>
151 <li>chaque d&eacute;veloppeur peut avoir son
152 d&eacute;p&ocirc;t. <br />Outre un
153 <em>commit</em> dans son d&eacute;p&ocirc;t
154 personnel, il lui faudra &eacute;ventuellement synchroniser 2
155 d&eacute;p&ocirc;ts ou <em>commiter</em> &eacute;galement dans
156 un autre d&eacute;p&ocirc;t de centralisation, de publication par exemple.
157 </ul>
158 </li>
159 </ul>
160
161</div>
162
163
164<!-- Diapo -->
165<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
166
167 <h1>Quelques limitations de CVS ...</h1>
168
169 <ul class="outline">
170 <li>pas de commit atomique
171 <ul>
172 <li>l'unit&eacute; de travail de CVS est le fichier.<br />
173 Si on <em>commite</em> 2 fichiers, on n'a pas la garantie d'un
174 enregistrement complet.<br />
175 CVS g&egrave;re en effet l'historique
176 par fichier et non par diff&eacute;rence entre
177 r&eacute;visions (<em>patch</em>)
178 </li>
179 </ul>
180 </li>
181 <li>pas de renommage des fichiers
182 <ul>
183 <li>Un changement de nom fait perdre l'historique</li>
184 </ul>
185 </li>
186 <li>pas de gestion des m&eacute;ta-donn&eacute;es
187 <ul>
188 <li>les propri&eacute;t&eacute;s attach&eacute;es aux
189 documents, comme les permissions, le type du document,
190 etc. ne sont pas versionn&eacute;es</li>
191 </ul>
192 </li>
193 <li>l'utilisation des branches, ou travaux en parall&egrave;le,
194 est difficile
195 <ul>
196 <li>au point qu'on les &eacute;vite ...</li>
197 </ul>
198 </li>
199 <li>les r&eacute;pertoires ne sont pas versionn&eacute;s</li>
200 <li>tr&egrave;s contraint par le r&eacute;seau
201 <ul>
202 <li>La plupart des op&eacute;rations n&eacute;cessite d'&ecirc;tre connect&eacute; au d&eacute;p&ocirc;t</li>
203 </ul>
204 </li>
205 </ul>
206 </li>
207
208</div>
209
210
211<!-- Diapo -->
212<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
213
214 <h1>Qu'apporte Subversion ?</h1>
215
216 <p>C'est la r&eacute;impl&eacute;mentation compl&egrave;te de CVS,
217 suivant le m&ecirc;me mod&egrave;le &eacute;prouv&eacute;, mais
218 corrigeant l'essentiel de ces d&eacute;fauts</p>
219
220 <ul class="incremental">
221 <li>les <em>commits</em> sont atomiques</li>
222 <li>r&eacute;pertoires et m&eacute;ta-donn&eacute;es sont versionn&eacute;s</li>
223 <li><em>svn status</em>, <em>svn diff</em> et <em>svn revert</em> sont des op&eacute;rations d&eacute;connect&eacute;es</li>
224 <li>une gestion extr&egrave;mement simple et efficace des &eacute;tiquettes et des branches</li>
225 <li><em>commit</em> par <em>changeSet</em>, ou <em>revision</em>, et non par fichier s&eacute;par&eacute;ment</li>
226 </ul>
227
228</div>
229
230
231<!-- Diapo -->
232<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide themes" >
233
234 <h1 class="hidden">Transition: de CVS &agrave; Svn</h1>
235 <h2>
236 <span>Transition:<br /></span>
237 <abbr title="Passer de CVS &agrave; Svn">De CVS &agrave; Svn ...</abbr>
238 </h2>
239
240</div>
241
242
243<!-- Diapo -->
244<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
245
246 <h1>Subversion</h1>
247
248 <ul class="incremental">
249 <li class="non-incremental">
250 <p>Explicitement d&eacute;velopp&eacute; comme le successeur de
251 CVS<br /></p>
252 <p>Si on remplace dans la commande <em>cvs</em> par <em>svn</em>, un
253 utilisateur de CVS sera op&eacute;rationnel tr&egrave;s
254 rapidement. </p>
255 </li>
256 <li>Cependant, si le mod&egrave;le est similaire et les interfaces
257 tr&egrave;s proches, il y a quelques diff&eacute;rences importantes :
258 <ul class="incremental">
259 <li>Svn corrige un certain nombre d'insuffisances de CVS</li>
260 <li>Svn impl&eacute;mente diff&eacute;remment quelques notions
261 importantes :
262 <ul>
263 <li>&eacute;tiquette (tag),</li>
264 <li>branche,</li>
265 <li> ...</li>
266 </ul>
267 </li>
268 <li>Enfin, il y a quelques mauvaises habitudes induites par les
269 limitations de CVS et dont il vaut mieux se d&eacute;barrasser</li>
270 </ul>
271 </li>
272 </ul>
273
274</div>
275
276
277<!-- Diapo -->
278<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
279
280 <h1>Subversion : le mod&egrave;le</h1>
281
282 <div class="incremental" style="margin-left: 4em; position: relative;">
283 <img src="Images/modele1.png" alt="depot" style="position: static; vertical-align: bottom;" />
284 <img src="Images/modele2.png" alt="copies" style="position: absolute; left: 0pt; top: 0pt;" />
285 <img src="Images/modele3.png" alt="commit" style="position: absolute; left: 0pt; top: 0pt;" />
286 </div>
287
288</div>
289
290
291<!-- Diapo -->
292<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
293
294 <h1>L'aide en ligne</h1>
295
296 <pre>$> svn help</pre>
297 <pre class="output">
298usage: svn <subcommand> [options] [args]
299Subversion command-line client, version 1.4.0.
300Type 'svn help <subcommand>' for help on a specific subcommand.
301Type 'svn --version' to see the program version and RA modules
302 or 'svn --version --quiet' to see just the version number.
303
304Most subcommands take file and/or directory arguments, recursing
305on the directories. If no arguments are supplied to such a
306command, it recurses on the current directory (inclusive) by default.
307...</pre>
308 <pre>$> svn help merge</pre>
309 <pre class="output">
310merge: Applique les diff&eacute;rences entre deux sources &agrave; une copie de travail.
311usage : 1. merge URL1[@N] URL2[@M] [CHEMIN]
312 2. merge CHEMIN1@N CHEMIN2@M [CHEMIN]
313 3. merge [-c M|-r N:M] SOURCE[@REV] [CHEMIN]
314
315 1. Les URLs des deux r&eacute;f&eacute;rences sont pr&eacute;cis&eacute;es.
316 Les r&eacute;visions peuvent aussi &ecirc;tre pr&eacute;cis&eacute;es, si elles ne le
317 sont pas, la r&eacute;vision utilis&eacute;e est HEAD.
318
319 2. Les URLs sont d&eacute;duites des chemins dans la copie de travail.
320 Les r&eacute;visions doivent &ecirc;tre pr&eacute;cis&eacute;es.
321...</pre>
322</div>
323
324
325<!-- Diapo -->
326<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
327
328 <h1>Utiliser <em>svn status</em> pour faire le point</h1>
329
330 <p>Sous Svn, contrairement &agrave; CVS, la commande <em>status</em>
331 indique clairement ce qui a &eacute;t&eacute; modifi&eacute;
332 localement, et sans avoir besoin d'&ecirc;tre connect&eacute;.</p>
333
334 <div class="incremental">
335 <pre>
336 $> svn status
337 D BoardDao.php
338 A FebDao.php
339 M FebView.php
340 </pre>
341 <div>
342 <p>Et pour savoir si la copie locale est &agrave; jour :
343 <pre>
344 $> svn status --show-updates
345 D 182 BoardDao.php
346 * 182 FebController.php
347 A + 182 FebDao.php
348 M 182 FebView.php
349 Status against revision: 185
350 </pre>
351 </div>
352 </div>
353
354</div>
355
356
357<!-- Diapo -->
358<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
359
360 <h1>On peut <em>(r&eacute;)organiser</em> son espace comme on le veut</h1>
361
362 <p>La structuration du d&eacute;p&ocirc;t, son organisation est
363 libre et peut s'adapter compl&egrave;tement &agrave; son
364 mod&egrave;le de d&eacute;veloppement, qui peut &eacute;voluer.</p>
365
366 <p>&Agrave; tout moment, il est possible de changer l'organisation,
367 de d&eacute;placer, renommer, supprimer r&eacute;pertoires ou fichiers
368 simplement et sans perdre l'historique.</p>
369
370 <div class="incremental">
371 <pre>
372 $> svn mv oldName.cxx newName.cxx
373 A newName.cxx
374 D oldName.cxx
375 </pre>
376 <pre>
377 $> svn mv http://svn.lal.in2p3.fr/FEB/trunc/lib/oldName.cxx \
378 http://svn.lal.in2p3.fr/FEB/trunc/lib/newName.cxx \
379 -m "Renommage selon la nouvelle convention"
380 </pre>
381 </div>
382
383</div>
384
385
386<!-- Diapo -->
387<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
388
389 <h1>Log (1)</h1>
390
391 <p>La commande <em>log</em> de Svn est beaucoup plus utile que sa
392 version CVS</p>
393
394 <div class="incremental">
395 <pre>
396$> svn log -r475 -v
397------------------------------------------------------------------------
398r475 | aperus | 2006-06-21 23:25:29 +0200 (Wed, 21 Jun 2006) | 1 line
399Chemins modifi&eacute;s :
400 M /FEB/trunc/lib/DataTestStatGraph.php
401 M /FEB/trunc/lib/DataTestView.php
402 M /FEB/trunc/lib/FebView.php
403 M /FEB/trunc/lib/FebWidgets.php
404 M /FEB/trunc/lib/StatView.php
405 M /FEB/trunc/lib/StatWidgets.php
406
407Ticket #124 - Diverses corrections et am&eacute;liorations
408 </pre>
409 <pre>
410$> svn log -rHEAD:1 --limit 5 FebView.php
411 </pre>
412 </div>
413
414</div>
415
416<!-- Diapo -->
417<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
418
419 <h1>Log (2)</h1>
420
421 <ul class="incremental">
422 <li class="non-incremental">
423 <p>Si l'on demande un <em>svn log</em> tout de suite apr&egrave;s
424 avoir commit&eacute; des modifications, le dernier message de
425 <em>log</em> ne sera pas visible.</p>
426
427 <p>En effet, <em>commiter</em> ne met pas &agrave; jour
428 automatiquement ni son espace de travail, ni aucun autres
429 fichiers. Il faut d'abord mettre &agrave; jour avec <em>svn
430 update</em>.</p>
431 </li>
432 <li>Utile :
433 <pre>
434$> svn log --xml
435 </pre>
436 <p>produit une sortie en <strong>xml</strong>
437 qui peut ensuite &ecirc;tre utilis&eacute;e avec la feuille de style
438 <em>XSLT</em> qui va bien ...</p>
439 <pre class="output">
440&lt;?xml version="1.0"?&gt;
441&lt;log&gt;
442&lt;logentry
443 revision="475"&gt;
444&lt;date&gt;2006-06-21T21:25:29.198907Z&lt;/date&gt;
445&lt;paths&gt;
446&lt;path
447 action="M"&gt;/FEB/trunc/lib/StatWidgets.php&lt;/path&gt;
448 ...
449 </pre>
450 </li>
451
452</div>
453
454<!-- Diapo -->
455<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
456
457 <h1>Les &eacute;tiquettes et les branches</h1>
458
459 <p>Probablement une des plus grandes diff&eacute;rences avec CVS</p>
460
461 <ul class="incremental">
462 <li>Svn g&egrave;re les donn&eacute;es sous forme de
463 hi&eacute;rarchies de fichiers (<em>comme un filesystem</em>) :</li>
464 <li>
465 <ul class="non-incremental">
466 <li>r&eacute;f&eacute;rentiel, version tagg&eacute;e ou branches</li>
467 <li>pas de diff&eacute;rence entre les hi&eacute;rarchies</li>
468 </ul>
469 </li>
470 <li>Dans Svn tout se fait comme une <em>copie</em> :
471 <ul>
472 <li>R&eacute;f&eacute;rencement de la <strong>version V0.8</strong>
473 <pre>
474$> svn copy -m "Version V0.8" \
475 http://svn.lal.in2p3.fr/FEB/trunk \
476 http://svn.lal.in2p3.fr/FEB/tags/V0.8 </pre>
477 </li>
478 <li>R&eacute;f&eacute;rencement de la <strong>release V0.8.1</strong>
479 <pre>
480$> svn copy -m "Release V0.8.1" \
481 http://svn.lal.in2p3.fr/FEB/trunk \
482 http://svn.lal.in2p3.fr/FEB/branches/V0.8.1
483 </pre>
484 </li>
485 </li>
486 </ul>
487
488</div>
489
490<!-- Diapo -->
491<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide themes" >
492
493 <h1 class="hidden">Transition: bonnes pratiques</h1>
494 <h2>
495 <span>Transition:<br /></span>
496 <abbr title="Bonnes pratiques">Quelques bonnes pratiques ...</abbr>
497 </h2>
498
499</div>
500
501
502<!-- Diapo -->
503<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
504
505 <h1>&agrave; propos des <em>commits</em></h1>
506
507 <p>Commentaire</p>
508
509 <ul class="incremental">
510 <li> </li>
511 <li> </li>
512 </ul>
513
514</div>
515
516
517<!-- Diapo -->
518<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
519
520 <h1>Revenir sur un commit erronn&eacute;</h1>
521
522 <p>Commentaire</p>
523
524 <ul class="incremental">
525 <li> </li>
526 <li> </li>
527 </ul>
528
529</div>
530
531
532<!-- Diapo -->
533<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
534
535 <h1>&agrave; propos des branches</h1>
536
537 <p>Commentaire</p>
538
539 <ul class="incremental">
540 <li> </li>
541 <li> </li>
542 </ul>
543
544</div>
545
546
547<!-- Diapo -->
548<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
549
550 <h1>les <em>meta-donn&eacute;es (properties)</em></h1>
551
552 <p>Commentaire</p>
553
554 <ul class="incremental">
555 <li> </li>
556 <li> </li>
557 </ul>
558
559</div>
560
561
562<!-- Diapo -->
563<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
564
565 <h1>&agrave; propos des <em>locks</em></h1>
566
567 <p>Commentaire</p>
568
569 <ul class="incremental">
570 <li> </li>
571 <li> </li>
572 </ul>
573
574</div>
575
576
577<!-- Diapo -->
578<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
579
580 <h1>r&eacute;surection d'un fichier</h1>
581
582 <p>Commentaire</p>
583
584 <ul class="incremental">
585 <li> </li>
586 <li> </li>
587 </ul>
588
589</div>
590
591
592<!-- Diapo -->
593<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
594
595 <h1>basculer d'une branche &agrave; l'autre</h1>
596
597 <p>Commentaire</p>
598
599 <ul class="incremental">
600 <li> </li>
601 <li> </li>
602 </ul>
603
604</div>
605
606
607<!-- Diapo -->
608<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide">
609
610 <h1><em>monter</em> son d&eacute;p&ocirc;t</h1>
611
612 <p>Commentaire</p>
613
614 <ul class="incremental">
615 <li> </li>
616 <li> </li>
617 </ul>
618
619</div>
620
621<!-- Thank You [Start] -->
622<!-- Diapo -->
623<div style="border-style: none; display: none; visibility: hidden; position: absolute;" class="slide" id="thanks">
624
625 <p>Questions ?</p>
626
627</div>
628
629<!-- [End] -->
630
631</body>
632</html>
Note: See TracBrowser for help on using the repository browser.