.. 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* Š