====== Mettre en place un (ou +) dépôt SVN ======
===== Introduction =====
La présentation de SVN par [[http://fr.wikipedia.org/wiki/Subversion_(logiciel)|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''.