27 juin Formation à lutilisation dun client Subversion Vincent Carpier Florent Guilleux Paris, 27 Juin 2007
27 juin Programme 9h30 : accueil et introduction à Subversion 10h00 : début des travaux pratiques 12h30 : repas 14h00 : reprise des travaux pratiques 17h30 : fin
27 juin Objectifs de la formation 1. comprendre les concepts de la gestion de version dans Subversion 2. apprendre les commandes de base et avancées pour gérer le cycle de développement d'un logiciel avec Subversion 3. maîtriser l'utilisation d'un client Subversion
27 juin Choix du client Subversion Aujourdhui : TortoiseSVN ou Subclipse ? Langage de développement utilisé Framework de développement Système d'exploitation Support / connaissance Choix d'équipe ?
27 juin Organisation des travaux pratiques En binômes Un document à suivre avec exercices et quelques explications Nhésitez pas à nous demander des précisions ou plus dexplications ! Au cours de la journée quelques présentations pour lensemble des participants
27 juin Introduction à Subversion
27 juin Subversion est un outil de gestion de version Permet de gérer lhistorique des modifications de son projet Présenté comme le successeur de CVS Version actuelle 1.4, la version 1.0 date de février 2004 Produit open source, supporté par CollabNet Utilisé par en entreprise et par de nombreux projets du libre (Apache, KDE, Gnome, Python) Alternative : système décentralisés (voir
27 juin La gestion de version 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…
27 juin … qui justifient leffort de prise en main commit tag branches repository HEAD BASE update version check out modules merge conflict diff patch trunk
27 juin Les étapes de cette formation 1. Découvrir les concepts de Subversion 2. Utiliser les opérations de base 3. Travailler à plusieurs avec Subversion 4. Gérer le cycle de développement dun logiciel 5. Fonctionnalités avancées
27 juin Un dépôt central et une copie de travail Référentiel Copie de travail dAlice svn checkout svn commit trunk/
27 juin Gérer des conflits
27 juin 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/
27 juin 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 svn update trunk/
27 juin 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
27 juin 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
27 juin 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
27 juin Cycle de travail typique 1. Mettre à jour sa copie de travail svn update 3. Visualiser les modifications svn status (-u) / diff / revert 2. Apporter des modifications svn add / copy / delete / move 4. Fusionner les modifications svn merge / resolved 6. Enregistrer ses modifications svn commit 5. Mise à jour / Synchro svn update
27 juin Les étiquettes
27 juin Une étiquette est un nom donné à une révision Référentiel … … … 482 Étiquettes REL-0.9 REL-1.1a trunk/
27 juin Une étiquette est stockée comme une copie Référentiel … … … 482 trunk/ tags/ tags/REL-0.9 tags/REL-1.1a
27 juin Les branches
27 juin Les contraintes posées par la gestion de multiples versions d'un logiciel (1) pour préparer la sortie d'une nouvelle version, on ne travaille plus que sur la correction de bogues mais pendant ce temps d'autres développeurs peuvent vouloir introduire de nouvelles fonctionnalités pour les futures versions
27 juin Les contraintes posées par la gestion de multiples versions d'un logiciel (2) quand on corrige un bogue dans une version, il faut pouvoir reporter cette correction dans les autres versions maintenues
27 juin Les contraintes posées par la gestion de multiples versions d'un logiciel (3) certaines fonctionnalités d'une version ont peut-être disparues dans des version ultérieures mais tant que cette version est maintenue activement, il faut pouvoir corriger les bogues de ces fonctionnalités
27 juin Les branches sont utiles pour gérer ces contraintes Une branche est une ligne de développement parallèle Elle a son propre historique et suivi des modifications La fonctionnalité de merge permet de reporter des modifications réalisées dans une branche dans le trunk et vice versa (ou entre branches)
27 juin Exemple du cycle de préparation, diffusion et maintien d'une version trunk RB-1.0 Début de la préparation de la nouvelle version REL-1.0 Diffusion de la version étiquettes Nouvelles fonctionnalités Correction bogues Report corrections Correction bogues REL Diffusion de la version Correction bogues REL Diffusion de la version RB-1.1 Début de la préparation dune nouvelle version Report corrections
27 juin BUG-2561 Exemples dutilisation de branches trunk RB-O.8 Ligne principale Branche dexpérimentation Branche de diffusion Branche de correction de bogue TRY-new_cache
27 juin Une branche est stockée comme une copie Référentiel … … … 482 trunk/ tags/ branches/ … RB-0.8 REL-0.8
27 juin Conclusion
27 juin A lusage Subversion se révèle rapidement indispensable Cela vaut le coup de sentraîner à lutiliser Une fois les concepts acquis cest simple à utiliser Une fois habitué il paraît difficile de sen passer
27 juin Il faut plus que connaître les commandes Sassurer que tous les développeurs du projet sauront lutiliser : convaincre et former Mettre en œuvre petit à petit les fonctionnalités de Subversion Se mettre daccord sur des pratiques dutilisations Définir des règles de nommage Définir comment lon utilise les branches et étiquettes Dans quels cas utilise-t-on le locking ? Les propriétés ? Documenter le tout
27 juin Ressources