Outils pour utilisateurs

Outils du site


environnement_prog_svn

Ceci est une ancienne révision du document !


SVN - Subversion

Un concurrent de CVS

Liens:

subversion pour windows et aide
Quick Start(en)
Cours svn (trés complet)
Chapter 5. Repository Administration

 # apt-get update
 # apt-get install subversion
 $ svn --version
 svn, version 1.3.2 (r19776)
     compilé Aug 15 2006, 08:51:49

 Copyright (C) 2000-2006 CollabNet.
 Subversion is open source software, see http://subversion.tigris.org/
 This product includes software developed by CollabNet (http://www.Collab.Net/).

 Les modules d'accès à un dépôt (RA) suivants sont disponibles :

 * ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.
   - handles 'http' scheme
   - handles 'https' scheme
 * ra_svn : Module pour accéder à un dépôt avec le protocole réseau propre de svn
   - handles 'svn' scheme
 * ra_local : Module for accessing a repository on local disk.
   - handles 'file' scheme

Quick start

Repertoire des "repository"

Creer le répertoire de stockage, en attribuant le groupe src.

# mkdir /var/lib/svn

Creer un lien a la racine, pour clarifier la suite.

# ln -s /var/lib/svn /svn

Par exemple, creer un sous-repertoire dev.

# mkdir /svn/dev

Créer le user svn

# adduser svn --system --disabled-login --no-create-home --group

On l'utilisera par la suite, car il sera le seul autorisé a manipuler directement les repository

Installer le daemon "svnserve"

D'abord preparer un repertoire pour recevoir le PID (generer par le user svn).

# mkdir /var/run/svn
# chown :svn /var/run/svn
# chmod g+ws /var/run/svn

Installer un scripte comme ça là: /etc/init.d/svnserve-daemon

#!/bin/sh

NAME="svnserve-daemon"
DESC="subversion"

SVNDAEMON="/usr/bin/svnserve"

[ -x $SVNDAEMON ] || exit 0

PIDFILE="/var/run/svn/svnserve.pid"
LISTENPORT="3690"
SVNPATH="/svn"
SVNUSER="svn:svn"

start()
{
  echo -n "Starting $DESC: $NAME"
  start-stop-daemon --start --quiet --exec "$SVNDAEMON" \
  -c "$SVNUSER" -- -d --listen-port "$LISTENPORT" -r "$SVNPATH" --pid-file "$PIDFILE"
  echo "."
}

stop()
{
  echo -n "Stopping $DESC: $NAME"
  start-stop-daemon --stop --quiet --pidfile "$PIDFILE"
  # effacer le fichier PID (je prefere)
  [ ! -e "$PIDFILE" ] || rm "$PIDFILE"
  echo "."
}

case "$1" in
  start)
      start
      ;;
  stop)
      stop
      ;;
  restart)
      stop
      sleep 1
      start
      ;;
  *)
      echo "Usage ... {start|restart|stop} " >&2
      exit 64
      ;;
esac
exit 0

Noter que ce daemon “voit” tout les “repository” dans /svn.
Faire en sorte que ça fonctionne au reboot.

# update-rc.d svnserve-daemon defaults

Creer un "repository"

# svnadmin create /svn/dev/myproject

Cela doit appartenir au user svn.

# chown -R svn:svn /svn/dev/myproject

Creer un repertoire-projet (ou un repertoire pour des projets ?)

