wiki:VincentFAQ

Version 13 (modified by garonne, 19 years ago) (diff)

--

.. contents::
.. sectnum::

-----

.. ** DOC SVN **

Doc SVN
=======

Récupération du bouquin de référence
------------------------------------

(`le site`_ et `la doc locale`_  (Version 1.1 - Revision 12923))

.. _`le site`: http://svnbook.red-bean.com/
.. _`la doc locale`:
file:///Users/Shared/Docs/Programmation/Outils/Subversion/svnbook.red-bean.c
om/en/1.1/index.html

::

   $> cd /Users/Shared/Docs/Programmation/Outils/Subversion
   $> swget http://svnbook.red-bean.com/en/1.1/index.html


.. ** MANIPULATION DE REPOSITORY **

Manipulation de repository
==========================

Création d'un repository de test
----------------------------------

(je ne sais pas forcer le groupe via ''sudo'', donc 2 commandes)

::

  $> svnadmin create --fs-type fsfs SVNNEW

ou

::

  $> svnadmin create --fs-type bdb SVNNEW

::

  $> sudo chown -R www:svn SVNNEW
  $> sudo chmod -R g+w SVNNEW

Passage d'un repository à l'autre
---------------------------------

::

  $> sudo svnadmin dump /Users/Shared/Roscoff > SVN-Roscoff.dump
  $> sudo svnadmin load /Users/Shared/SVNTEST < SVN-Roscoff.dump

Par contre, 

::

  $> sudo -u www svnadmin load --parent-dir Roscoff ./SVNNEW <
SVN-Roscoff.dump

ne marche pas si le répertoire Roscoff n'existe pas dans le repository; je
crée ce dernier via le serveur HTTP pour des raisons de droits d'accès
('''rw''' pour ''www'', '''r''' seulement pour le groupe ''svn''):

::

  $> svn mkdir -m "Creation directory Roscoff"
http://127.0.0.1:8800/Svn/test/Roscoff
  $> sudo -u www svnadmin load --parent-dir Roscoff ./SVNTEST <
SVN-Roscoff.dump


Exemple de réorganisation d'un repository
-----------------------------------------
::

  $> svn list http://localhost:8800/Svn/SVN
  $> svn mkdir -m "Creation du repertoire Roscoff"
http://localhost:8800/Svn/SVN/Roscoff
  $> svn move -m "Deplacement du repertoire FW dans Roscoff"
http://localhost:8800/Svn/SVN/FW http://localhost:8800/Svn/SVN/Roscoff/FW


Migration de DB Berkeley à FSFS
-----------------------------------------
::

  $> sudo /sw/sbin/apachectl stop
  $> sudo svnadmin dump SVN > ~/SVN.dump
  $> sudo mv SVN SVN-BREAK
  $> sudo svnadmin create --fs-type fsfs SVN
  $> sudo chown -R www:svn SVN
  $> sudo chmod -R g+w SVN
  $> sudo svnadmin load SVN < ~/SVN.dump
  $> sudo /sw/sbin/apachectl start


Suppression d'un répertoire importé par erreur
----------------------------------------------
::

  $> sudo /sw/sbin/apachectl stop
  $> sudo svnadmin dump /Users/Shared/Svn/COOL > ~/Temp/COOL-dump
  $> cat ~/Temp/COOL-dump | svndumpfilter exclude Sites/Perf/Database >
~/Temp/COOL-new-dump
  $> sudo mv COOL COOL-bak
  $> sudo svnadmin create --fs-type fsfs COOL
  $> sudo chown -R www:svn COOL
  $> sudo chmod -R g+w COOL
  $> sudo svnadmin load COOL < ~/Temp/COOL-new-dump
  $> sudo /sw/sbin/apachectl start

Il semble qu'on ne puisse supprimer que des répertoires et non des fichiers
individuellement.

.. ** GESTION D'UN PACKAGE **

Gestion d'un package
====================

Import
--------
::

  $> cd ~/Projets/Atlas
  $> svn import -m "Import de IOVDbSvc" IOVDbSvc
http://localhost:8800/Svn/SVN/Atlas/IOVDbSvc
  $> svn list http://localhost:8800/Svn/SVN/Atlas

On importe la *copie* de travail locale **vers** le *dépot*.

Examen
----------
::

  $> svn list --verbose http://localhost:8800/Svn/COOL/

L'option ''--verbose'' rajoute le numéro de révision, l'auteur et la date de
révision pour chaque répertoire.

*Check out*
--------------
::

  $> svn co http://127.0.0.1:8800/Svn/SVN/Atlas/IOVDbSvc IOVDbSvc

On récupère le répertoire du *dépot* **vers** la *copie* de travail locale.

Update
--------
::

  $> 

Tagging
---------
::

  $> svn copy http://localhost:8800/Svn/SVN/Atlas/IOVDbSvc \
              http://localhost:8800/Svn/SVN/Atlas/IOVDbSvc-00-01-47 \
              -m "Tagging IOVDbSvc-00-01-47"

*Correction* d'un tag
-------------------------
Deux stratégies possibles :

- corriger dans la *branche principale*, supprimer le tag obsolète et
re-tagger (méthode utilisée par Michel)

::

  $> svn rm http://localhost:8800/Svn/COOL/Sites/Perf-00-00-03 \
              -m "Suppression tag Perf-00-00-03 pour application patch - Cf
source:Sites/Perf_ChangeLog"
  $> ci -m "Corrections et patch -  Cf source:Sites/Perf_ChangeLog"
  $> svn copy http://localhost:8800/Svn/COOL/Sites/Perf \
              http://localhost:8800/Svn/COOL/Sites/Perf-00-00-03 \
              -m "Nouveau tag Perf-00-00-03"

- introduire le patch (corriger) dans la *branche taggée* puis mettre à jour
la branche principale (merge) (méthode *Christian*)

.. ** GESTION DES 'PROPERTIES' **

Gestion des 'properties'
========================

svn:ignore
----------

On donne à **Subversion** la liste des fichiers à ignorer en définissant la
*property* **svn::ignore** sur les répertoires.

À partir d'une liste de fichiers (par exemple *.cvsignore*) :

::

  $> svn propset -R svn:ignore . -F .cvsignore

ou bien en éditant directement la *property* :

::

  $> setenv SVN_EDITOR vi
  $> svn propedit svn:ignore .

Les *properties* sont versionnées :

::

  $> svn commit -m "Ignoring ignorable files"


.. ** ADMINISTRATION DU DÉPOT **

Administration du dépot
========================

recover
----------

Il faut absolument penser à **arêter le serveur apache** avant de toucher au
dépot.

::

  $> sudo /sw/sbin/apachectl stop
  $> sudo svnadmin recover SVN
  $> sudo svnadmin verify SVN
  $> sudo /sw/sbin/apachectl start

dump/load
------------

Quand on ne se sort pas d'une erreur *FATAL*, on peut tenter ça :

::

  $> sudo svnadmin SVN > ~/SVN.dump
  $> sudo mv SVN SVN-BAK
  $> sudo svnadmin create SVN
  $> sudo chown -R www:svn SVN
  $> sudo chmod -R g+w SVN
  $> sudo svnadmin SVN < ~/SVN.dump

Ce type de manip a disparu en passant en *fsfs* Š