Subversion - Utilisation et bonnes pratiques

Embed Size (px)

Citation preview

Diapositive 1

TRex Subversion

Utilisation et bonnes pratiques

20/05/2010

+Logo client

Prsentation

Subver... Quoi ?

Subverquoi ? - Prsentation de SVN

Subversion, un gestionnaire de code source (SCM) et de versionningLe versionning permet le travail collaboratif

Chacun peut travailler sans craser les fichiers de son voisinDveloppement : permet un suivi des sources

Permet de revenir une version N un instant T

Permet de comparer les versions d'un fichier afin de voir ce qui a t modifi

Permet de travailler sur plusieurs versions d'un mme projetVersion TMA

Version future

R&D sur un projet en cours

Dfinition de versions figes, garanties comme tant stables

Ce n'est pas un systme de sauvegarde !

Subversion (ou SVN) : un SCM parmi d'autresD'autres SCM existent : VSS (Microsoft), ClearCase (IBM), CVS, GIT, Mercurial...

SVN est une volution de CVS

SVN est Open Source (licence Apache)

Subverquoi ? - Autour du dpt

SVN est un systme centralisCentralisation autour d'un dpt (repository en anglais) pour partager l'information

Le dpt est un serveur qui stocke toutes les modifications effectues

Un dveloppeur se connecte en tant que client au dpt pour rcuprer et/ou partager des modifications effectues sur le dpt

Le dpt possde enregistre l'arborescence de fichiers du projet

Accs au dptAccs en HTTP essentiellement par l'intermdiaire d'un client SVN

Le client de base est la ligne de commande

Des clients graphiques permettent un accs plus convivialTortoise SVN => Intgration dans l'explorateur Windows

Versions (Mac)

Subversive => Intgration dans Eclipse

Pour les dveloppeurs, l'utilisation de Subversive dans Eclipse est vivement recommande !

Travail collaboratif Situation viter

Travail collaboratif Avec SVN (1/2)

Travail collaboratif Avec SVN (1/2)

Organisation & Utilisation

Organisation

Trunk, Branches, TagsLe Trunk est la ligne de vie du projet.Tronc commun de dveloppement

Correspond la version la plus jour du projet

Les Branches peuvent correspondre des projets drivsTMA en cours

Projets parallles

Dveloppements exprimentaux

Les Tags permettent de figer (ou freeze) une versionUn tag pour chaque version livre (au minimum !)

Dpt SVN bien gr = Projet serein !Possibilit d'automatiser les livraisons (Ant)

Rollback de livraison possible en cas de problme

Historique et organisation clairs pour tout le monde

Utilisation - Commandes

Quelques commandes courantessvn checkout Rcupre un projet avec toutes les mtadonnes SVN

Indispensable pour commencer travailler

svn updateMet jour la copie de travail

Fusionne les fichiers modifis

Des conflits peuvent parfois apparatre

svn commitPropage les modifications effectues

Chaque commit correspond une rvision

TOUJOURS METTRE UN COMMENTAIRE !!!

svn logAffiche l'historique des modifications, rvision par rvision

svn revertAnnule les modifications effectues sur un fichier et revient la dernire version (rvision) SVN, ou HEAD

svn mergePermet de fusionner des modifications effectues dans une autre branche que celle de la copie de travail

Utilisation - Conflits

Rsolution de conflitsDans certains cas SVN ne sait pas fusionner lui-mme les fichiers sources2 dveloppeurs ont modifi la mme portion de code => Conflit

Dans ce cas SVN vous laisse la main pour une rsolution manuelle

Pour un fichier monfichier.txt en conflit, 3 sont crs par SVN :monfichier.txt.mine => Fichier tel qu'il tait dans la copie de travail avant la mise jour

monfichier.txt.rOLD_REV => Fichier tel qu'il tait avant les modifications, dans le dpt

monfichier.txt.rNEW_REV => Fichier que l'on vient de recevoir du serveur

monfichier.txt contient des marqueurs indiquant o se trouvent les conflits> .rXX (Indique le dbut du mme bout de code la rvision XX)

Les clients graphiques permettent de visualiser les diffrences et d'diter les conflits facilement

Une fois le conflit rsolu, il faut :Signaler la rsolution du conflit (svn resolved)

Commit le fichier avec le conflit rsolu

Important !!!TOUJOURS rsoudre les conflits en cours

NE JAMAIS COMMIT DES FICHIERS EN CONFLIT NON RESOLU !!!

Utilisation - Conflits

Utilisation - Proprits

