Subversion
Subversion : Pour Quoi Faire ?
Problèmes de la gestion du code dans un projet
Durée de vie du projet peut être longue : besoin de gérer lÕhistorique
Changement dÕarchitecture
Changement des personnes impliquées dans le développement
Travail en parallèle sur plusieurs versions
Maintenance dÕune ancienne version en // avec la version courante
Test de nouvelles fonctionnalités sans impacter la version courante
Pouvoir propager facilement des changements dÕune version à lÕautre
Plusieurs personnes impliquées en même temps dans le développement
Travailler simultanément sur le même code
Détecter et (aider à) résoudre les conflits
Membre de la famille des Version Control System (VCS)
CVS est 1 des plus anciens et des plus connus (open source)
Subversion (SVN) en reprend les principaux concepts en les modernisant
Texte et binaire, language neutral, pas de gestion de configuration

Le Modèle CVS/SVN
SVN : Référencer un Repository
On désigne un repository par son URL
Exemple : https://svn.lal.in2p3.fr/projects/Etudiants
On appelle branche tout répertoire dans le repository
Correspond à un répertoire dans lÕespace de travail
1 niveau supplémentaire dans lÕURL
Exemples :
https://svn.lal.in2p3.fr/projects/Etudiants/ens5
https://svn.lal.in2p3.fr/projects/Etudiants/ens5/HelloWorld
Grand choix de clients SVN
Command line : svn
Nom des commandes généralement identique à CVS
Client Web : WebSVN
Consultation du repository uniquement
https://trac.lal.in2p3.fr/Etudiants/browser

Principales OpérationsÉ
check-out : crée une copie locale du (1 branche) du repository
svn co URL
Ex : svn co https://svn.lal.in2p3.fr/projects/Enseignement/ens6 Projets
Info : permet de savoir la branche associée au répertoire local
svn info
add : ajoute 1/des fichiers au repository lors de la prochaine synchronisation
svn add fichier/répertoire
Nécessaire pour tout fichier/répertoire créé depuis le check-out
Si répertoire, traite tous les fichiers et répertoires contenus
status : permet de connaître lÕétat du répertoire de travail
svn status [-u]
1 ligne par fichier modifié par rapport au repository
-u force la vérification par rapport au repository et non à la copie locale
commit : enregistre les modifications locales dans le repository
svn ci –m Ç message È
Crée une nouvelle révision du repository contenant toutes les modifications
Demande un username/password si nécessaire (ens2006, non changeable)
Possible uniquement si lÕespace de travail à jour par rapport au repository

É Principales Opérations
update : intégre les changements du repository dans la copie locale
svn update [-r révision]
Ajout des nouveaux fichiers (A) ou mise à jour des autres (U)
Préserve les modifications locales en faisant un merge (G)
Signale les conflits : modification locale en conflit avec une modification du repository (C)
En cas de conflit, création de plusieurs versions du fichier
Empêche les commits
resolved : indique que le conflit a été résolu
svn resolved fichier
Supprime les versions temporaires créées
revert : revient à la version du repository
svn revert fichier/répertoire
Restaure la version du dernier update. Les modifications sont perdues
resolved implicite en cas de conflit sur le fichier/répertoire
log : liste les messages associés à chaque révision dÕun fichier/répertoire
svn log [fichier/répertoire] [-v] [--stop-on-copy]
Ne liste que les révisions qui concernent la branche (fichier) courante
Inclut les opérations de copie entre branches, sauf si --stop-on-copy
Faire svn update pour voir les révisions des derniers commits

Opérations sur les Fichiers
SVN garde la trace de tous les fichiers renommés, copiés, détruits, É
Permet de conserver lÕhistorique même si le fichier est renommé
Indique la révision du fichier dont est issu un nouveau fichier (copy/mv)
Gère la création/suppression/renommage des répertoires
Aucune opération sur les fichiers implicite pour SVN
Doit notifier SVN des changements
svn status  indique les inconsistances (!)
Pour simplifier, SVN permet dÕappeler les commandes cp, mv, mkdirÉ
svn cp, svn mv, svn rm, svn mkdir
Possible de faire oublier un fichier détruit à SVN
svn rm --force fichier

Fonctionnalités Avancées
diff : visualiser les différences entre 2 versions dÕun (groupe de) fichier
Avec lÕespace de travail : svn diff [-r révision] fichier/répertoire
Entre 2 révisions du repository : svn diff [-r r1:r2] fichier/répertoire
Plus facile avec un interface Web (WebSVN, TracÉ)
WebSVN au LAL : http://svn.lal.in2p3.fr/WebSVN
merge : revenir à une révision antérieure du repository
svn merge –r HEAD:révision fichier/répertoire
Ne modifie pas le repository mais seulement la copie locale (faire un commit pour valider le retour à la révision antérieure)
update permet de restaurer une version antérieure dans lÕespace de travail mais cause un conflit lors du commit
commit exige que lÕespace de travail soit à jour par rapport à la dernière révison
DÕautre formes plus complexes pour appliquer une modification se trouvant ailleurs dans le repository

Pour en Savoir PlusÉ
Documentation SVN en ligne
http://svnbook.red-bean.com/en/1.1/index.html
LÕaide en ligne
svn help [command]