1 / 55

Subversion, un outil de gestion de version

Subversion, un outil de gestion de version. Florent Guilleux, Comité Réseau des Universités TutoJRES 01, Juin 2006. Le développement de logiciel est une tâche complexe. Mode de développement ouvert : contributeurs extérieurs relations à distance (mail, IRC, etc.)

devi
Download Presentation

Subversion, un outil de gestion de version

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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. 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

  4. 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. … qui justifient l’effort de prise en main trunk patch version commit modules diff tag merge branches BASE repository update HEAD conflict check out

  6. 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. À 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

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

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

  10. Un référentiel central et une copie de travail Référentiel trunk/ 1 3 2 svn checkout svn commit svn commit Copie de travail d’Alice alice$work > svn commit myProject alice$work > svn commit myProject/file1.pl alice$work > svn co http://subversion.example.com/myProject/trunk myProject

  11. 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)

  12. Récupérer n’importe quelle révision : svn checkout • Par un numéro de révision alice$work > svn co –r 2 http://subversion.example.com/myProject myProject A myProject/trunk/file1.pl A myProject/trunk/file2.pl Checkout revision 2. • Par une date alice$work > svn co –r {2006-01-15} http://subversion.example.com/myProject A myProject/trunk/file1.pl A myProject/trunk/file2.pl Checkout revision 1. • 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. Connaître l’origine de sa copie locale : svn info alice$work > svn info myProject Path: myProject URL: http://subversion.example.com/myProject/trunk Repository UUID: d6959e13-b0o4-0673-7u654-a2v3e0b6c323 Revision: 2 Node Kind: directory Schedule: normal Last Changed Author: alice Last Changed Rev: 2 Last Changed Date: 2006-02-14 12:07:15 […]

  14. Les autres opérations sur le référentiel svn add, copy, delete, move Référentiel trunk/ 3 4 svn checkout svn add svn commit Copie de travail d’Alice alice$work > svn delete http://subversion.example.com/myProject/trunk/file2.pl alice$work > svn commit myProject/file3.pl alice$work > svn add myProject/file3.pl

  15. 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. Connaître l’état de sa copie locale : svn status svn checkout Copie de travail d’Alice 1 1 2 3 4 5 alice$work > svn status myProject M myProject/file1.pl D + myProject/file2.pl A + myProject/file4.pl ? myProject/file5.pl ! myProject/file3.pl Référentiel 3 trunk/ svn delete 4 svn add

  17. 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. 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.pl M myProject/file2.pl Désormais on whitelist le format des paramètres CGI ------------------------------------------------------

  19. Connaître les modifications : svn diff Adresses Jean jean@example.com David david@example.com Email Jean jean@example.com 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,3 @@ - Email + Adresses Jean jean@example.com + David david@example.com

  20. HEAD, BASE, COMMITED, PREV PREV COMMITED Référentiel HEAD trunk/ 1 3 4 2 5 svn checkout Copie de travail d’Alice BASE alice$myProject > svn diff file1.pl alice$myProject > svn diff –r PREV:COMMITED file1.pl alice$myProject > svn diff –r BASE:HEAD file1.pl

  21. svn diff permet de créer des patch dave$myProject > svn diff file1.pl > Dave.patch alice$myProject > patch –p0 -i Dave.patch

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

  23. Annuler des modifications dans le référentiel 419 svn commit svn checkout Référentiel trunk/ 216 418 215 svn merge svn merge –r216:215 File1.pl svn log File1.pl ; svn diff –r 215:216 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. Des conflits peuvent survenir 2 Copie de travail de Bob svn commit svn checkout Référentiel trunk/ 1 svn checkout svn commit Copie de travail d’Alice

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

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

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

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

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

  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. Une étiquette est un nom donné à une révision REL-0.9 Référentiel 482 418 345 trunk/ 215 … … … REL-1.1a Étiquettes

  33. Une étiquette est stockée comme une copie Référentiel 482 trunk/ 418 345 215 … … … tags/REL-0.9 346 tags/ 483 tags/REL-1.1a svn copy –r 345 http://subversion.example.com/myProject/trunk http://subversion.example.com/myProject/tags/REL-O.9 svn export http://subversion.example.com/myProject/tags/REL-0.9 svn mkdir http://subversion.example.com/myProject/tags

  34. Exemple de diffusion d’une release 1. Utiliser la commande svn export(pas de méta données) svn export http://subversion.example.com/myProject/tags/REL-0.9 myProject 2. Faire un tar.gz du répertoire myProject 3. Le publier (web, FTP, etc.)

  35. 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. Une branche est une autre ligne de développement BUG-2561 RB-O.8 TRY-new_cache Branche de correction de bogue Branche de diffusion trunk Ligne principale Branche d’expérimentation

  37. Une branche est stockée comme une copie Référentiel 482 418 trunk/ 345 215 … … … … 217 216 314 branches/ RB-0.8 315 REL-0.8 tags/ svn copy http://subversion.example.com/myProject/trunk http://subversion.example.com/myProject/branches/RB-0.8 svn copy http://subversion.example.com/myProject/branches/RB-O.8 http://subversion.example.com/myProject/tags/REL-0.8 svn co http://subversion.example.com/myProject/branches/RB-0.8

  38. Le quotidien du subversif Camembert non contractuel

  39. Propager la correction d’un bogue simple 1. 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

  40. Propager la correction d’un bogue complexe • Créer une branche de correction de bug BUG-865 • Créer une étiquette à partir de cette nouvelle branche, PRE-865. • Corriger le bug dans BUG-865. Plusieurs commit sont possibles. • Quand le bug est corrigé dans BUG-865, créer une étiquette POST-865. • Faire un checkout (ou update) de la branche à corriger • 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

  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. Partage de code entre plusieurs projets

  43. Un référentiel peut inclure du code d’un autre référentiel doc/ svn:externals lib/ serveur Subversion common/ myProject/ trunk/ trunk/ doc/ doc/ src/ lib/ common/

  44. Les scripts associés

  45. 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

  46. 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 • …

  47. 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

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

  49. 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

  50. Les protocoles d’accès à Subversion • svn:// • svn+ssh:// • http:// • https:// • file://

More Related