47.5. Introduction à Subversion

Subversion est un système de contrôle de versions Open Source et est souvent considéré comme le successeur de CVS. Par conséquent, les propriétés déjà présentées de CVS s'appliquent aussi en grande partie à subversion. Il est surtout intéressant si l'on souhaite bénéficier des avantages de CVS sans avoir à en subir les inconvénients. Beaucoup de ces propriétés ont déjà été présentées dans les grandes lignes dans la Section 47.1.3, « subversion ».

47.5.1. Configuration d'un serveur Subversion

La configuration d'un référentiel sur un serveur est une procédure assez simple. Pour cela, subversion fournit un outil d'admnistration. Pour installer un nouveau référentiel, saisissez la commande :

svnadmin create /chemin/vers/le/referentiel

D'autres options sont disponibles via svnadmin help. Contrairement à CVS, subversion n'est pas basé sur RCS mais sur la base de données de Berkeley. Veillez à ne pas installer de référentiel sur des systèmes de fichiers distants tels que NFS, AFS ou Windows SMB. La base de données nécessite les mécanismes de verrouillage POSIX que les systèmes mentionnés ci-dessus ne prennent pas en charge.

Pour examiner le contenu d'un référentiel existant, utilisez la commande svnlook.

svnlook info /chemin/vers/le/referentiel

Pour que différents utilisateurs puissent accéder au référentiel, un serveur doit être configuré. Dans ce cas, on peut avoir recours au serveur Web Apache avec WebDAV ou utiliser le propre serveur de subversion, svnserve. Dès que svnserve fonctionne, on peut accéder au référentiel à l'aide de svn:// ou svn+ssh:// saisi dans un URL. Le fichier de configuration /etc/svnserve.conf vous permet de définir les utilisateurs qui doivent s'authentifier à l'invite de svn.

La décision pour Apache ou pour svnserve dépend de nombreux facteurs. Ici, un coup d'œil à l'ouvrage consacré à subversion s'impose. Vous trouverez plus d'informations à ce sujet dans la Section 47.5.3, « Informations complémentaires ».

47.5.2. Utilisation

Pour accéder à un référentiel Subversion, il existe la commande svn (similaire à cvs). Si le serveur est correctement configuré (avec un référentiel correspondant), chaque client peut accéder à son contenu à l'aide de l'une des commandes suivantes :

svn list http://svn.example.com/chemin/vers/le/projet

ou

svn list svn://svn.example.com/chemin/vers/le/projet

Grâce à la commande svn checkout, vous pouvez enregistrer un projet existant dans le répertoire actuel :

svn checkout http://svn.example.com/chemin/vers/le/projet nom_du_projet

La validation crée un nouveau sous-répertoire nom_du_projet sur le client. On peut ainsi mettre en œuvre diverses modifications (ajout, copie, renommage, suppression) :

svn add fichier
svn copy ancien_fichier nouveau_fichier
svn move ancien_fichier nouveau_fichier
svn delete fichier

Chacune de ces commandes est applicable non seulement à des fichiers, mais aussi à des répertoires. De plus, subversion peut aussi attribuer ce que l'on appelle des propriétés à un fichier ou à un répertoire :

svn propset license GPL foo.txt

Dans l'exemple précédent concernant le fichier foo.txt, la propriété license se voit attribuer la valeur GPL. Grâce à svn proplist, vous pouvez afficher les propriétés :

svn proplist --verbose foo.txt
  Properties on 'foo.txt':
  license : GPL

Enregistrez les modifications sur le serveur avec svn commit. Pour qu'un autre utilisateur obtienne vos modifications dans son répertoire de travail, il doit procéder à une synchronisation avec le serveur à l'aide de la commande suivante svn update.

À la différence de CVS, l'état d'un répertoire de travail dans subversion peut être affiché sans avoir à accéder au référentiel avec la commande svn status. Dans ce cas, les modifications locales sont affichées dans cinq colonnes, la première colonne étant la plus importante :

''

Aucune modification

'A'

L'objet est à ajouter

'D'

L'objet est à supprimer

'M'

L'objet a été modifié

'C'

L'objet est en situation de conflit

'I'

L'objet a été ignoré

'?'

L'objet n'est pas soumis au contrôle de versions

'!'

L'objet est manquant. Cet indicateur apparaît si l'objet a été supprimé ou déplacé sans utiliser la commande svn.

'~'

L'objet a été pris en charge comme fichier mais il a été, depuis lors, remplacé par un répertoire ou inversement.

La deuxième colonne indique l'état des propriétés. La signification de toutes les autres colonnes est consultable dans l'ouvrage consacré à subversion.

Utilisez la commande svn help pour obtenir la description d'un paramètre ou d'une commande :

				
svn help proplist
proplist (plist, pl): List all properties on files, dirs, or revisions.
usage: 1. proplist [PATH...]
       2. proplist --revprop -r REV [URL]

  1. Lists versioned props in working copy.
  2. Lists unversioned remote props on repos revision.
...

47.5.3. Informations complémentaires

Le premier point de référence est la page d'accueil du projet subversion, sur le site http://subversion.tigris.org. Après l'installation du paquetage subversion-doc, vous trouverez un livre en langue anglaise très intéressant et complet dans le répertoire file:///usr/share/doc/packages/subversion/html/book.html. Cet ouvrage est également disponible en ligne à l'adresse http://svnbook.red-bean.com/svnbook/index.html.