Mettre en place un (ou +) dépôt SVN
Introduction
La présentation de SVN par Wikipédia est très bien faite.
Sachez que TortoiseSVN est un très bon client pour Windows, pour Linux, il s'agit de subversion
. Ici, nous parlerons que de la mise en place du serveur Linux, qui sera accessible par le protocole svn:
(donc pas besoin de SSH, ni de Apache).
Installation
Attention, attachez vos ceintures, ca va être très dur !
sudo apt-get install subversion
Configuration
Premier dépôt
Une fois votre premier dépôt créé (cf plus bas), éditez en premier lieu le fichier /var/svn/premier_depot/conf/svnserve.conf
. Les commentaires sont assez explicites. Perso, je mets:
anon-access = none auth-access = write password-db = passwd authz-db = authz realm = Mon premier depot SVN
passwd
ressemble vaguement à ceci
[users] moi = mon_mdp lui = son_mdp
et authz
ressemble à ça
[/] moi = rw lui = r * =
Lancement du serveur
svnserve -d -r /var/svn/premier_depot
Cependant, si vous souhaitez que cette commande soit automatiquement lancée au démarrage, créez un fichier /etc/init.d/svnserve
qui contient (en modifiant la ligne OPTIONS) :
#! /bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/bin/svnserve NAME=svnserve DESC="le serveur SVN" test -x $DAEMON || exit 0 OPTIONS="-d -r /var/svn/premier_depot" . /etc/default/rcS start() { echo "Démarre $DESC... " if ! start-stop-daemon --start --quiet --oknodo --exec $DAEMON -- $OPTIONS > /dev/null 2>&1; then status=$? echo $status return $status fi return 0 } case "$1" in start) start ;; stop) echo "Arrête $DESC: " start-stop-daemon --stop --quiet --oknodo --exec $DAEMON echo $? ;; restart|force-reload) $0 stop sleep 1 start ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0
Plusieurs projets
Avec svnserve
, si vous voulez héberger plusieurs projets sur une machine, il y a 2 possibilités.
Un seul dépôt
Soit vous n'utilisez qu'un seul dépôt (/var/svn_unique
par exemple). Alors, utilisez l'arborescence des répertoires pour séparer les projets (/var/svn_unique/projet1
, /var/svn_unique/projet2
, …). Les fichiers de configuration se situent dans /var/svn_unique/conf
. Le fichier authz
pourra ressembler à :
[/] administrateur = rw * = [/projet1] user1 = rw user2 = r * = [/projet2] user2 = rw user3 = rw * = r
L'intérêt est qu'il n'y a qu'un seul groupe de fichiers à gérer ; l'inconvénient est que si un commit est proposé pour un projet, le numéro de révision est incrémenté pour tous les projets.
Plusieurs dépôts
Ou alors vous pouvez séparer vos projets sur différents dépôts (/var/svn_mult/projet1
, /var/svn_mult/projet2
, …). Les fichiers de configuration se situent dans chacun des répertoires (/var/svn_mult/projet1/conf
, /var/svn_mult/projet2/conf
, ..) et ces fichiers sont tous indépendants. Pour lancer le serveur, faites toujours svnserve -d -r /var/svn_mult
: cela détectera la présence de plusieurs dépôts.
L'intérêt est la complète indépendance des dépôts, avec l'inconvénient de la multiplicité des fichiers de configuration. Je préfère cependant largement cette seconde solution.
Notes
Ajout d'un nouveau dépôt
sudo svnadmin create /var/svn/nouveau
A moins que vous ne gériez plusieurs projets en les séparant par l'arborescence, vous devrez configurer /var/svn/nouveau/conf/svnserve.conf
(et passwd
et authz
si besoin). Enfin
svn import -m "Import initial" repertoire/local svn://localhost/nouveau
pour remplir ce dépôt. Il n'y a pas besoin de rédemarrer le serveur.
Sauvegarde
Ne pas copier le répertoire /var/svn/nouveau
(ca peut faire de la merde si qqun est en train de faire un commit
par exemple). Préférez la commande du genre
svnadmin dump /var/svn/nouveau/ > /var/backups/nouveau.20070325
Du côté client
Pour importer le projet sur un ordinateur client, faites
svn checkout svn://nom_du_serveur/depot1 repertoire/client
Attention, cela ne crée pas de répertoire depot1
dans repertoire/client
: il vaut donc mieux utiliser comme répertoire d'import repertoire/client/depot1
.
Les principales commandes sont ensuite svn
: commit
, diff
, log
et update
.