Subversion, également connu sous le nom de SVN, est un
gestionnaire de version Open
Source distribué sous une licence de type Apache/BSD.
Cet article est avant tout destiné aux développeurs qui ont besoin de suivre
l'évolution de leurs développements en équipe. Subversion stocke toutes les
modifications de versions apportées au fichiers sous forme de révisions.
Nous nous intéresserons ici à l’utilisation de Subversion pour un projet de
développement informatique. Cependant, il est possible d’utiliser Subversion
pour tout type de gestion de contenu, comme une gestion de documentation. Nous
allons voir comment créer rapidement un dépôt Subversion et comment y accéder à
travers Apache2.
Distribution : Ubuntu GNU/Linux 6.10 (Edgy Eft)
Version de SVN : 1.3.2
Subversion fonctionne sur une architecture client/serveur. Les différentes
informations sont stockées dans un dépôt qui fait office de serveur. Les
clients SVN peuvent ensuite accéder au dépôt selon différents moyens. Dans cet
article, l’accès au dépôt SVN se fera via le protocole WebDAV/DeltaV, une
extension de HTTP 1.1.
Le client SVN récupère une "copie de travail" depuis le dépôt. Il est ensuite
possible de travailler localement sur les fichiers, puis de soumettre (commit)
les modifications au dépôt. Le serveur SVN se charge alors de comparer la
version (revision) que vous lui envoyez avec la dernière version qu’il a en
mémoire. Si le fichier n’a pas été modifié entre temps, il est enregistré et le
numéro de révision est incrémenté. Sinon, le serveur SVN vous répond que le
fichier a été modifié et vous présente les différences entre la dernière version
du dépôt et la vôtre.
Le paquet subversion contient à la fois
les outils pour administrer le serveur et le client. Pour accéder à un dépôt SVN
via WebDAV, il faut utiliser les modules mod_dav_svn et
mod_authz_svn du serveur HTTP Apache2. Ces modules sont contenus dans
le paquet libapache2-svn.
|
Important
|
Il n’est pas possible d’utiliser ce module avec Apache 1.x. |
En premier lieu, passer root sur la station. Sous Ubuntu, il n’y a pas de mot de
passe super-utilisateur par défaut, nous utilisons donc sudo. Nous pouvons
ensuite installer les paquets nécessaires.
$ sudo su
Password:
# apt-get install subversion libapache2-svn
Une fois les paquets installés, nous
créons notre dépôt SVN à l’aide de la commande svnadmin. Nous
avons choisi ici de nommer ce dépôt "nouveauprojet" et de l’installer dans
/usr/local/svn
# mkdir /usr/local/svn
# svnadmin create /usr/local/svn/nouveauprojet
# ls -la /usr/local/svn/nouveauprojet
total 36
drwxr-sr-x 7 root staff 4096 2007-01-29 12:09 .
drwxr-sr-x 5 root staff 4096 2007-01-29 12:09 ..
drwxr-sr-x 2 root staff 4096 2007-01-29 12:09 conf
drwxr-sr-x 2 root staff 4096 2007-01-29 12:09 dav
drwxr-sr-x 5 root staff 4096 2007-01-29 12:09 db
-r--r--r-- 1 root staff 2 2007-01-29 12:09 format
drwxr-sr-x 2 root staff 4096 2007-01-29 12:09 hooks
drwxr-sr-x 2 root staff 4096 2007-01-29 12:09 locks
-rw-r--r-- 1 root staff 229 2007-01-29 12:09 README.txt
|
Important
|
Vous pouvez remarquer que des fichiers sont présents dans le
répertoire du dépôt. Vous ne devez pas travailler dans le répertoire que nous
venons de créer. En effet, c’est Subversion qui gère les modifications à
apporter au dépôt. Gardez à l’esprit que vous devez travailler sur une copie
locale. |
Pour information, il est possible d’importer un projet déjà existant à l’aide de
la commande svn import. Il est également possible d’importer des projets
auparavant gérés par CVS, l’ancêtre de Subversion. Pour cela, vous
aurez besoin du paquet cvs2svn.
Nous passons maintenant à la configuration d’Apache2 qui va nous permettre
d’accéder au dépôt SVN.
En premier lieu, nous pouvons vérifier que les modules mod_dav_svn et
mod_authz_svn sont chargés.
# ls /etc/apache2/mods-enabled/ |grep dav_svn
dav_svn.conf
dav_svn.load
Le fichier dav_svn.load contient les directives qui permettent de charger les
deux modules au démarrage d’Apache2. Le fichier dav_svn.conf contient un
exemple de configuration du dépôt SVN.
Nous allons modifier ce fichier afin qu’il réponde à nos besoins.
Ajouts au fichier /etc/apache2/mods-available/dav_svn.conf
# On indique ici le répertoire à utiliser dans l'URL pour accéder au dépôt
<Location /nouveauprojet>
DAV svn
# On renseigne le chemin du dépôt
SVNPath /usr/local/svn/nouveauprojet
# Nous souhaitons donner un accès limité au dépôt. Les utilisateurs anonymes
# pourront avoir un accès en lecture seule. Les membres de l'équipe de
# développement devront s'identifier pour pouvoir soumettre leur
# modifications.
AuthType Basic
AuthName "Projet747.org Subversion Server :)"
# Le fichier .htpasswd contient les comptes et mots de passe de l'équipe de
# développement
AuthUserFile /usr/local/svn/.htpasswd
Satisfy Any
Require valid-user
# Le fichier authz contient les droits d'accès attribués aux utilisateurs
AuthzSVNAccessFile /usr/local/svn/authz
# Dans mon cas, Apache2 utilise l'encodage de caractères ISO-8859-1 par
# défaut. Si votre projet utilise UTF-8, vous pouvez soit modifier votre
# configuration, soit indiquer ici l'encodage à utiliser
AddDefaultCharset utf-8
</Location>
Comme vous pouvez le constater, le fichier de configuration fait appel à deux
autres fichiers : .htpasswd qui contient les comptes et mots de passe et
authz qui contient les autorisations d’accès.
Le paquet Apache2 fournit une commande qui permet de générer des couples
compte/mot de passe. Cette commande est htpasswd :
# htpasswd -cs /usr/local/svn/.htpasswd bruno
New password:
Re-type new password:
Adding password for user bruno
Le paramètre -c indique que nous créons un nouveau fichier htpasswd. Lorsque
vous ajouterez de nouveaux comptes, il ne faudra pas indiquer ce paramètre. Le
paramètre -s force le cryptage SHA1 du mot de passe. Nous pouvons maintenant
créer le fichier authz qui contient les accès aux différentes ressources du
dépôt.
# En premier lieu, nous pouvons créer des groupes
[groups]
neolan-devel = bruno,alx,arkadius
neolan-testeurs = @neolan-devel,psychoben
# Nous donnons ici les droits en lecture/écriture (rw) au groupe neolan-devel
# Les autres utilisateurs n'auront qu'un accès en lecture seule (r) Le chemin
# / indique que nous définissons les droits pour la racine du dépôt
[/]
@neolan-devel = rw
* = r
# Nous définissons ici un répertoire privé. Nous ne souhaitons pas autoriser
# les utilisateurs anonymes à accéder au contenu de ce répertoire. Par contre,
# le groupe des testeurs a besoin de cet accès.
[/private]
@neolan-testeurs = r
* =
Nous avons donc créé différents groupes avec plusieurs utilisateurs. Nous
pouvons créer ces comptes utilisateurs dans le fichier .htpasswd.
# htpasswd -s /usr/local/svn/.htpasswd alx
Nous devons également donner les droits d'écriture à l’utilisateur www-data sur
le dépôt, sans quoi il nous sera impossible de soumettre les modifications.
# chown -Rf www-data /usr/local/svn/nouveauprojet
Maintenant que notre dépôt est configuré, nous pouvons créer la copie de travail
locale.
$ pwd
/home/user
$ mkdir projets ; cd projets
$ svn checkout http://hostname.domain.tld/nouveauprojet
Révision 0 extraite.
Ce résultat est normal puisque nous travaillons sur un nouveau projet. Nous
allons maintenant créer un nouveau fichier et l’ajouter à la copie de travail.
$ pwd
/home/user/projets/nouveauprojet/
$ cat <<EOF >> index.php
<?php
echo 'Hello World!';
?>
EOF
$ svn add index.php
A index.php
Nous pouvons maintenant soumettre notre fichier au dépôt SVN :
$ svn commit index.php -m "Affichage d'un message de bienvenue"
Ajout index.php
Transmission des données .
Révision 1 propagée.
Le paramètre -m permet de commenter la mise à jour du fichier. Il existe
différents clients SVN autres que la console ! Il est ainsi possible de
configurer l’EDI (Environnement de Développement Intégré) Eclipse pour qu’il
accède à un dépôt SVN à l’aide de l’extension
Subclipse.
Pour les utilisateurs de Windows, il existe TortoiseSVN qui s’intègre
directement à Explorer. Pour l’utiliser quotidiennement en milieu professionnel,
je ne peux que vous le conseiller.
Cet article ne présente qu’une configuration simplissime de Subversion et est
loin de couvrir toutes les possibilités qu’offre ce gestionnaire de version
(ainsi que les aspects de sécurité !). Comme indiqué au début de cet article, je
vous conseille la lecture du livre SVN en ligne sur
http://svnbook.red-bean.com/.