Nous allons r´esumer ici les diff´erentes commandes de base pour travailler avec Subversion sous forme du cycle de commande habituel :
1. Cr´eation d’un d´epˆot :svnadmin create
2. Copie d’un projet pour gestion dans ce d´epˆot :svn import
3. R´ecup´eration d’une copie de projet depuis le d´epˆot :svn checkout i. Modification du contenu du projet :
de fa¸con classique (´editeur de texte) rajout de fichiers : svn add
copie de fichiers : svn copy
d´eplacement de fichiers : svn move effacement de fichiers : svn delete ii. Consultation des modifications :svn status iii. Soumission des modifications : svn commit 3.7 Les logs
A chaque fois que nous avons soumis des modifications dans la base, nous les avons accompagn´ees d’un message par le biais de l’option -m de svn commit. L’ensemble de ces messages peut ˆetre consult´e par le biais de l’instruction svn log, qui nous fournit en outre la date de chaque modification ainsi que son auteur :
1 $ svn log
2
-3 r3 | m e i s t e r | 2005 -02 -23 1 1 : 0 4 : 2 0 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
4
5 m o d i f i c a t i o n de la d e f i n i t i o n du t a b l e a u x c o l
6
-7 r2 | m e i s t e r | 2005 -02 -23 1 1 : 0 2 : 3 9 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
8
9 c h a n g e m e n t des en - t e t e s
10
-11 r1 | m e i s t e r | 2005 -02 -23 1 0 : 5 9 : 2 6 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
12
13 I m p o r t i n i t i a l
14
-4 Utilisation de Subversion avec diff´ erents d´ eveloppeurs
Dans cette partie, nous allons traiter le cas o`u diff´erents d´eveloppeurs ont acc`es `a la base Subversion : c’est le cas de la plupart des projets en ´equipe. Dans l’exemple pr´ec´edent, tout allait bien car un seul d´eveloppeur pouvait modifier la base. Mais en ´equipe, il sera fr´equent que deux d´eveloppeurs ou plus fassent des modifications sur le mˆeme fichier de fa¸con simultan´ee. Il ne faut ´evidemment surtout pas que chacun puisse ´ecraser les modifications des autres, ni que tous soient paralys´es en attendant qu’un utilisateur ait fini de modifier un fichier et pouvoir `a leur tour y apporter des modifications.
Que se passe-t-il alors ? Sur la figure 3 est repr´esent´ee de fa¸con sch´ematique la gestion des conflits de fichiers. Quand un fichier est modifi´e par deux personnes diff´erentes, le premier d´eveloppeur `a enregistrer ses modifications dans la base, change la version du fichier concern´e.
Lorsque le second d´eveloppeur d´esire soumettre son fichier, la base l’avertit que le fichier a d´ej`a
´
et´e modifi´e et ne l’autorise pas `a soumettre. Ce d´eveloppeur peut alors r´ecup´erer le fichier de la base et le comparer au sien localement. Il r´ealise alors lui-mˆeme un fichier hybride qui mˆele les d´eveloppements des deux utilisateurs. Il soumet ce nouveau fichier `a la base, qui incr´emente le num´ero de version de la base.
Dans ce type de conflit, rien ne remplace la communication entre les d´eveloppeurs qui doivent s’assurer de la coh´erence de leurs d´eveloppements avec ceux des autres. Sur des projets avec de nombreux d´eveloppeurs, les conflits sont g´er´es par des administrateurs qui sont charg´es de prendre en compte les modifications de chacun. Cependant lorsque les ´equipes de travail ne sont pas trop grandes, un contact par t´el´ephone ou par mail est suffisant pour r´esoudre la plupart des conflits rencontr´es.
Nous allons supposer le cas de deux d´eveloppeurs (deleutre et meister) travaillant sur une mˆeme base Subversion h´eberg´ee sur le serveur codiciel4. L’authentification sur ce serveur se fera avecsshmais il existe d’autres possibiilit´es d’acc`es `a un serveur Subversion. En particulier, on peut noter que nativement, Subversion peut fonctionner avec un serveur web Apache. En fonction du mode serveur avec lequel Subversion fonctionne, on utilisera pour le d´ebut du chemin du d´epˆot :
file://: pour un d´epˆot sur un disque local ;
svn://: pour un d´epˆot distant avec un serveur Subversion dont l’authentification est g´er´ee par Subversion ;
svn+ssh:// : pour un d´epˆot distant avec un serveur Subversion dont l’authentification est g´er´ee par ssh ;
http://: pour un d´epˆot distant avec un serveur web ;
Dans le d´epˆot sur lequeldeleutreetmeistervont travailler il y a deux fichiers :conflit a gerer.txt etconflit automatise.txt. Le contenu de ces fichiers est le suivant :
conflit automatise.txt
1 L i g n e a m o d i f i e r par d e l e u t r e :
2 L i g n e a m o d i f i e r par m e i s t e r : conflit a gerer.txt :
1 c e t t e l i g n e est m o d i f i e e par : < Nom d e v e l o p p e u r >
2 Je s u i s d e l e u t r e ( oui / non ) :
3 Je s u i s m e i s t e r ( oui / non ) :
4.1 R´ecup´eration de la base
Sur leurs comptes respectifs, deleutreetmeisterr´ecup`erent le contenu de la base :
1 m e i s t e r $ svn c h e c k o u t svn + ssh :// c o d i c i e l 4 / d e p o t _ e x e m p l e / p r o j e t w o r k
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3 A w o r k / c o n f l i t _ a _ g e r e r . txt
4 A w o r k / c o n f l i t _ a u t o m a t i s e . txt
5 C h e c k e d out r e v i s i o n 1.
et
1 d e l e u t r e $ svn c h e c k o u t svn + ssh :// c o d i c i e l 4 / d e p o t _ e x e m p l e / p r o j e t t r a v a i l _ s u b v e r s i o n
2 d e l e u t r e @ c o d i c i e l 4 ’ s p a s s w o r d :
3 A t r a v a i l _ s u b v e r s i o n / c o n f l i t _ a _ g e r e r . txt
4 A t r a v a i l _ s u b v e r s i o n / c o n f l i t _ a u t o m a t i s e . txt
5 C h e c k e d out r e v i s i o n 1.
4.2 Conflit g´er´e par Subversion
En fait, si les modifications faites par les d´eveloppeurs ne concernent pas les mˆemes lignes, Subversion g`ere lui-mˆeme la fusion des diff´erences. Le fichierconflit automatise.txtmodifi´e par :
deleutreest maintenant :
1 L i g n e c o m m u n e
2 L i g n e a m o d i f i e r par d e l e u t r e : b o n j o u r m e i s t e r
3 L i g n e a m o d i f i e r par m e i s t e r :
4 une a u t r e l i g n e c o m m u n e meisterest maintenant :
1 L i g n e c o m m u n e
2 L i g n e a m o d i f i e r par d e l e u t r e :
3 L i g n e a m o d i f i e r par m e i s t e r : s a l u t d e l e u t r e
4 une a u t r e l i g n e c o m m u n e
On peut voir que dans ce cas aucune modification de l’un n’empi`ete sur celle de l’autre.
Supposons quedeleutresoit le premier `a soumettre ses modifications :
1 d e l e u t r e $ svn s t a t u s
2 M c o n f l i t _ a u t o m a t i s e . txt
3 d e l e u t r e $ svn c o m m i t - m " m e s s a g e p o u r m e i s t e r "
4 d e l e u t r e @ c o d i c i e l 4 ’ s p a s s w o r d :
5 S e n d i n g c o n f l i t _ a u t o m a t i s e . txt
6 T r a n s m i t t i n g f i l e d a t a .
7 C o m m i t t e d r e v i s i o n 2.
C’est maintenant le tour de meister:
1 m e i s t e r $ svn s t a t u s
2 M c o n f l i t _ a u t o m a t i s e . txt
3 m e i s t e r $ svn c o m m i t - m " m e s s a g e p o u r d e l e u t r e "
4 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
5 S e n d i n g c o n f l i t _ a u t o m a t i s e . txt
6 T r a n s m i t t i n g f i l e d a t a . svn : C o m m i t f a i l e d ( d e t a i l s f o l l o w ) :
7 svn : Out of d a t e : ’ c o n f l i t _ a u t o m a t i s e . txt ’ in t r a n s a c t i o n ’3 ’ Le messagesvn : Out of date : ’conflit automatise.txt’ in transaction ’3’indique
`
a meister qu’il doit mettre son r´epertoire local `a jour. Pour cela, il faut utiliser la commande svn update:
1 m e i s t e r $ svn u p d a t e
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3 G c o n f l i t _ a u t o m a t i s e . txt
4 U p d a t e d to r e v i s i o n 2.
La lettre G dans la premi`ere colonne indique que les modifications contenus dans la base n’empi`etent pas sur celles du r´epertoire local. Il suffit de recommencer la soumission :
1 m e i s t e r $ svn c o m m i t - m " m e s s a g e p o u r d e l e u t r e "
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3 S e n d i n g c o n f l i t _ a u t o m a t i s e . txt
4 T r a n s m i t t i n g f i l e d a t a .
5 C o m m i t t e d r e v i s i o n 3.
Maintenant, chacun des d´eveloppeurs peut remettre son r´epertoire local `a jour et regarder le contenu du fichierconflit automatise.txt:
1 m e i s t e r $ svn u p d a t e
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3 At r e v i s i o n 3.
4 m e i s t e r $ m o r e c o n f l i t _ a u t o m a t i s e . txt
5 L i g n e c o m m u n e
6 L i g n e a m o d i f i e r par d e l e u t r e : b o n j o u r m e i s t e r
7 L i g n e a m o d i f i e r par m e i s t e r : s a l u t d e l e u t r e
8 une a u t r e l i g n e c o m m u n e
Toutes les modifications sont dans la base.
4.3 Conflit `a g´erer manuellement Le fichier conflit a gerer.txt modifi´e par : deleutreest maintenant :
1 l i g n e c o m m u n e
2 c e t t e l i g n e est m o d i f i e e par : d e l e u t r e
3 Je s u i s d e l e u t r e ( oui / non ) : oui
4 Je s u i s m e i s t e r ( oui / non ) : non meisterest maintenant :
1 l i g n e c o m m u n e
2 c e t t e l i g n e est m o d i f i e e par : m e i s t e r
3 Je s u i s d e l e u t r e ( oui / non ) : non
4 Je s u i s m e i s t e r ( oui / non ) : oui
Toutes les modifications sont cette fois-ci incompatibles. deleutresoumet ses modifications :
1 d e l e u t r e $ svn c o m m i t - m " r e m p l i s s a g e du f o r m u l a i r e "
2 d e l e u t r e @ c o d i c i e l 4 ’ s p a s s w o r d :
3 S e n d i n g c o n f l i t _ a _ g e r e r . txt
4 T r a n s m i t t i n g f i l e d a t a .
5 C o m m i t t e d r e v i s i o n 4.
puis c’est au tour demeister :
1 m e i s t e r $ svn c o m m i t - m " f o r m u l a i r e r e m p l i "
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3 S e n d i n g c o n f l i t _ a _ g e r e r . txt
4 T r a n s m i t t i n g f i l e d a t a . svn : C o m m i t f a i l e d ( d e t a i l s f o l l o w ) :
5 svn : Out of d a t e : ’ c o n f l i t _ a _ g e r e r . txt ’ in t r a n s a c t i o n ’6 ’
Comme pr´ec´edemment, on utilise svn update pour mettre `a jour le contenu du r´epertoire de travail local :
1 m e i s t e r $ svn u p d a t e
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3 C c o n f l i t _ a _ g e r e r . txt
4 U p d a t e d to r e v i s i o n 4.
La lettre C dans la premi`ere colonne indique cette fois-ci un conflit `a g´erer manuellement.
Lorsque ceci arrive sur un fichier file, Subversion modifie le r´epertoire local du d´eveloppeur en cr´eant diff´erents fichiers suppl´ementaires :
1. file : contient maintenant l’ensemble des modifications :
2. file.mine : contient le fichier file modifi´e par l’utilisateur, avant que celui-ci ne mette
`
a jour son r´epertoire ;
3. file.r#old (o`u #old est le num´ero de l’ancienne r´evision) : c’est le fichier de la base avant que l’utilisateur ne fasse ses propres modifications ;
4. file.r#new(o`u #new est le num´ero de la nouvelle r´evision) : c’est le fichier de la base le plus r´ecent.
Dans notre cas :
1 m e i s t e r $ ls - l
2 c o n f l i t _ a _ g e r e r . txt
3 c o n f l i t _ a _ g e r e r . txt . m i n e
4 c o n f l i t _ a _ g e r e r . txt . r3
5 c o n f l i t _ a _ g e r e r . txt . r4
6 c o n f l i t _ a u t o m a t i s e . txt
7
8 m e i s t e r $ m o r e c o n f l i t _ a _ g e r e r . txt
9 l i g n e c o m m u n e
10 < < < < < < < . m i n e
11 c e t t e l i g n e est m o d i f i e e par : m e i s t e r
12 Je s u i s d e l e u t r e ( oui / non ) : non
13 Je s u i s m e i s t e r ( oui / non ) : oui
14 = = = = = = =
15 c e t t e l i g n e est m o d i f i e e par : d e l e u t r e
16 Je s u i s d e l e u t r e ( oui / non ) : oui
17 Je s u i s m e i s t e r ( oui / non ) : non
18 > > > > > > > . r4
19
20 m e i s t e r $ m o r e c o n f l i t _ a _ g e r e r . txt . m i n e
21 l i g n e c o m m u n e
22 c e t t e l i g n e est m o d i f i e e par : m e i s t e r
23 Je s u i s d e l e u t r e ( oui / non ) : non
24 Je s u i s m e i s t e r ( oui / non ) : oui
25
26 m e i s t e r $ m o r e c o n f l i t _ a _ g e r e r . txt . r3
27 l i g n e c o m m u n e
28 c e t t e l i g n e est m o d i f i e e par : < Nom d e v e l o p p e u r >
29 Je s u i s d e l e u t r e ( oui / non ) :
30 Je s u i s m e i s t e r ( oui / non ) :
31
32 m e i s t e r $ m o r e c o n f l i t _ a _ g e r e r . txt . r4
33 l i g n e c o m m u n e
34 c e t t e l i g n e est m o d i f i e e par : d e l e u t r e
35 Je s u i s d e l e u t r e ( oui / non ) : oui
36 Je s u i s m e i s t e r ( oui / non ) : non Le d´eveloppeur a alors trois choix possibles :
1. g´erer le conflit manuellement ;
2. ´ecraser le fichier du r´epertoire par l’une de ces variantes temporaires ;
3. taper la commande svn revertsuivi du nom du fichier pour ´eliminer toute modification locale.
Nous allons ici g´erer le conflit manuellement.meister change le contenu du fichier en :
1 m e i s t e r $ m o r e c o n f l i t _ a _ g e r e r . txt
2 l i g n e c o m m u n e
3 c e t t e l i g n e est m o d i f i e e par : d e l e u t r e p u i s m e i s t e r
4 Je s u i s d e l e u t r e ( oui / non ) : non
5 Je s u i s m e i s t e r ( oui / non ) : oui
Il faut ensuite indiquer `a Subversion que le conflit a ´et´e r´esolu avec la commandesvn resolved suivie du nom du fichier concern´e. Cette commande efface ´egalement les fichiers temporaires.
Ensuite on peut soumettre les modifications classiquement.
1 m e i s t e r $ svn r e s o l v e d c o n f l i t _ a _ g e r e r . txt
2 R e s o l v e d c o n f l i c t e d s t a t e of ’ c o n f l i t _ a _ g e r e r . txt ’
3 m e i s t e r $ ls - l
4 c o n f l i t _ a _ g e r e r . txt
5 c o n f l i t _ a u t o m a t i s e . txt
6 m e i s t e r $ svn c o m m i t - m " m e i s t e r a le d e r n i e r mot "
7 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
8 S e n d i n g c o n f l i t _ a _ g e r e r . txt
9 T r a n s m i t t i n g f i l e d a t a .
10 C o m m i t t e d r e v i s i o n 5.
5 Comment utiliser Subversion pour suivre l’historique
Nous avons jusqu’ici vu comment il ´etait possible d’utiliser Subversion pour archiver l’ensemble des modifications faites `a un projet. Comme tout gestionnaire de versions, il est aussi possible de revoir des versions plus anciennes, de reprendre des fichiers de versions diff´erentes et d’en faire une nouvelle version de projet, de comparer des versions successives de fichiers entre elles, etc. Nous allons voir ces diff´erents aspects dans cette partie.
5.1 svn log
La commande svn log permet de suivre les modifications faites `a chaque nouvelle version.
Exemple pour l’exemple pr´ec´edent :
1 [ 5 0 8 c o d i c i e l 4 : m e i s t e r ] $ svn log
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3
-4 r5 | m e i s t e r | 2005 -02 -23 1 7 : 5 3 : 0 4 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
5
6 m e i s t e r a le d e r n i e r mot
7
-8 r4 | d e l e u t r e | 2005 -02 -23 1 7 : 2 7 : 3 4 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
9
10 r e m p l i s s a g e du f o r m u l a i r e
11
-12 r3 | m e i s t e r | 2005 -02 -23 1 7 : 1 0 : 0 1 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
13
14 m e s s a g e p o u r d e l e u t r e
15
-16 r2 | d e l e u t r e | 2005 -02 -23 1 7 : 0 1 : 3 4 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
17
18 m e s s a g e p o u r m e i s t e r
19
-20 r1 | m e i s t e r | 2005 -02 -23 1 6 : 5 2 : 4 8 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
21
22 i m p o r t i n i t i a l des f i c h i e r s e x e m p l e s
23 -L’option -vd´etaille plus pr´ecis´ement les changements de la base pour chacune des versions :
1 [ 5 0 9 c o d i c i e l 4 : m e i s t e r ] $ svn log - v
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3
-4 r5 | m e i s t e r | 2005 -02 -23 1 7 : 5 3 : 0 4 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
5 C h a n g e d p a t h s :
6 M / c o n f l i t _ a _ g e r e r . txt
7
8 m e i s t e r a le d e r n i e r mot
9
-10 r4 | d e l e u t r e | 2005 -02 -23 1 7 : 2 7 : 3 4 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
11 C h a n g e d p a t h s :
12 M / c o n f l i t _ a _ g e r e r . txt
13
14 r e m p l i s s a g e du f o r m u l a i r e
15
-16 r3 | m e i s t e r | 2005 -02 -23 1 7 : 1 0 : 0 1 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
17 C h a n g e d p a t h s :
18 M / c o n f l i t _ a u t o m a t i s e . txt
19
20 m e s s a g e p o u r d e l e u t r e
21
-22 r2 | d e l e u t r e | 2005 -02 -23 1 7 : 0 1 : 3 4 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
23 C h a n g e d p a t h s :
24 M / c o n f l i t _ a u t o m a t i s e . txt
25
26 m e s s a g e p o u r m e i s t e r
27
-28 r1 | m e i s t e r | 2005 -02 -23 1 6 : 5 2 : 4 8 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
29 C h a n g e d p a t h s :
30 A / c o n f l i t _ a _ g e r e r . txt
31 A / c o n f l i t _ a u t o m a t i s e . txt
32
33 i m p o r t i n i t i a l des f i c h i e r s e x e m p l e s
34
-Enfin, il est possible de pr´eciser avec l’option -r un seul num´ero de r´evision, ou une plage de r´evisions si l’on donne deux num´eros de r´evision s´epar´es par le caract`ere ” :” :
1 [ 5 0 4 c o d i c i e l 4 : m e i s t e r ] $ svn log - r 3:5 - v
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3
-4 r3 | m e i s t e r | 2005 -02 -23 1 7 : 1 0 : 0 1 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
5 C h a n g e d p a t h s :
6 M / c o n f l i t _ a u t o m a t i s e . txt
7
8 m e s s a g e p o u r d e l e u t r e
9
-10 r4 | d e l e u t r e | 2005 -02 -23 1 7 : 2 7 : 3 4 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
11 C h a n g e d p a t h s :
12 M / c o n f l i t _ a _ g e r e r . txt
13
14 r e m p l i s s a g e du f o r m u l a i r e
15
-16 r5 | m e i s t e r | 2005 -02 -23 1 7 : 5 3 : 0 4 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) | 1 l i n e
17 C h a n g e d p a t h s :
18 M / c o n f l i t _ a _ g e r e r . txt
19
20 m e i s t e r a le d e r n i e r mot
21
-5.2 svn diff
La commande svn diffpermet de regarder les diff´erences (comme le donne diff) entre deux r´evisions donn´ees.
Avant de soumettre les modifications `a la base Subversion, on peut utiliser svn diff pour comparer les fichiers modifi´es localement `a ceux de la base. Exemple, si meistera rajout´e une modification `a un fichier de l’exemple pr´ec´edent :
1 [ 5 1 8 c o d i c i e l 4 : m e i s t e r ] $ svn s t a t u s
2 M c o n f l i t _ a _ g e r e r . txt
3 [ 5 1 9 c o d i c i e l 4 : m e i s t e r ] $ svn d i f f
4 I n d e x : c o n f l i t _ a _ g e r e r . txt
5 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
6 - - - c o n f l i t _ a _ g e r e r . txt ( r e v i s i o n 5)
7 +++ c o n f l i t _ a _ g e r e r . txt ( w o r k i n g c o p y )
8 @@ -2 ,3 +2 ,4 @@
9 c e t t e l i g n e est m o d i f i e e par : d e l e u t r e p u i s m e i s t e r
10 Je s u i s d e l e u t r e ( oui / non ) : non
11 Je s u i s m e i s t e r ( oui / non ) : oui
12 + r a j o u t e e p o u r e x e m p l e a v e c d i f f
Ceci ne fonctionne que si les fichiers n’ont pas encore ´et´e soumis.
Il est ´egalement possible de comparer les fichiers locaux `a ceux d’une version donn´ee en utilisant l’option-r :
1 [ 5 2 7 c o d i c i e l 4 : m e i s t e r ] $ svn d i f f - r 1
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
4 I n d e x : c o n f l i t _ a _ g e r e r . txt
5 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
6 - - - c o n f l i t _ a _ g e r e r . txt ( r e v i s i o n 1)
7 +++ c o n f l i t _ a _ g e r e r . txt ( w o r k i n g c o p y )
8 @@ -1 ,4 +1 ,4 @@
9 l i g n e c o m m u n e
10 - c e t t e l i g n e est m o d i f i e e par : < Nom d e v e l o p p e u r >
11 - Je s u i s d e l e u t r e ( oui / non ) :
12 - Je s u i s m e i s t e r ( oui / non ) :
13 \ No n e w l i n e at end of f i l e
14 + c e t t e l i g n e est m o d i f i e e par : d e l e u t r e p u i s m e i s t e r
15 + Je s u i s d e l e u t r e ( oui / non ) : non
16 + Je s u i s m e i s t e r ( oui / non ) : oui
17 I n d e x : c o n f l i t _ a u t o m a t i s e . txt
18 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
19 - - - c o n f l i t _ a u t o m a t i s e . txt ( r e v i s i o n 1)
20 +++ c o n f l i t _ a u t o m a t i s e . txt ( w o r k i n g c o p y )
21 @@ -1 ,4 +1 ,4 @@
22 L i g n e c o m m u n e
23 - L i g n e a m o d i f i e r par d e l e u t r e :
24 - L i g n e a m o d i f i e r par m e i s t e r :
25 + L i g n e a m o d i f i e r par d e l e u t r e : b o n j o u r m e i s t e r
26 + L i g n e a m o d i f i e r par m e i s t e r : s a l u t d e l e u t r e
27 une a u t r e l i g n e c o m m u n e
Et on peut pr´eciser un fichier en particulier :
1 [ 5 2 8 c o d i c i e l 4 : m e i s t e r ] $ svn d i f f - r 3 c o n f l i t _ a _ g e r e r . txt
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
4 I n d e x : c o n f l i t _ a _ g e r e r . txt
5 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
6 - - - c o n f l i t _ a _ g e r e r . txt ( r e v i s i o n 3)
7 +++ c o n f l i t _ a _ g e r e r . txt ( w o r k i n g c o p y )
8 @@ -1 ,4 +1 ,4 @@
9 l i g n e c o m m u n e
10 - c e t t e l i g n e est m o d i f i e e par : < Nom d e v e l o p p e u r >
11 - Je s u i s d e l e u t r e ( oui / non ) :
12 - Je s u i s m e i s t e r ( oui / non ) :
13 \ No n e w l i n e at end of f i l e
14 + c e t t e l i g n e est m o d i f i e e par : d e l e u t r e p u i s m e i s t e r
15 + Je s u i s d e l e u t r e ( oui / non ) : non
16 + Je s u i s m e i s t e r ( oui / non ) : oui
Enfin il est possible de comparer deux versions en s´eparant leurs num´eros par le caract`ere ” : ” :
1 [ 5 2 9 c o d i c i e l 4 : m e i s t e r ] $ svn d i f f - r 2:5
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3 I n d e x : c o n f l i t _ a _ g e r e r . txt
4 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
5 - - - c o n f l i t _ a _ g e r e r . txt ( r e v i s i o n 2)
6 +++ c o n f l i t _ a _ g e r e r . txt ( r e v i s i o n 5)
7 @@ -1 ,4 +1 ,4 @@
8 l i g n e c o m m u n e
9 - c e t t e l i g n e est m o d i f i e e par : < Nom d e v e l o p p e u r >
10 - Je s u i s d e l e u t r e ( oui / non ) :
11 - Je s u i s m e i s t e r ( oui / non ) :
12 \ No n e w l i n e at end of f i l e
13 + c e t t e l i g n e est m o d i f i e e par : d e l e u t r e p u i s m e i s t e r
14 + Je s u i s d e l e u t r e ( oui / non ) : non
15 + Je s u i s m e i s t e r ( oui / non ) : oui
16 I n d e x : c o n f l i t _ a u t o m a t i s e . txt
17 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
18 - - - c o n f l i t _ a u t o m a t i s e . txt ( r e v i s i o n 2)
19 +++ c o n f l i t _ a u t o m a t i s e . txt ( r e v i s i o n 5)
20 @@ -1 ,4 +1 ,4 @@
21 L i g n e c o m m u n e
22 L i g n e a m o d i f i e r par d e l e u t r e : b o n j o u r m e i s t e r
23 - L i g n e a m o d i f i e r par m e i s t e r :
24 + L i g n e a m o d i f i e r par m e i s t e r : s a l u t d e l e u t r e
25 une a u t r e l i g n e c o m m u n e
5.3 svn update
La commande svn update permet de r´ecup´erer les fichiers d’une r´evision donn´ee en utilisant l’option-r :
1 [ 5 3 3 c o d i c i e l 4 : m e i s t e r ] $ svn u p d a t e - r 3
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3 At r e v i s i o n 3.
4 [~/ w o r k ]
5 [ 5 3 4 c o d i c i e l 4 : m e i s t e r ] $ svn i n f o
6 P a t h : .
7 URL : svn + ssh :// c o d i c i e l 4 / d e p o t _ e x e m p l e / p r o j e t
8 R e p o s i t o r y U U I D : c e 7 a f 9 a b - c9f0 -0310 - bae6 - 9 2 6 f c 7 9 5 d 9 2 6
9 R e v i s i o n : 3
10 N o d e K i n d : d i r e c t o r y
11 S c h e d u l e : n o r m a l
12 L a s t C h a n g e d A u t h o r : m e i s t e r
13 L a s t C h a n g e d Rev : 3
14 L a s t C h a n g e d D a t e : 2005 -02 -23 1 7 : 1 0 : 0 1 + 0 1 0 0 ( Wed , 23 Feb 2 0 0 5 ) Si l’on ne pr´ecise rien, svn updater´ecup`ere la version la plus r´ecente de la base.
5.4 svn cat
La commande svn cat sert `a examiner le contenu d’un fichier `a une r´evision que l’on pr´ecise avec l’option -r :
1 [ 5 3 9 c o d i c i e l 4 : m e i s t e r ] $ svn cat - r 2 c o n f l i t _ a u t o m a t i s e . txt
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
4 L i g n e c o m m u n e
5 L i g n e a m o d i f i e r par d e l e u t r e : b o n j o u r m e i s t e r
6 L i g n e a m o d i f i e r par m e i s t e r :
7 une a u t r e l i g n e c o m m u n e
Ceci peut permettre par exemple de r´ecup´erer un fichier `a une r´evision donn´ee dans un fichier local afin d’utiliser un outil de comparaison graphique plus pratique que l’aust`ere svn diff:
1 [ 5 4 0 c o d i c i e l 4 : m e i s t e r ] $ svn cat - r 2 c o n f l i t _ a u t o m a t i s e . txt >
c o n f l i t _ a u t o m a t i s e . txt . r2
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3 [ 5 4 1 c o d i c i e l 4 : m e i s t e r ] $ ls - l
4 c o n f l i t _ a _ g e r e r . txt
5 c o n f l i t _ a u t o m a t i s e . txt
6 c o n f l i t _ a u t o m a t i s e . txt . r2
5.5 svn revert
La commandesvn revertpermet d’annuler les modifications faites dans un fichier localement et de r´ecup´erer sa version la plus r´ecente dans la base :
1 [ 5 4 4 c o d i c i e l 4 : m e i s t e r ] $ svn s t a t u s
2 M c o n f l i t _ a u t o m a t i s e . txt
3 [ 5 4 5 c o d i c i e l 4 : m e i s t e r ] $ svn r e v e r t c o n f l i t _ a u t o m a t i s e . txt
4 R e v e r t e d ’ c o n f l i t _ a u t o m a t i s e . txt ’
5 [ 5 4 6 c o d i c i e l 4 : m e i s t e r ] $ svn s t a t u s
5.6 svn list
Enfin, la commandesvn listpermet de lister les fichiers d’un d´epˆot. En utilisant l’option -v, on obtient un r´esultat plus d´etaill´e :
1 [ 5 5 0 c o d i c i e l 4 : m e i s t e r ] $ svn l i s t - v
2 m e i s t e r @ c o d i c i e l 4 ’ s p a s s w o r d :
3 5 m e i s t e r 132 Feb 23 1 7 : 5 3 c o n f l i t _ a _ g e r e r . txt
4 3 m e i s t e r 133 Feb 23 1 7 : 1 0 c o n f l i t _ a u t o m a t i s e . txt La premi`ere colonne donne le num´ero de r´evision `a laquelle a eu lieu la derni`ere modification, ensuite on peut lire le nom du d´eveloppeur qui a fait cette modification et ensuite la taille du fichier et la date du d´epˆot dans la base.
6 Conclusion
Nous n’avons vu que les aspects de base de Subversion, mais son utilisation peut se limiter aux commandes que nous avons pr´esent´ees. En revanche pour tout ce qui concerne l’administration d’un d´epˆot, pour la gestion d’un serveur d´edi´e `a Subversion ou pour l’utilisateur d´esient tirer parti de toute la puissance de Subversion, on consultera la documentation (tr`es abordable) disponible sur le site http://subversion.tigris.org/.
La liste des commandes disponibles est donn´ee parsvn help :
1 [ 5 5 3 c o d i c i e l 4 : m e i s t e r ] $ svn h e l p
2 u s a g e : svn < s u b c o m m a n d > [ o p t i o n s ] [ a r g s ]
3 T y p e " svn h e l p < s u b c o m m a n d >" for h e l p on a s p e c i f i c s u b c o m m a n d .
4
5 M o s t s u b c o m m a n d s t a k e f i l e and / or d i r e c t o r y a r g u m e n t s , r e c u r s i n g
6 on the d i r e c t o r i e s . If no a r g u m e n t s are s u p p l i e d to s u c h a
7 command , it w i l l r e c u r s e on the c u r r e n t d i r e c t o r y ( i n c l u s i v e ) by
8 d e f a u l t .
9
10 A v a i l a b l e s u b c o m m a n d s :
11 add
12 b l a m e ( praise , a n n o t a t e , ann )
13 cat
14 c h e c k o u t ( co )
15 c l e a n u p
16 c o m m i t ( ci )
17 c o p y ( cp )
18 d e l e t e ( del , remove , rm )
19 d i f f ( di )
20 e x p o r t
21 h e l p (? , h )
22 i m p o r t
23 i n f o
24 l i s t ( ls )
25 log
26 m e r g e
27 m k d i r
28 m o v e ( mv , rename , ren )
29 p r o p d e l ( pdel , pd )
30 p r o p e d i t ( pedit , pe )
31 p r o p g e t ( pget , pg )
32 p r o p l i s t ( plist , pl )
33 p r o p s e t ( pset , ps )
34 r e s o l v e d
35 r e v e r t
36 s t a t u s ( stat , st )
37 s w i t c h ( sw )
38 u p d a t e ( up )
39
40 S u b v e r s i o n is a t o o l for v e r s i o n c o n t r o l .
41 For a d d i t i o n a l i n f o r m a t i o n , see h t t p :// s u b v e r s i o n . t i g r i s . org / et de l’aide peut ˆetre obtenue sur une option en tapant svn help <commande>:
1 [ 5 5 4 c o d i c i e l 4 : m e i s t e r ] $ svn h e l p l i s t
2 l i s t ( ls ) : L i s t d i r e c t o r y e n t r i e s in the r e p o s i t o r y .
3 u s a g e : l i s t [ T A R G E T . . . ]
4
5 L i s t e a c h T A R G E T f i l e and the c o n t e n t s of e a c h T A R G E T d i r e c t o r y as
6 t h e y e x i s t in the r e p o s i t o r y . If T A R G E T is a w o r k i n g c o p y path , the
7 c o r r e s p o n d i n g r e p o s i t o r y URL w i l l be u s e d .
8
9 The d e f a u l t T A R G E T is ’. ’ , m e a n i n g the r e p o s i t o r y URL of the c u r r e n t
10 w o r k i n g d i r e c t o r y .
11
12 W i t h - - verbose , the f o l l o w i n g f i e l d s s h o w the s t a t u s of the i t e m :
13
14 R e v i s i o n n u m b e r of the l a s t c o m m i t
15 A u t h o r of the l a s t c o m m i t
16 S i z e ( in b y t e s )
17 D a t e and t i m e of the l a s t c o m m i t
18
19 V a l i d o p t i o n s :
20 - r [ - - r e v i s i o n ] arg : ARG ( s o m e c o m m a n d s a l s o t a k e A R G 1 : A R G 2 r a n g e )
21 A r e v i s i o n a r g u m e n t can be one of :
22 N U M B E R r e v i s i o n n u m b e r
23 "{" D A T E "}" r e v i s i o n at s t a r t of
the d a t e
24 " H E A D " l a t e s t in r e p o s i t o r y
25 " B A S E " b a s e rev of item ’ s
w o r k i n g c o p y
26 " C O M M I T T E D " l a s t c o m m i t at or
b e f o r e B A S E
27 " P R E V " r e v i s i o n j u s t b e f o r e
C O M M I T T E D
28 - v [ - - v e r b o s e ] : p r i n t e x t r a i n f o r m a t i o n
29 - R [ - - r e c u r s i v e ] : d e s c e n d r e c u r s i v e l y
30 - - u s e r n a m e arg : s p e c i f y a u s e r n a m e ARG
31 - - p a s s w o r d arg : s p e c i f y a p a s s w o r d ARG
32 - - no - auth - c a c h e : do not c a c h e a u t h e n t i c a t i o n t o k e n s
33 - - non - i n t e r a c t i v e : do no i n t e r a c t i v e p r o m p t i n g
34 - - config - dir arg : r e a d u s e r c o n f i g u r a t i o n f i l e s f r o m d i r e c t o r y ARG
Enfin, nous donnons ici un tableau r´ecapitulatif des diff´erentes commandes les plus courantes : svnadmin create cr´eer une base
svn checkout r´ecup´erer le contenu de la base svn commit soumettre des modifications `a la base svn import importer un projet dans la base svn resolved indiquer que les conflits ont ´et´e r´esolus svn revert annuler toute modification locale svn update mettre `a jour le r´epertoire local svn cat lire le contenu d’un fichier de la base
svn diff regarder les diff´erences entre des versions de la base svn info obtenir des infos sur le r´eperoire local
svn list lister le contenu de la base
svn log voir les messages accompagnant chaque r´evision de la base svn status afficher l’´etat des fichiers/dossiers du r´epertoire local svn add ajouter un fichier/dossier dans l’arborescence de la base svn copy copier des fichiers/dossiers dans l’arborescence de la base svn delete supprimer des fichiers/dossiers de l’arborescence de la base svn mkdir cr´eer un dossier dans l’arborescence de la base
svn move d´eplacer des fichiers/dossiers dans l’arborescence de la base
Tab. 1 – Liste des commandes usuelles de Subversion class´ees par genre.