Outils pour utilisateurs

Outils du site


environnement_prog_svn

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
environnement_prog_svn [2007/05/23 09:16] – créée thierryenvironnement_prog_svn [2008/12/24 09:46] (Version actuelle) thierry
Ligne 3: Ligne 3:
 Un concurrent de CVS Un concurrent de CVS
  
 +Lien:
 +  http://artis.imag.fr/~Xavier.Decoret/resources/svn/index.html
 Liens: Liens:
  
-[[http://ericreboisson.developpez.com/tutoriels/install-subversion/|subversion pour windows et aide]] +[[http://ericreboisson.developpez.com/tutoriels/install-subversion/|subversion pour windows et aide]]\\ 
-[[http://svnbook.red-bean.com/nightly/en/svn.intro.quickstart.html|Quick Start(en)]] +[[http://svnbook.red-bean.com/nightly/en/svn.intro.quickstart.html|Quick Start(en)]]\\ 
-[[http://www.linux-gull.ch/gull/cours/archives/svn/svn-course.pdf|Cours svn (trés complet)]] +[[http://www.linux-gull.ch/gull/cours/archives/svn/svn-course.pdf|Cours svn (trés complet)]]\\ 
-[[http://svnbook.red-bean.com/en/1.1/ch05s03.html|Chapter 5. Repository Administration]]+[[http://svnbook.red-bean.com/en/1.1/ch05s03.html|Chapter 5. Repository Administration]]\\
  
    # apt-get update    # apt-get update
Ligne 33: Ligne 35:
 ===== Quick start ===== ===== Quick start =====
  
-==== Preparer le **repository** ==== 
  
-   # mkdir /var/lib/svn +==== Repertoire des "repository" ====
-   # 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 .+
  
 +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" ====
 +(C'est beaucoup plus cool avec ''inetd''... voir plus loin)\\
 +
 +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
  
-   # 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 +==== Creer un "repository" ==== 
-   # adduser thierry svn-dev +=== create ===
-   # 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 ?) ====+== methode 1 == 
 +  $ su 
 +  # su -s /bin/bash -c "svnadmin create /svn/dev/myproject" svn
  
-Ici, le repertoire-projet est **test1**. (ces notions sont aussi flou qu'un répertoire...)+== methode 2 == 
 +  $ su 
 +  # svnadmin create /svn/dev/myproject 
 +Cela doit appartenir au user ''svn''. 
 +  # chown -R svn:svn /svn/dev/myproject
  
-   $ svnadmin create /svn/dev/test1 +=== password ===
-   $ 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**: ====+A ce stade, si le daemon tourne, la terre entière qui passe par le port TCP (3690) peut modifier le projet!\\ 
 +Mettre des restrictions: 
 +  # cd /svn/dev/myproject/conf 
 +  # vi passwd 
 +  ... 
 +  [users] 
 +  thierry mot_de_passe 
 +  ... 
 +Editer aussi ... 
 +  # vi svnserve.conf 
 +  ... 
 +  [general] 
 +  anon-access none 
 +  auth-access write 
 +  ... 
 +  password-db passwd 
 +Et voila un repository protégé... mais je crois que les mots de passe voyagent en clair (à vérifier) 
  
-D'abord, creer un repertoire provisoire, par exemple dans **~/tmp** et que nous nommerons **sertest** : 
  
-   $ mkdir sertest+ 
 + 
 + 
 + 
 +==== Importe un "project" existant... ==== 
 + 
 +(Ou simplement créer un "project" vide)\\ 
 +D'abord, créer un répertoire provisoire, par exemple dans ''**~/tmp/myproject**''
 + 
 +   $ cd ~/tmp 
 +   $ mkdir myproject 
 +   $ cd myproject
  
 Créeons dans ce répertoire, une arborescence comme suit: Créeons dans ce répertoire, une arborescence comme suit:
  
-   $ cd sertest 
    $ mkdir trunk    $ mkdir trunk
    $ mkdir branches    $ mkdir branches
Ligne 90: Ligne 170:
 Copier les fichiers du projet dans **trunk**: Copier les fichiers du projet dans **trunk**:
  
-   $ cp -~/quelque/part/sertest/* ./trunk/+   $ cp -Rp ~/quelque/part/* ./trunk/
  
-Enfin, on importe tout cela dans **subversion** :+Et enfin, on importe tout cela dans **subversion** :
  
    $ cd ~/tmp    $ cd ~/tmp
-   $ la sertest+   $ la myproject
    total 20    total 20
    drwxr-xr-x 5 thierry thierry 4096 2006-09-11 01:02 .    drwxr-xr-x 5 thierry thierry 4096 2006-09-11 01:02 .
Ligne 103: Ligne 183:
    drwxr-xr-x 4 thierry thierry 4096 2006-04-26 23:19 trunk    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:+On est bien là où il faut... le répertoire parent de mon projet... Importons donc:
  
-   $ svn import myproject file:///svn/dev/test1/myproject -m "initial import for test+  $ svn import myproject svn://localhost/dev/myproject -m "initial import" 
-   Ajout          myproject/trunk +  Domaine d'authentification : <svn://localhost:3690> ffffffff-DDDD-4444-8888-77777777 
-   ... snip ... +  Mot de passe pour 'thierry'
-   Ajout          myproject/trunk/my_debug.c +  Ajout          myproject/trunk 
-   Ajout          myproject/branches +  ... 
-   Ajout          myproject/tags+   Révision 1 propagée
 +Rappel: on passe par le daemon qui tourne en 'localhost', sinon, on aurait pu faire (si on avait les droits d'écrire dans ''/svn/dev/bourse'')
  
 +   $ svn import myproject file:///svn/dev/myproject -m "initial import for test"
 +   Ajout          myproject/trunk
 +   ...
    Révision 1 propagée.    Révision 1 propagée.
 +
 +==== Où sont les mots de passe... ====
 +Par la suite, les mots de passe ne seront plus demandé ! Ils sont stockés dans:
 +  ~/.subversion/auth/svn.simple
 +
  
 ==== Recuperer des fichiers tout neuf du repository: ==== ==== Recuperer des fichiers tout neuf du repository: ====
Ligne 118: Ligne 207:
 Ce mettre dans le répertoire **parent** du projet: Ce mettre dans le répertoire **parent** du projet:
  
-   $ svn checkout file:///svn/dev/test1/myproject/trunk sertest+Via le daemon: 
 +   $ svn checkout svn://localhost/dev/myproject/trunk myproject 
 +ou plus généralement: 
 +   svn checkout svn://Adresse_IP/dev/myproject/trunk myproject
  
-Un repertoire **sertest** est créé avec l'injections de tous les fichiers associés (de **trunk**).+Sans le daemon: 
 +   $ svn checkout file:///svn/dev/myproject/trunk myproject 
 + 
 +Un repertoire **myproject** est créé avec tous les fichiers associés (de **trunk**).
  
 Modifions des choses... Modifions des choses...
Ligne 130: Ligne 225:
    $ svn update    $ svn update
    $ svn commit -m "j'ai fait des p'tains de modifs!"    $ svn commit -m "j'ai fait des p'tains de modifs!"
-   Envoi          sertest.c+   Envoi          monprojet.c
    Transmission des données .    Transmission des données .
    Révision 3 propagée.    Révision 3 propagée.
Ligne 142: Ligne 237:
 Tiens, des infos: Tiens, des infos:
  
-   $ svn info file:///svn/dev/test1/myproject+   $ svn info file:///svn/dev/myproject
    Chemin : myproject    Chemin : myproject
-   URL : file:///svn/dev/test1/myproject+   URL : file:///svn/dev/myproject
  
    Racine du dépôt : file:///svn/dev/test1    Racine du dépôt : file:///svn/dev/test1
Ligne 153: Ligne 248:
    Révision de la dernière modification : 4    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)    Date de la dernière modification: 2006-09-11 01:39:56 +0200 (lun, 11 sep 2006)
 +
 +Ou bien aussi:
 +   $ svn info svn://10.20.1.111/dev/myproject
 +   ...
  
 Pour recuperer la revision 3 (par exemple), et dans le repertoire **r3**: Pour recuperer la revision 3 (par exemple), et dans le repertoire **r3**:
Ligne 199: Ligne 298:
  
    $ svn switch --relocate FROM_URL TO_URL    $ svn switch --relocate FROM_URL TO_URL
 +
  
 ===== Installer en serveur avec SSH ===== ===== Installer en serveur avec SSH =====
 +
 +==== droits ====
 +Il faut préalablement s'assurer que l'utilisateur aura les droits de lire et/ou modifier le repository. Pour repartir des exemples ci-dessus:
 +  # chmod -R g+ws /svn/dev/myproject
 +Et
 +  # adduser thierry svn
  
 ==== Cas simple ==== ==== Cas simple ====
Ligne 227: Ligne 333:
  
 Et c'est relativement long, et ca demande 3 fois le mot de passe... Et c'est relativement long, et ca demande 3 fois le mot de passe...
 +
 +
 +
 +
 +===== svnserve et inetd =====
 +C'est finalement mieux et plus simple qu'un daemon.\\
 +Editer le fichier ''/etc/inetd.conf'' et inserer:
 +  svn     stream  tcp     nowait  svn     /usr/bin/svnserve   svnserve -i -r /svn
 +Puis forcer le rechargement du fichier de conf en faisant:
 +  # ps aux | grep inetd
 +  root      3209  0.0  0.0   1748   576 ?        Ss   May21   0:00 /usr/sbin/inetd
 +Et enfin:
 +  # kill -HUP 3209
 +(ou ''invoke-rc.d openbsd-inetd reload'')
 +
 +:!: Si vous ne trouvez pas "inetd", c'est peut-être simplement parce que ce daemon ne s'est pas donné la peine de resté chargé (car la conf ne le necessitait pas); donc:
 +  # /etc/init.d/openbsd-inetd restart
 +  Restarting internet superserver: inetd
 +
 +Et voila.
  
 ===== Sauver et restaurer ===== ===== Sauver et restaurer =====
Ligne 243: Ligne 369:
  
    $ cat app-dump.svn | svnadmin load /svn/dev/new-app    $ cat app-dump.svn | svnadmin load /svn/dev/new-app
 +
 +
 +===== Deplacer =====
 +Aprés un crash, la bouillie du répertoire **''/svn''**  a été deporté sur un serveur distant...
 +
 +Mais voila que mes trunks, ne sont plus a jour et un **''svn checkout''** est exclus. Et puis de toutes les maniéres:
 +  $ svn update
 +  svn: Impossible d'ouvrir une session ra_local pour l'URL
 +  svn: Le dépôt 'file:///svn/dev/labo/sudo2/trunk' n'a pu être ouvert
 +Tu m'etonnes: le repository est par là maintenant:
 +  svn://debcave/dev/labo/sudo2/trunk
 +Alors je fais:\\
 +  (sous réserve:)
 +  $ svn cleanup
 +et enfin:
 +  $ svn switch --relocate file:///svn/dev/labo/sudo2/trunk svn://debcave/dev/labo/sudo2/trunk
 +Et voila !
  
environnement_prog_svn.1179911789.txt.gz · Dernière modification : 2007/05/23 09:16 de thierry