La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006."— Transcription de la présentation:

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

2 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) …

3 3 / 66 De nombreux outils à laide du développeur Les IDE Lautomatisation de tests Les gestionnaires de bogues, de demandes de fonctionnalités Les générateurs de documentation Les systèmes de gestion de version

4 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…

5 5 / 66 … qui justifient leffort de prise en main commit tag branches repository HEAD BASE update version check out modules merge conflict diff patch trunk

6 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

7 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 dutilisation de Subversion

8 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 …

9 Concepts et opérations de base Travailler à plusieurs avec Subversion Gérer les diffusions : étiquettes et branches Opérations avancées Divers

10 10 / 66 Un référentiel central et une copie de travail Référentiel Copie de travail dAlice svn checkout svn commit alice$work > svn co myProject alice$work > svn commit myProject alice$work > svn commit myProject/file1.pl trunk/

11 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 lappli (scripts dinstallation par exemple) –la documentation du produit sauf ce qui peut être généré automatiquement (JavaDoc par exemple)

12 12 / 66 Récupérer nimporte quelle révision : svn checkout alice$work > svn co –r 2 myProject A myProject/trunk/file1.pl A myProject/trunk/file2.pl Checkout revision 2. Par un numéro de révision alice$work > svn co –r { } A myProject/trunk/file1.pl A myProject/trunk/file2.pl Checkout revision 1. Par une date Mettre à jour une copie locale : svn update alice$work > svn update myProject U myProject/file1.pl U myProject/file2.pl Updated to revision 3.

13 13 / 66 Connaître lorigine de sa copie locale : svn info alice$work > svn info myProject Path: myProject URL: Repository UUID: d6959e13-b0o u654-a2v3e0b6c323 Revision: 2 Node Kind: directory Schedule: normal Last Changed Author: alice Last Changed Rev: 2 Last Changed Date: :07:15 […]

14 14 / 66 Les autres opérations sur le référentiel svn add, copy, delete, move Référentiel Copie de travail dAlice svn checkout svn add svn commit 3 4 alice$work > svn add myProject/file3.pl alice$work > svn commit myProject/file3.pl alice$work > svn delete trunk/

15 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é

16 16 / 66 Connaître létat de sa copie locale : svn status Référentiel 3 Copie de travail dAlice svn checkout trunk/ svn delete svn add alice$work > svn status myProject M myProject/file1.pl D + myProject/file2.pl A + myProject/file4.pl ? myProject/file5.pl ! myProject/file3.pl

17 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

18 18 / 66 Connaître lhistorique des modifications : svn log alice$work > svn log myProject/file1.pl r3 | Alice | :43:22 (Thu, 9 Mar 2006) Ajout de la gestion des sessions r2 | Alice | :34:12 (Wed, 01 Feb 2006) Désormais on whitelist le format des paramètres CGI r1 | Alice | :34:12 (Tue, 10 Jan 2006) Import initial alice$work > svn log –r 2 –v myProject/file1.pl r2 | Alice | :34:12 (Wed, 01 Feb 2006) Changed paths: MmyProject/file1.pl MmyProject/file2.pl Désormais on whitelist le format des paramètres CGI

19 19 / 66 Connaître les modifications : svn diff Jean Adresses Jean David Contacts.txt Contacts.txt (copie de travail) 1 svn diff Contacts.txt Index: Contacts.txt ================ --- Contacts.txt (revision 1) +++ Contacts.txt (working copy) -1,2 +1, Adresses Jean + David

20 20 / 66 HEAD, BASE, COMMITED, PREV Référentiel Copie de travail dAlice svn checkout HEAD 5 BASE alice$myProject > svn diff file1.pl PREV COMMITED alice$myProject > svn diff –r BASE:HEAD file1.pl alice$myProject > svn diff –r PREV:COMMITED file1.pl trunk/

21 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

22 22 / 66 Annuler des modifications dans la copie de travail Référentiel Copie de travail dAlice svn checkout svn commit 1 2 alice$work > svn revert myProject/File1.pl Reverted File1.pl trunk/ svn revert

