subversion, un outil de gestion de version florent guilleux, comité réseau des universités...

55
Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

Upload: severe-fevre

Post on 04-Apr-2015

106 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

Subversion, un outil de gestion de version

Florent Guilleux, Comité Réseau des Universités

TutoJRES 01, Juin 2006

Page 2: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

2 / 66

Le développement de logiciel est une tâche complexe

• Mode de développement ouvert :– contributeurs extérieurs– relations à distance (mail, IRC, etc.)

• Gestion des diffusions (releases, correctifs de sécurité, etc.)

• Dépendances multiples (bibliothèques)

• …

Page 3: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

3 / 66

De nombreux outils à l’aide du développeur

• Les IDE

• L’automatisation de tests

• Les gestionnaires de bogues, de demandes de fonctionnalités

• Les générateurs de documentation

• Les systèmes de gestion de version

Page 4: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

4 / 66

Le versionning apporte de nombreux gains

• Retours en arrière et corrections toujours possibles

• Historique de toutes les opérations

• Indispensable pour le travail en équipe

• Travaux en parallèle sur plusieurs branches

• Pour du code mais aussi un site web, de la doc…

Page 5: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

5 / 66

… qui justifient l’effort de prise en main

commit

tag branches

repository

HEAD

BASEupdate

version

check out

modules

merge

conflict

diff

patchtrunk

Page 6: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

6 / 66

Subversion est un outil fiable et puissant

• CVS sans les défauts + de nouvelles fonctionnalités

• Prise en main aisée, excellentes documentations

• Open source, disponible sur de nombreuses plate formes

• Éprouvé et fiable

Page 7: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

7 / 66

À qui profite la Subversion ?

• Pour les développeurs– utilisation complète

• Pour les utilisateurs « avancés » (ou impatients) du produit– export, récupération de patchs

• Pour les utilisateurs finaux du produit– pas d’utilisation de Subversion

Page 8: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

8 / 66

Pour les utilisateurs de CVS• les commits sont atomiques

• les numéros de révision sont différents

• les répertoires et méta données sont versionnés

• une vraie commande move

• status, diff et revert sont des opérations déconnectées

• …

http://svnbook.red-bean.com/en/1.0/apa.html

Page 9: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

Concepts et opérations de base

Travailler à plusieurs avec Subversion

Gérer les diffusions : étiquettes et branches

Opérations avancées

Divers

Page 10: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

10 / 66

Un référentiel central et une copie de travail

Référentiel

Copie de travail d’Alice

svn checkout svn commit svn commit

1 2 3

alice$work > svn co http://subversion.example.com/myProject/trunk myProjectalice$work > svn commit myProjectalice$work > svn commit myProject/file1.pl

trunk/

Page 11: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

11 / 66

Que faut-il enregistrer dans un référentiel ?

• tout ce qui peut est susceptible de changer au cours du temps– le code

– + ce qui sert au déploiement de l’appli (scripts d’installation par exemple)

– la documentation du produit

• sauf ce qui peut être généré automatiquement (JavaDoc par exemple)

Page 12: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

12 / 66

Récupérer n’importe quelle révision : svn checkout

alice$work > svn co –r 2 http://subversion.example.com/myProject myProjectA myProject/trunk/file1.plA myProject/trunk/file2.plCheckout revision 2.

• Par un numéro de révision

alice$work > svn co –r {2006-01-15} http://subversion.example.com/myProjectA myProject/trunk/file1.plA myProject/trunk/file2.plCheckout revision 1.

• Par une date

• Mettre à jour une copie locale : svn updatealice$work > svn update myProjectU myProject/file1.plU myProject/file2.plUpdated to revision 3.

Page 13: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

13 / 66

Connaître l’origine de sa copie locale : svn info

alice$work > svn info myProjectPath: myProjectURL: http://subversion.example.com/myProject/trunkRepository UUID: d6959e13-b0o4-0673-7u654-a2v3e0b6c323Revision: 2Node Kind: directorySchedule: normalLast Changed Author: aliceLast Changed Rev: 2Last Changed Date: 2006-02-14 12:07:15 […]

Page 14: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

14 / 66

Les autres opérations sur le référentiel

svn add, copy, delete, moveRéférentiel