Les proprits sont des mta-donnesElles permettent de modifier le comportement standard de SVN

La plupart sont destines au fonctionnement interne de SVN

Certaines peuvent tre trs utiles

svn:ignorePermet d'ignorer un certain nombre de fichiers par emplacement ou pattern (Thumbs.db, cache, logs...)

A rgler au dbut d'un projet pour viter de versionner des fichiers inutiles

svn:externalsPermet d'indiquer une dpendance

Par exemple une librairie maintenue par une autre quipeInutile de dupliquer le code dans le dpt

S'il y a des mises jour dans le dpt dfini en svn:externals, votre copie de travail sera galement mise jour lors de votre prochain update

Utilis souvent avec Symfony pour rcuprer le kernel du framework

Comprendre les branches

Des branches : Pour quoi faire ?

MaintenanceUne branche est souvent une copie du trunk (rpertoire principal)Ligne de vie indpendante

Historique commun => Permet les fusions

Exemple sur un projet web avec TMA + EvolutionsLes volutions sont dvelopps sur le trunk (future release)

Mais des bugs peuvent tre signals en production et doivent tre corrigs

=> Cration d'une branche pour la TMA (correction de bugs uniquement)

=> Livraisons effectues partir de la branche TMA

=> Une fois les bugs corrigs, on fusionne les correctifs avec le trunk

Fusion entre branches (Merge)

Pourquoi fusionner (ou merger) ?Permet de maintenir les branches jour entre elles

vite de modifier 2 fois du code source (branche TMA + Trunk)La multiple modification manuelle prsente des risques de rgressions

SVN fusionne intelligemment (par diffrentiel)

Comment faire ?Pr-requisPour fusionner entre 2 branches il faut avoir les 2 copies de travail en local

Les 2 copies doivent tre jour

Modification du code source sur la branche TMAsvn commit -m 'Correction de bug #123' mondossier/monfichier.php

Fusion dans la copie de travail du trunk, d'abord en localcd /chemin/vers/trunk/working/copy

svn merge http://mon-repository-svn/monprojet/branches/tma/mondossier/monfichier.php mondossier/monfichier.php

On teste que tout fonctionne, puis on commit

svn commit -m 'Merge correction de bug #123' mondossier/monfichier.php

Des conflits peuvent survenir avec le merge, comme avec un update. Il faut dans ce cas les rsoudre avant de commit

Vous pouvez vous rendre compte des modifications (et donc conflits potentiels) en passant l'option dry-run la commande de mergesvn merge http://mon-repository-svn/monprojet/branches/tma/mondossier/monfichier.php mondossier/monfichier.php --dry-run

Intgration Eclipse

Plugins Eclipse

Une fonctionnalit : 2 pluginsSubclipseClient SVN historique dans Eclipse

Maintenu par Tigris, l'quipe de dveloppement de SVN

Open Source

SubversiveClient retenu par la fondation Eclipse

Initialement dvelopp par la socit Polarion

Open Source

Il ne peut en rester qu'un ! => SubversivePlus stable que son concurrent

Bien document dans l'aide d'Eclipse

Prsent dans les paquets optionnels de Galileo (Eclipse 3.5)

Subversive : Prsentation

Subversive - Prsentation

S'intgre parfaitement votre workspace

Compatible avec la fonction de synchronisation d'quipePermet d'anticiper les mises jour et les conflits venirPrsentation visuelle des modifications entrantes et sortantes

Possibilit d'afficher les diffrences sur ces modifications

Accessible depuis le menu contextuel (Team / Synchronize)

Autres clients SVN

Tortoise SVN (Windows, intgration dans l'explorateur) - Gratuit

SCPlugin (Mac OS, intgration dans le Finder) - Gratuit

Rapid SVN (Java, vieillissant) - Gratuit

Versions (Mac OS) - Payant

SVNx (Mac OS, vieillissant) - Gratuit

RabbitVCS (Linux Gnome, intgration dans Nautilus)

KDESVN (Linux KDE, intgration dans Konqueror)

Conclusion

SVN est un puissant outil de gestion de versions

Indispensable pour le dveloppement en quipe, voire seul !

SVN n'est pas un systme de sauvegarde !

Permet un suivi de versions prcis, condition de bien l'utiliser

Ce n'est pas le seul SCM du march !GIT gagne de plus en plus terrain (nouvelle gnration, dcentralis...)

De nombreuses intgrations (IDE, clients indpendants) sur toutes les plateformes

Des Questions ?

?

#

++

#

++

#

++

#

++

#