90 likes | 189 Views
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
E N D
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 repository Check-out Check-out • Repository central • Base de données contenant l’ensemble des versions (révisions) • Unique pour 1 projet • Copies locales,dans des working area • Pas de « locking » : plusieurs utilisateurs peuvent modifier 1 copie différente du même fichier commit Working area B Working areaA • Synchronisation entreworking area et repository • Atomique (SVN) • Détection/Résolution des conflits
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://svn.lal.in2p3.fr/WebSVN
% echo "Test" > fichier1.txt % svn add fichier1.txt A fichier1.txt % svn status A fichier1.txt % svn co https://svn.lal.in2p3.fr/projects/Etudiants/demo Projets Checked out revision 4. % cd Projets/ % svn ci -m 'Ajout de fichier1.txt' Adding fichier1.txt Authentication realm: <https://svn.lal.in2p3.fr:443> LAL … Password for 'jouvin': Transmitting file data . Committed revision 5. % svn info Path: . URL: https://svn.lal.in2p3.fr/projects/Etudiants/demo Repository UUID: 589c6671-760a-0410-a932-a3fdf8820ca6 Revision: 4 Node Kind: directory Schedule: normal Last Changed Author: jouvin Last Changed Rev: 4 Last Changed Date: 2006-01-17 14:07:34 +0100 (Tue, 17 Jan 2006) R WA WA WA WA R WA 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
% cat fichier1.txt Test Modif perso % svn revert fichier1.txt Reverted 'fichier1.txt' % cat fichier1.txt Test 1ere modif % cp fichier1.txt.mine fichier1.txt % svn resolved fichier1.txt fichier1.txt fichier1.txt.mine fichier1.txt.r5 fichier1.txt.r7 % svn resolved fichier1.txt Resolved conflicted state of 'fichier1.txt' % ls fichier1.txt fichier2.txt asc/jouvin % svn log ------------------------------------------------------------------------ r7 | jouvin | 2006-01-18 22:53:28 +0100 (Wed, 18 Jan 2006) | 1 line Modif 1er fichier ------------------------------------------------------------------------ r6 | jouvin | 2006-01-18 22:51:36 +0100 (Wed, 18 Jan 2006) | 1 line Ajout 2eme fichier ------------------------------------------------------------------------ r5 | jouvin | 2006-01-17 14:49:29 +0100 (Tue, 17 Jan 2006) | 1 line Ajout de fichier1.txt …… WA WA % echo “Modif perso” >> fichier1.txt % svn update C fichier1.txt conflit sur le fichier A fichier2.txt fichier ajouté Updated to revision 7. % ls fichier1.txt fichier1.txt.r5 fichier2.txt fichier1.txt.mine fichier1.txt.r7 R WA … 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 R
% svn cp fichier1.txt fichier3.txt A fichier3.txt % ls fichier1.txt fichier2.txt fichier3.txt % svn status A + fichier3.txt 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
R WA 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]