frogdev site francophone sur Gentoo
Vous êtes ici : subversion
Dernière modification : February 16 2007 18:49:01.

Définition :
C'est un serveur qui centralise tous les fichiers à partager entre les membres d'un groupe et gère les modifications simultanées des fichiers, tout en gardant un historique de chaque version d'un fichier. Cela permet d'éviter les erreurs, par exemple si quelqu'un fait une mauvaise modification dans un fichier, il est très facile de revenir en arrière puisque chaque version d'un fichier se trouve sur le serveur. Le plus connu des serveurs de source est CVS. Il est très utilisé sur le Web, mais Subversion gagne de plus en plus d'importance et ne va pas tarder à le remplacer. Subversion peut être considéré comme CVS 2 car les développeurs de CVS ont participé son développement. Le but était de garder tous les points forts de CVS tout en corrigeant tous ses défauts.

Le site officiel de Subversion est :
http://subversion.tigris.org/

Livre O'reilly sur subversion téléchargeable gratuitement mais en anglais http://svnbook.red-bean.com/

1. Installation Liste des use disponible : apache2 bash-completion berkdb emacs java minimal nls nowebdav perl python zlib

# echo "dev-util/subversion berkdb apache2" >> /etc/portage/package.use
# emerge subversion

Pour lancer la configuration automatique :

# ebuild subversion config

2. Création du projet en local
Lors de l'évolution d'un programme, il se peut que les développeurs travaillent sur plusieurs versions en même temps.
Prenons pour exemple des développeurs qui viennent de sortir la version 1 d'un logiciel. Les développeurs travaillent sur la version 2 qui implique des changements majeurs dans la structure du programme. Mais en même temps ils doivent sortir une version 1.1 qui corrigera des bogues de la version 1. Les versions 2 et 1.1 du logiciel sont incompatibles, c'est pourquoi il n'est pas possible de stocker tous les fichiers dans un même répertoire (trunk). Pour que les développeurs puissent travailleur sur les 2 versions en même temps, ils vont copier tous les fichiers du projet dans un nouveau répertoire. Ce nouveau répertoire contiendra la copie exacte des fichiers du projet, mais permettra de faire des modifications qui n'impacteront pas. Ce nouveau répertoire est une branche du projet.

La branche principale de travail est appelée "trunk", les autres branches ont pour répertoire racine "branches" dans la convention Subverion. Le répertoire « trunk » du repository contient toujours la version qui sera amenée à évoluer le plus longtemps. Dans notre cas c'est la version 2 du projet. Le répertoire « branches » du repository contient autant de répertoire qu'il y a des branches dans le projet.
Dans notre exemple, on a ici le répertoire trunk qui contient les fichiers de la version 2 du logiciel. Le répertoire branches contient un répertoire qui s'appelle « version1.x » et qui contient tous les fichiers de la version 1.1. Pour résumer, créer une branche, c'est exactement comme si on avait 2 projets différents avec 2 repository différents. Le seul avantage est de regrouper toutes les branches dans un même repository.
Tags Le concept de tag est de prendre une photo du repository à un moment donnée. Par exemple lors de la sortie d'un programme (version 1.0), il est intéressant de savoir quel numéro de révision correspond à telle version. Pour cela on peut tagger le repository afin de se souvenir plus simplement.
Un tag est une copie du repository à un moment donnée. Cela revient à copier dans un répertoire à part tous les fichiers du repository.
Un exemple de structure d'un repository. Cette architecture est conseillée par Subversion.
A la racine il y a 3 répertoires:

* trunk pour les fichiers de la version principale du projet
* branches pour les différents branches
* tags pour la sauvegarde de chaque version du projet

Seul le chef de projet a accès à la branche tags, car c'est lui qui décide quand les versions sortent.
Création du projet :

# mkdir projet
# mkdir projet/branches
# mkdir projet/tags
# mkdir projet/trunks

3. configuration du projet en local :
Mettre les droits appropriés pour /var/svn/repos en fonction des utilisateurs ayant accès aux sources
Import du projet :

$ svn import /home/bouleetbil/Project file:///var/svn/repos/ -m "initial import"

A partir de maintenant, il est possible d'accéder au dossier des sources, pour un réseau local il est possible d'utiliser nfs ou samba pour le partage.

Pour récuperer le contenu du dépot :
$ svn checkout file:///var/svn/repos test1

4. Configuration client Serveur Il peut être utile de partager ces sources sur le réseau /var/svn/repos/conf/svnserve.conf contient la configuration du démon svn, décommenter les lignes suivantes :

anon-access = read # tous le monde peut lire
auth-access = write # Seul les personnes identifiées peuvent écrirent
password-db = passwd # passwd contient les utilisateurs et les mots de passe

Exemple de fichier /var/svn/repos/conf/password-db
[users]
harry = foopassword # harry a pour mot de passe foopassword
sally = barpassword # sally a pour mot de passe barpassword

Le fichier de configuration du démon svn est /etc/conf.d/svnserve :

# The commented variables in this file are the defaults that are used
# in the init-script. You don't need to uncomment them except to
# customize them to different values.

# Options for svnserve
#SVNSERVE_OPTS="--root=/var/svn"

# User and group as which to run svnserve
#SVNSERVE_USER="apache"
#SVNSERVE_GROUP="apache"

Pour une question de sécurité il est possible de passer "-r" en argument à svnserve. Cela reduit l'exportation au répertoire passé après -r
$ svnserve -d -r /var/svn/repos

