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

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
environnement_prog_svn [2007/05/23 09:57] 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:
  
Ligne 45: Ligne 47:
   # adduser svn --system --disabled-login --no-create-home --group   # 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 On l'utilisera par la suite, car il sera le seul autorisé a manipuler directement les repository
 +
  
 ==== Installer le daemon "svnserve" ==== ==== 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''). D'abord preparer un repertoire pour recevoir le PID (generer par le user ''svn'').
   # mkdir /var/run/svn   # mkdir /var/run/svn
Ligne 105: Ligne 110:
 Faire en sorte que ça fonctionne au reboot. Faire en sorte que ça fonctionne au reboot.
   # update-rc.d svnserve-daemon defaults   # update-rc.d svnserve-daemon defaults
 +
  
  
 ==== Creer un "repository" ==== ==== Creer un "repository" ====
 +=== create ===
 +
 +== methode 1 ==
 +  $ su
 +  # su -s /bin/bash -c "svnadmin create /svn/dev/myproject" svn
 +
 +== methode 2 ==
 +  $ su
   # svnadmin create /svn/dev/myproject   # svnadmin create /svn/dev/myproject
 Cela doit appartenir au user ''svn''. Cela doit appartenir au user ''svn''.
   # chown -R svn:svn /svn/dev/myproject   # chown -R svn:svn /svn/dev/myproject
 +
 +=== password ===
  
 A ce stade, si le daemon tourne, la terre entière qui passe par le port TCP (3690) peut modifier le projet!\\ A ce stade, si le daemon tourne, la terre entière qui passe par le port TCP (3690) peut modifier le projet!\\
Ligne 130: Ligne 146:
 Et voila un repository protégé... mais je crois que les mots de passe voyagent en clair (à vérifier)  Et voila un repository protégé... mais je crois que les mots de passe voyagent en clair (à vérifier) 
  
-==== 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+==== 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 164: 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 177: 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 192: 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 204: 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 216: 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 227: 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 273: 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 301: 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 317: 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.1179914239.txt.gz · Dernière modification : 2007/05/23 09:57 de thierry