Ici, le repertoire-projet est test1. (ces notions sont aussi flou qu'un répertoire…)

 $ svnadmin create /svn/dev/test1
 $ la /svn/dev/test1
 total 36
 drwxr-sr-x 7 thierry svn-dev 4096 2006-09-11 00:58 .
 drwxrwsr-x 3 svn-dev svn-dev 4096 2006-09-11 00:58 ..
 drwxr-sr-x 2 thierry svn-dev 4096 2006-09-11 00:58 conf
 drwxr-sr-x 2 thierry svn-dev 4096 2006-09-11 00:58 dav
 drwxr-sr-x 5 thierry svn-dev 4096 2006-09-11 00:58 db
 -r--r--r-- 1 thierry svn-dev    2 2006-09-11 00:58 format
 drwxr-sr-x 2 thierry svn-dev 4096 2006-09-11 00:58 hooks
 drwxr-sr-x 2 thierry svn-dev 4096 2006-09-11 00:58 locks
 -rw-r--r-- 1 thierry svn-dev  229 2006-09-11 00:58 README.txt

Importe un **project**existant dans le repertoire **test1**:

D'abord, creer un repertoire provisoire, par exemple dans ~/tmp et que nous nommerons sertest :

 $ mkdir sertest

Créeons dans ce répertoire, une arborescence comme suit:

 $ cd sertest
 $ mkdir trunk
 $ mkdir branches
 $ mkdir tags

Laisser tags et branches vide. (y parait que c'est bien…).

Copier les fichiers du projet dans trunk:

 $ cp -R ~/quelque/part/sertest/* ./trunk/

Enfin, on importe tout cela dans subversion :

 $ cd ~/tmp
 $ la sertest
 total 20
 drwxr-xr-x 5 thierry thierry 4096 2006-09-11 01:02 .
 drwxr-xr-x 3 thierry thierry 4096 2006-09-11 01:04 ..
 drwxr-xr-x 2 thierry thierry 4096 2006-09-11 01:02 branches
 drwxr-xr-x 2 thierry thierry 4096 2006-09-11 01:02 tags
 drwxr-xr-x 4 thierry thierry 4096 2006-04-26 23:19 trunk

On est bien là ou il faut… le repertoire parent de mon projet… Importons donc:

 $ svn import myproject file:///svn/dev/test1/myproject -m "initial import for test"
 Ajout          myproject/trunk
 ... snip ...
 Ajout          myproject/trunk/my_debug.c
 Ajout          myproject/branches
 Ajout          myproject/tags
 Révision 1 propagée.

Recuperer des fichiers tout neuf du repository:

Ce mettre dans le répertoire parent du projet:

 $ svn checkout file:///svn/dev/test1/myproject/trunk sertest

Un repertoire sertest est créé avec l'injections de tous les fichiers associés (de trunk).

Modifions des choses…

 $ vi ... etc...


 $ svn update
 $ svn commit -m "j'ai fait des p'tains de modifs!"
 Envoi          sertest.c
 Transmission des données .
 Révision 3 propagée.
 $ svn add newfile.c
 $ svn update
 $ svn commit -m "un nouveau fichier"
 Ajout          newfile.c
 Transmission des données .

Tiens, des infos:

 $ svn info file:///svn/dev/test1/myproject
 Chemin : myproject
 URL : file:///svn/dev/test1/myproject
 Racine du dépôt : file:///svn/dev/test1
 UUID du dépôt : xxxx
 Révision : 4
 Type de noeud : répertoire
 Auteur de la dernière modification : thierry
 Révision de la dernière modification : 4
 Date de la dernière modification: 2006-09-11 01:39:56 +0200 (lun, 11 sep 2006)

Pour recuperer la revision 3 (par exemple), et dans le repertoire r3:

 $ svn checkout file:///svn/dev/test1/myproject r3 -r 3

Utiliser svn status pour voir ce qu'on modifié localement. (alors que svn update fait une verification avec le repository)

 $ svn log

C'est bien aussi.

svnlook

Regarder l'arbre:

 $ svnlook tree /svn/dev

Imprimer un fichier de l'arbre

 $ svnlook cat /svn/dev labo/book/trunk/ex2.c

Mais si on est dans un répertoire 'checkouted' on peut aussi faire:

 $ svn info

ou

 $ svn ls -v

ou

 $ svn cat lefichier

Annuler toutes les modifications locales:

 $ svn revert PATH

Et on revient a l'etat du dernier 'update' ou 'checkout'

Ce qui a été modifié:

 $ svn log [PATH] -v

En cas de deplacement d'un repository:

 $ svn switch --relocate FROM_URL TO_URL

Installer en serveur avec SSH

Cas simple

C'est fort simple, il n'y a rien (?) a faire sur le serveur, l'authentification par SSH est suffisante. Donc sur le client, faire un truc du genre:

 $ svn checkout svn+ssh://thierry@k7/svn/dev/app/trunk app

Et aprés la demande du mot de passe 3 fois (et oui!) on a enfin recupéré les fichiers qui sont dans le répertoire app. Ensuite, on peut modifier les fichiers etc… et faire les commandes habituelles:

 $ cd app
 $ svn update
 $ svn commit -m "j'ai fait des trucs"

Et a chaque fois que necessaire, un passe est demandé.

SSH sur un autre port

Sur le client, editer le fichier ~/.subversion/config et ajouter cela dans la section [tunnels] :

 k7 = ssh -p 5322

Alors a l'invocation de svn+k7, ssh sera appellé avec le paramètre -p 5322 qui est le port ouvert pour SSH… Waouh…

 $ svn checkout svn+k7://thierry@k7/svn/dev/app/trunk app

Et c'est relativement long, et ca demande 3 fois le mot de passe…

Sauver et restaurer

Utiliser le jeu de commande dump et load avec svnadmin.

Extraire un dump dans un fichier:

 $ svnadmin dump /svn/dev/app >app-dump.svn

Ensuite, pour l'exemple, on cree un nouveau repository:

 $ svnadmin create /svn/dev/new-app

Et puis on charge dedans:

 $ cat app-dump.svn | svnadmin load /svn/dev/new-app
environnement_prog_svn.1179913518.txt.gz · Dernière modification : 2007/05/23 09:45 de thierry