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

Preparer le **repository**

 # mkdir /var/lib/svn
 # chown :src /var/lib/svn
 # chmod g+ws /var/lib/svn
 # ls -la /var/lib/svn
 drwxrwsr-x  2 root src  4096 2006-09-11 00:28 .


 # ln -s /var/lib/svn /svn
 k7-master:/home/thierry# ls -la / | grep svn
 lrwxrwxrwx   1 root root     12 2006-09-11 00:33 svn -> /var/lib/svn


# mkdir /svn/dev

 # adduser svn-dev --system --disabled-login --no-create-home --group
 # adduser thierry svn-dev
 # chown svn-dev:svn-dev /svn/dev
 # chmod g+ws /svn/dev
 # ls -la /svn/dev
 drwxrwsr-x 2 svn-dev svn-dev 4096 2006-09-11 00:55 .

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.1179911789.txt.gz · Dernière modification : 2007/05/23 09:16 de thierry