Copie de travail d’Alice

svn checkout svn addsvn commit

3 4

alice$work > svn add myProject/file3.plalice$work > svn commit myProject/file3.plalice$work > svn delete http://subversion.example.com/myProject/trunk/file2.pl

trunk/

Page 15: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

15 / 66

Quand faut-il faire des commit ?

• Souvent

• Après avoir testé et validé ses modifications

• En groupant dans un commit les modifications qui correspondent à une même fonctionnalité

Page 16: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

16 / 66

Connaître l’état de sa copie locale : svn statusRéférentiel

3

Copie de travail d’Alice

svn checkout

1

2

3

trunk/

svn delete svn add

4

1

4

5

alice$work > svn status myProjectM myProject/file1.plD + myProject/file2.plA + myProject/file4.pl? myProject/file5.pl! myProject/file3.pl

Page 17: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

17 / 66

Les messages de journal (logs)

• A chaque commit est associé un message de journal

alice$work > svn commit –m ‘chgt de $regexp’ myProject/file1.pl

• Le message doit indiquer pourquoi cette modification a été appliquée

-m ‘Désormais on whitelist le format des paramètres CGI’

Page 18: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

18 / 66

Connaître l’historique des modifications : svn log

alice$work > svn log myProject/file1.pl------------------------------------------------------r3 | Alice | 2006-03-09 16:43:22 (Thu, 9 Mar 2006)Ajout de la gestion des sessions------------------------------------------------------r2 | Alice | 2006-02-01 09:34:12 (Wed, 01 Feb 2006)Désormais on whitelist le format des paramètres CGI------------------------------------------------------r1 | Alice | 2006-01-10 09:34:12 (Tue, 10 Jan 2006)Import initial

alice$work > svn log –r 2 –v myProject/file1.pl------------------------------------------------------r2 | Alice | 2006-02-01 09:34:12 (Wed, 01 Feb 2006)Changed paths:

M myProject/file1.plM myProject/file2.pl

Désormais on whitelist le format des paramètres CGI------------------------------------------------------

Page 19: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

19 / 66

Connaître les modifications : svn diff

EmailJean [email protected]

AdressesJean [email protected] [email protected]

Contacts.txt Contacts.txt (copie de travail)1

svn diff Contacts.txtIndex: Contacts.txt================--- Contacts.txt (revision 1)+++ Contacts.txt (working copy)@@ -1,2 +1,3 @@- Email+ Adresses Jean [email protected]+ David [email protected]

Page 20: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

20 / 66

HEAD, BASE, COMMITED, PREVRéférentiel

Copie de travail d’Alice

svn checkout

1 2 3 4

HEAD

5

BASE

alice$myProject > svn diff file1.pl

PREV COMMITED

alice$myProject > svn diff –r BASE:HEAD file1.plalice$myProject > svn diff –r PREV:COMMITED file1.pl

trunk/

Page 21: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

21 / 66

svn diff permet de créer des patch

dave$myProject > svn diff file1.pl > Dave.patch

alice$myProject > patch –p0 -i Dave.patch

Page 22: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

22 / 66

Annuler des modifications dans la copie de travail

Référentiel

Copie de travail d’Alice

svn checkout svn commit

1 2

alice$work > svn revert myProject/File1.plReverted ‘File1.pl’

trunk/

svn revert

Page 23: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

23 / 66

svn log File1.pl ; svn diff –r 215:216 File1.pl

Annuler des modifications dans le référentiel

Référentiel

215 216 418trunk/

svn checkout

419

svn commit

svn merge

svn merge –r216:215 File1.pl

Page 24: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

Concepts et opérations de base

Travailler à plusieurs sur un référentiel

Gérer les diffusions : étiquettes et branches

Opérations avancées

Divers

Page 25: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

25 / 66

Des conflits peuvent survenir

Référentiel

svn checkout svn commit

1 2

Copie de travail d’Alice

Copie de travail de

Bobsvn checkout svn commit

trunk/

Page 26: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

26 / 66

Résolution des conflits

Référentiel

svn checkout svn commit

1 2

Copie de travail d’Alice

Copie de travail de

Bobsvn checkout

svn commit

