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.