====== 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''.