bob$myProject > svn commit File1.plSending File1.plsvn: commit failed (details follow):svn: Out of date: ‘/myProject/File1.pl’ in transaction ‘4’

svn update

bob$myProject > svn update File1.plG File1.plUpdated to revision 2

trunk/

Page 27: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

27 / 66

Si les modifications concernent des lignes différentes

UnDeuxTroisQuatre

ZéroUnDeuxTroisQuatre

UnDeuxTroisQUATRE

ZéroUnDeuxTroisQUATRE

svn update

État « merGed » : G

ZéroUnDeuxTroisQUATRE

svn commit

Bob

Alice

Page 28: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

28 / 66

Si les modifications concernent les mêmes lignes

UnDeuxTroisQuatre

UnTwoTroisQuatre

UnDosTroisQUATRE

Un<<<< .mineTwo====Dos>>>> .r2DeuxTroisQUATRE

svn update

État « Conflict » : C

• File1.pl

• File1.pl.mine

• File1.pl.r2

• File1.pl.r1

Page 29: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

29 / 66

Si les modifications concernent les mêmes lignes

Un<<<< .mineTwo====Dos>>>> .r2TroisQUATRE

État « Conflict » : C

UnTwoTroisQUATRE

résolution manuelle

UnTwoTroisQUATRE

svn resolved

UnTwoTroisQUATRE

svn commit

Page 30: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

30 / 66

Cycle de travail typique1. Mettre à jour sa copie de travail

svn update

2. Apporter des modificationssvn add / copy / delete /

move

3. Visualiser les modificationssvn status (-u) / diff / revert

4. Fusionner les modifications svn merge / resolved

5. Enregistrer ses modificationssvn commit

Page 31: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

Concepts et opérations de base

Travailler à plusieurs sur un référentiel

Gérer les diffusions : étiquettes et branches

Opérations avancées

Divers

Page 32: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

32 / 66

Une étiquette est un nom donné à une révision

Référentiel

215 345 418… … …482

Étiquettes REL-0.9 REL-1.1a

trunk/

Page 33: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

33 / 66

Une étiquette est stockée comme une copie

Référentiel

215 345 418… … …482

svn mkdir http://subversion.example.com/myProject/tags

trunk/

tags/

tags/REL-0.9

tags/REL-1.1a

346

483

svn copy –r 345 http://subversion.example.com/myProject/trunk http://subversion.example.com/myProject/tags/REL-O.9svn export http://subversion.example.com/myProject/tags/REL-0.9

Page 34: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

34 / 66

Exemple de diffusion d’une release

svn export http://subversion.example.com/myProject/tags/REL-0.9 myProject

1. Utiliser la commande svn export (pas de méta données)

2. Faire un tar.gz du répertoire myProject

3. Le publier (web, FTP, etc.)

Page 35: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

35 / 66

Empêcher les commit dans tags

• souvent inutile, convention entre les développeurs

• si nécessaire utiliser un « script associé »

• parfois des exceptions, par exemple une étiquette latest-build

Page 36: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

36 / 66

BUG-2561

Une branche est une autre ligne de développement

trunk

RB-O.8

Ligne principale

Branche d’expérimentation

Branche de diffusion

Branche de correction de bogue

TRY-new_cache

Page 37: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

37 / 66

Une branche est stockée comme une copieRéférentiel

215 345 418… … …482trunk/

tags/

branches/ 216 217 … 314

315

svn copy http://subversion.example.com/myProject/trunk http://subversion.example.com/myProject/branches/RB-0.8

svn co http://subversion.example.com/myProject/branches/RB-0.8

RB-0.8

REL-0.8

svn copy http://subversion.example.com/myProject/branches/RB-O.8 http://subversion.example.com/myProject/tags/REL-0.8

Page 38: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

38 / 66

Le quotidien du subversif

Camembert non contractuel

ajout defonctionnalités

correction de bug,application dans lesbranches

préparation derelease

fusion de branches

Page 39: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

39 / 66

Propager la correction d’un bogue simple1. Faire un checkout de la branche où le bogue a été détecté

svn co http://subversion.example/myProject/branches/RB-0.8[…] Checked out revision 219

2. Corriger le bogue, tester le correctif

3. Enregistrer la correction dans le référentiel