23 23 / 66 svn log File1.pl ; svn diff –r 215:216 File1.pl Annuler des modifications dans le référentiel Référentiel trunk/ svn checkout 419 svn commit svn merge svn merge –r216:215 File1.pl

24 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

25 25 / 66 Des conflits peuvent survenir Référentiel svn checkout svn commit 1 2 Copie de travail dAlice Copie de travail de Bob svn checkout svn commit trunk/

26 26 / 66 Résolution des conflits Référentiel svn checkout svn commit 1 2 Copie de travail dAlice Copie de travail de Bob svn checkout svn commit bob$myProject > svn commit File1.pl SendingFile1.pl svn: commit failed (details follow): svn: Out of date: /myProject/File1.pl in transaction 4 svn update bob$myProject > svn update File1.pl GFile1.pl Updated to revision 2 trunk/

27 27 / 66 Si les modifications concernent des lignes différentes Un Deux Trois Quatre Zéro Un Deux Trois Quatre Un Deux Trois QUATRE Zéro Un Deux Trois QUATRE svn update État « merGed » : G Zéro Un Deux Trois QUATRE svn commit Bob Alice

28 28 / 66 Si les modifications concernent les mêmes lignes Un Deux Trois Quatre Un Two Trois Quatre Un Dos Trois QUATRE Un <<<<.mine Two ==== Dos >>>>.r2 Deux Trois QUATRE svn update État « Conflict » : C File1.pl File1.pl.mine File1.pl.r2 File1.pl.r1

29 29 / 66 Si les modifications concernent les mêmes lignes Un <<<<.mine Two ==== Dos >>>>.r2 Trois QUATRE État « Conflict » : C Un Two Trois QUATRE résolution manuelle Un Two Trois QUATRE svn resolved Un Two Trois QUATRE svn commit

30 30 / 66 Cycle de travail typique 1. Mettre à jour sa copie de travail svn update 2. Apporter des modifications svn add / copy / delete / move 3. Visualiser les modifications svn status (-u) / diff / revert 4. Fusionner les modifications svn merge / resolved 5. Enregistrer ses modifications svn commit

31 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

32 32 / 66 Une étiquette est un nom donné à une révision Référentiel … … … 482 Étiquettes REL-0.9 REL-1.1a trunk/

33 33 / 66 Une étiquette est stockée comme une copie Référentiel … … … 482 svn mkdir trunk/ tags/ tags/REL-0.9 tags/REL-1.1a svn copy –r svn export

34 34 / 66 Exemple de diffusion dune release svn export 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.)

35 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

36 36 / 66 BUG-2561 Une branche est une autre ligne de développement trunk RB-O.8 Ligne principale Branche dexpérimentation Branche de diffusion Branche de correction de bogue TRY-new_cache

37 37 / 66 Une branche est stockée comme une copie Référentiel … … … 482 trunk/ tags/ branches/ … svn copy svn co RB-0.8 REL-0.8 svn copy

38 38 / 66 Le quotidien du subversif Camembert non contractuel

39 39 / 66 Propager la correction dun bogue simple 1. Faire un checkout de la branche où le bogue a été détecté svn co […] Checked out revision Corriger le bogue, tester le correctif 3. Enregistrer la correction dans le référentiel svn commit –m « correction du bogue #735 » […] Committed revision Faire un checkout de la branche où appliquer le correctif svn co 5. Y fusionner le correctif svn merge -r 219: Appliquer le résultat dans le référentiel avec svn commit

40 40 / 66 Propager la correction dun bogue complexe 1.Créer une branche de correction de bug BUG Créer une étiquette à partir de cette nouvelle branche, PRE Corriger le bug dans BUG-865. Plusieurs commit sont possibles. 4.Quand le bug est corrigé dans BUG-865, créer une étiquette POST 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 7. Faire le commit pour appliquer la correction dans la branche

41 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

42 Les propriétés

43 43 / 66 Les propriétés sont des méta données Associées à un fichier ou un répertoire Propriété = un nom + un contenu Définies et manipulées par les développeurs Elles sont versionnées