Configuration svn avec xinetd :
service svnserve
{
disable = no
socket_type = stream
wait = no
user = root
group = root
log_type = FILE /var/log/svnserve
protocol = tcp
log_on_failure += USERID
port = 3690
server = /usr/bin/svnserve
server_args = -i -r /var/svn/repos
}

Pour démarrer le serveur svn
Soit en mode autonome :
# /etc/init.d/svnserve start

Soit avec xinetd
# /etc/init.d/xinetd start

Verifier si le démon tourne
# netstat -anp | grep LISTEN | grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 3303/xinetd
ou
telnet localhost 3690
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
( success ( 1 2 ( ANONYMOUS ) ( edit-pipeline ) )

Il est possible d'acceder au dépot via SSH si vous avez un serveur SSH actif :
$ svn list svn+ssh://frogdev.dyndns.org/repos

Utilisation du module subversion avec Apache2
Editer /etc/conf.d/apache2 afin d'ajouter ces options :
APACHE2_OPTS="-D DEFAULT_VHOST -D SVN -D SVN_AUTHZ -D DAV -D DAV_FS -D SSL -D SSL_DEFAULT_VHOST"

Apache doit avoir le droit d'écrire dans le répertoire du projet :
# chown apache:apache /var/svn/repos/projet -R

Le fichier de configuration du module est ici /etc/apache2/modules.d/47_mod_dav_svn.conf

GNU nano 1.3.9 Fichier : /etc/apache2/modules.d/47_mod_dav_svn.conf

<IfDefine SVN>
<IfModule !mod_dav_svn.c>
LoadModule dav_svn_module modules/mod_dav_svn.so
</IfModule>
<Location /svn/repos>
DAV svn
SVNPath /var/svn/repos
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /var/svn/repos/conf/passhttp
Require valid-user
</Location>
<IfDefine SVN_AUTHZ>
<IfModule !mod_authz_svn.c>
LoadModule authz_svn_module modules/mod_authz_svn.so </IfModule>
</IfDefine>
</IfDefine>

Pour une authentification HTTP basic
# htpasswd2 -cm /var/svn/repos/conf/passhttp harry

Attention le paramètre c créer le fichier, il ne faut mettre ce paramètre que lors de la création du premier utilisateur.

Redémarrer apache :
# /etc/init.d/apache2 restart

Maintenant le dépot est accessible :
$ svn checkout http://frogdev.dyndns.org/svn/repos test1

Maintenant si vous voulez que votre dépot soit accéssible en lecture pour tous le monde : Remplacer dans /etc/apache2/modules.d/47_mod_dav_svn.conf
Require valid-user
par
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>

Maintenant, il est aussi possible de définir des règles.
Voici une autre configuration possible :
<IfDefine SVN>
<IfModule !mod_dav_svn.c>
LoadModule dav_svn_module modules/mod_dav_svn.so
</IfModule>
<Location /svn/repos>
DAV svn
SVNPath /var/svn/repos
AuthName "Subversion repository"
AuthUserFile /var/svn/repos/conf/passhttp
#On tente d'abord un acces anonyme, si ce n'est pas possible on authentifie
Satisfy Any
Require valid-user
AuthzSVNAccessFile /var/svn/repos/conf/PolitiqueSecu
#Comment authentifier un utilisateur
AuthType Basic
</Location>
<IfDefine SVN_AUTHZ>
<IfModule !mod_authz_svn.c>
LoadModule authz_svn_module modules/mod_authz_svn.so
</IfModule>
</IfDefine> </IfDefine>

Le fichier /var/svn/repos/conf/PolitiqueSecu contient les règles.
Voici la stucture de ce fichier :
[groups]
Nom_du_groupe = utilisateur1, utilisateur2

[Nom_du_repo : Path]
compte ou groupe = *, r, w

La première déclaration permet de définir des groupes d'utilisateurs. Ceci va permettre d'appliquer des droits directement sur un groupe.
Ensuite on déclare pour le répertoire d'un repository, les droits des utilisateurs.

Voici un exemple de configuration :
[groups]
developpeur = harry, billy

[/]
*=r
admin=rw

[Projet1:/]
* = r
developpeur=rw

[Projet2:/]
*=
developpeur=r

[Projet2:/branches/harry]
harry=rw


Attention tous les utilisateurs doivent être créé aussi par htpasswd2 dans /var/svn/repos/conf/passhttp

Voir les commentairesAjouter un commentaire

Imprimer cette page Imprimer cette page

Liste de diffusion

Valider 


Espace téléchargement

Téléchargement
Livres (pdf)
Howto



Promouvoir et soutenir le logiciel libre
Go Frugalware, Go

Get Firefox

Gentoo

Logo Apache

Logo Mysql

Logo PHP



nobrevet

Read and comment at the BadVista.org blog

L'Association Francophone des Utilisateurs de Linux et des logiciels libres (AFUL)

Logo greenpeace


grenouille

Me contacter / Mes expériences GNU/Linux

- [ Basé sur Itseasy | Thème : Frogdev ] -
Les informations ne sont données qu'à titre indicatif.
© frogdev site francophone sur Gentoo, Licence FDL 2008

[ Page générée en 0.01499 secondes | Compression gZip active ]
Poids XHTML : 26.49 ko (30.5 ko non compressé) - CSS : 5.92 ko
Eléments chargés : 11.67 ko