svn commit –m « correction du bogue #735 »[…] Committed revision 220

4. Faire un checkout de la branche où appliquer le correctif

svn co http://subversion.example/myProject/trunk

5. Y fusionner le correctif

svn merge -r 219:220 http://subversion.example/myProject/branches/RB-O.8

6. Appliquer le résultat dans le référentiel avec svn commit

Page 40: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

40 / 66

Propager la correction d’un bogue complexe1. Créer une branche de correction de bug BUG-865

2. Créer une étiquette à partir de cette nouvelle branche, PRE-865.

3. Corriger le bug dans BUG-865. Plusieurs commit sont possibles.

4. Quand le bug est corrigé dans BUG-865, créer une étiquette POST-865.

5. Faire un checkout (ou update) de la branche à corriger

6. Utiliser PRE-865 et POST-865 pour fusionner le correctif dans la branche à corriger :

svn merge http://subversion.example/myProject/tags/PRE-865 http://subversion.example/myProject/tags/POST-865

7. Faire le commit pour appliquer la correction dans la branche

Page 41: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

Concepts et opérations de base

Travailler à plusieurs sur un référentiel

Gérer les diffusions : étiquettes et branches

Opérations avancées

Divers

Page 42: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

Partage de code entre plusieurs projets

Page 43: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

50 / 66

Un référentiel peut inclure du code d’un autre référentiel

serveur Subversion

myProject/

trunk/

doc/

src/

common/

common/

trunk/

doc/

lib/

doc/

lib/

svn:externals

Page 44: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

Les scripts associés

Page 45: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

53 / 66

Un script associé est une action liée à un évènement

• enrichit le comportement de Subversion

• déclenchable lors d’une action sur le référentiel– avant, pendant ou après un commit

• configuré au niveau du serveur Subversion

Page 46: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

54 / 66

Exemples de scripts associés• envoi d’un email de notification après chaque commit• interdire les messages de journaux vides• obliger à mentionner un numéro de bogue pour les

messages de journaux d’une certaine branche• enrichir les règles de contrôle d’accès• déclencher une copie de sauvegarde du référentiel

après chaque commit• permettre la modification d’un message de journal• sauvegarder les valeurs des propriétés non

versionnées• …

Page 47: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

Concepts et opérations de base

Travailler à plusieurs sur un référentiel

Gérer les diffusions : étiquettes et branches

Opérations avancées

Divers

Page 48: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

59 / 66

Les clients et plugins Subversion

• Windows : TortoiseSVN

• Multi plateformes : RapidSVN, QSvn, Subcommander

• Eclipse : Subclipse, Subversive (beta)

• Visual Studio : AnkhSVN

• Emacs : psvn.el

Page 49: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

60 / 66

Outils de navigation et API

• Outils de navigation– SVN::Web– ViewVC– WebSVN

• API– C, C++, Python, JAVA, Perl, Ruby, C#, PHP

• Installation ultra simplifiée pour Windows– SVN 1-Click Setup

Page 50: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

61 / 66

Les protocoles d’accès à Subversion

• svn://

• svn+ssh://

• http://

• https://

• file://

Page 51: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

Conclusion

Page 52: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

63 / 66

Un outil puissant et efficace

• CVS sans les défauts

• Fiable et performant

• Excellentes documentations

• Modèle centralisé simple à appréhender

Page 53: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

64 / 66

Mais des limites inhérentes au modèle centralisé

• Seuls des utilisateurs privilégiés peuvent écrire dans le référentiel

• Besoin d’un accès réseau pour nombre d’opérations

• Une scission du projet est forcément binaire

• Une alternative : les VCS décentralisés (voir http://2005.jres.org/paper/2.pdf)

Page 54: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

65 / 66

Références

• Site : http://subversion.tigris.org,

• Doc officielle : http://svnbook.red-bean.com

• Gestion de projet avec Subversion (O’Reilly)

• Pragmatic Version Control (Pragmatic Bookshelf)

Page 55: Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006

66 / 66

Traduction des termes

• branche = branche

• copie de travail = working copy

• dépôt = repository

• étiquette = tag

• message de journal = log

• propriété = property

• référentiel = repository

• révision = revision

• script associé = hook