44 44 / 66 Propriété Fichier vignettelegende Picture1.jpg Coucher de soleil Picture2.jpg Forêt enneigée Picture3.jpg Collines brumeuses Exemples de propriétés

45 45 / 66 Manipuler des propriétés svn propset legende Coucher de soleil Picture1.jpg property legende set on Picture1.jpg svn propset vignette -F vignette1.jpg Picture1.jpg property vignette set on Picture1.jpg svn status Picture1.jpg MPicture1.jpg svn proplist Picture1.jpg properties on Picture1.jpg legende vignette svn propget legende Picture1.jpg Coucher de soleil svn propdel vignette Picture1.jpg propertuy vignette deleted from Pitcture1.jpg svn commit Picture1.jpg

46 46 / 66 Les propriétés particulières : svn:* svn:executable svn:mime-type –text/xml, image/jpg, application/msword… svn:eof-style svn:keywords svn:ignore svn propedit svn:ignore lib/ // en spécifiant par exemple la valeur *.bak

47 47 / 66 Définir automatiquement une propriété au niveau des clients, dans le fichier de configuration Subversion : –enable-auto-props = yes –[auto-props] *.jpg = svn:mime-type=image/jpg *.cpp = svn:eof-type=native –pour ignorer des types de fichier : global-ignores = *.log

48 48 / 66 Les propriétés de transactions et révisions svn:log svn:date svn:author Elles sont éditables (mais pas par défaut) : svn propset --revprop –r 491 svn:log correction bug #323 property svn:log set on repository revision 491 Elles ne sont pas versionnées

49 Partage de code entre plusieurs projets

50 50 / 66 Un référentiel peut inclure du code dun autre référentiel serveur Subversion myProject/ trunk/ doc/ src/ common/ trunk/ doc/ lib/ doc/ lib/ svn:externals

51 51 / 66 Méthode pour utiliser svn:external svn co myProject svn propset svn:externals common myProject property svn:externals set on myProject svn update myProject Fetching external item into common Acommon/doc Acommon/lib Updated external to revision 21 svn commit myProject

52 Les scripts associés

53 53 / 66 Un script associé est une action liée à un évènement enrichit le comportement de Subversion déclenchable lors dune action sur le référentiel –avant, pendant ou après un commit configuré au niveau du serveur Subversion

54 54 / 66 Exemples de scripts associés envoi dun de notification après chaque commit interdire les messages de journaux vides obliger à mentionner un numéro de bogue pour les messages de journaux dune certaine branche enrichir les règles de contrôle daccès déclencher une copie de sauvegarde du référentiel après chaque commit permettre la modification dun message de journal sauvegarder les valeurs des propriétés non versionnées …

55 Le verrouillage dans Subversion

56 56 / 66 Ce verrouillage « optimiste » est souvent suffisant Les conflits sont rares dans la vie « réelle » Différents développeurs peuvent travailler sur les mêmes fichiers mais normalement pas sur les mêmes parties

57 57 / 66 Le verrouillage dans Subversion 1.2 commande svn lock un fichier verrouillé a le status K ou O un commit réussi retire tous les verrous svn unlock est utilisable par tous les développeurs

58 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

59 59 / 66 Les clients et plugins Subversion Windows : TortoiseSVN Multi plateformes : RapidSVN, QSvn, Subcommander Eclipse : Subclipse, Subversive (beta) Visual Studio : AnkhSVN Emacs : psvn.el

60 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

61 61 / 66 Les protocoles daccès à Subversion svn:// svn+ssh:// https:// file://

62 Conclusion

63 63 / 66 Un outil puissant et efficace CVS sans les défauts Fiable et performant Excellentes documentations Modèle centralisé simple à appréhender

64 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 dun accès réseau pour nombre dopérations Une scission du projet est forcément binaire Une alternative : les VCS décentralisés (voir

65 65 / 66 Références Site : Doc officielle : Gestion de projet avec Subversion (OReilly) Pragmatic Version Control (Pragmatic Bookshelf)

66 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


Télécharger ppt "Subversion, un outil de gestion de version Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006."

Présentations similaires


Annonces Google