9
Subversion

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

Embed Size (px)

Citation preview

Page 1: Subversion. 2 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

Subversion

Page 2: Subversion. 2 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

2

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 l’un 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

Page 3: Subversion. 2 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

3

Le Modèle CVS/SVN

repository

Working areaB

Working areaA

Check-outCheck-out

commit

Repository centralBase de données contenant l’ensemble des versions (révisions)Unique pour 1 projet

Synchronisation entreworking area et repository

Atomique (SVN)Détection/Résolution des conflits

Copies locales,dans des working area

Pas de « locking » : plusieurs utilisateurs peuvent modifier 1 copie différente du même fichier

Page 4: Subversion. 2 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

4

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 : Trac• Consultation du repository uniquement• https://trac.lal.in2p3.fr/Etudiants/browser

Page 5: Subversion. 2 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

5

R

WA

R

WA

WA

WA

WA

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

% echo "Test" > fichier1.txt% svn add fichier1.txt A fichier1.txt

% svn statusA fichier1.txt

% svn ci -m 'Ajout de fichier1.txt'Adding fichier1.txtAuthentication realm: <https://svn.lal.in2p3.fr:443> LAL …Password for 'jouvin': Transmitting file data .Committed revision 5.

% svn co https://svn.lal.in2p3.fr/projects/Etudiants/demo ProjetsChecked out revision 4.% cd Projets/% svn info

Path: .URL: https://svn.lal.in2p3.fr/projects/Etudiants/demoRepository UUID: 589c6671-760a-0410-a932-a3fdf8820ca6Revision: 4Node Kind: directorySchedule: normalLast Changed Author: jouvinLast Changed Rev: 4Last Changed Date: 2006-01-17 14:07:34 +0100 (Tue, 17 Jan 2006)

Page 6: Subversion. 2 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

6

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

WA

WA

R

% cat fichier1.txtTestModif perso% svn revert fichier1.txt Reverted 'fichier1.txt'% cat fichier1.txt Test1ere modif

asc/jouvin % svn log ------------------------------------------------------------------------r7 | jouvin | 2006-01-18 22:53:28 +0100 (Wed, 18 Jan 2006) | 1 lineModif 1er fichier------------------------------------------------------------------------r6 | jouvin | 2006-01-18 22:51:36 +0100 (Wed, 18 Jan 2006) | 1 lineAjout 2eme fichier------------------------------------------------------------------------r5 | jouvin | 2006-01-17 14:49:29 +0100 (Tue, 17 Jan 2006) | 1 lineAjout de fichier1.txt……

% echo “Modif perso” >> fichier1.txt% svn updateC fichier1.txt conflit sur le fichierA fichier2.txt fichier ajoutéUpdated to revision 7.% lsfichier1.txt fichier1.txt.r5 fichier2.txtfichier1.txt.mine fichier1.txt.r7

% cp fichier1.txt.mine fichier1.txt% svn resolved fichier1.txtfichier1.txt fichier1.txt.mine fichier1.txt.r5 fichier1.txt.r7 % svn resolved fichier1.txtResolved conflicted state of 'fichier1.txt'% lsfichier1.txt fichier2.txt

Page 7: Subversion. 2 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

7

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

% svn cp fichier1.txt fichier3.txtA fichier3.txt% lsfichier1.txt fichier2.txt fichier3.txt% svn statusA + fichier3.txt

Page 8: Subversion. 2 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

8

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

R

WA

Page 9: Subversion. 2 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

9

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]