Chapitre 4. Le référentiel

Table des matières

Création de référentiel
Créer un référentiel avec le client de ligne de commande
Créer le référentiel avec TortoiseSVN
Accès local au référentiel
Accessing a Repository on a Network Share
Disposition du référentiel
Sauvegarde de référentiel
Scripts hook
Liens d'extraction

Peu importe le protocole que vous utilisez pour avoir accès à vos référentiels, vous devez toujours créer au moins un référentiel. Cela peut être fait soit avec le client de ligne de commande de Subversion soit avec TortoiseSVN.

Si vous n'avez pas encore créé de référentiel Subversion, il est temps de le faire maintenant.

Création de référentiel

You can create a repository with the FSFS backend or with the older Berkeley Database (BDB) format. The FSFS format is generally faster and easier to administer, and it works on network shares and Windows 98 without problems. The BDB format was once considered more stable simply because it has been in use for longer, but since FSFS has now been in use in the field for several years, that argument is now rather weak. Read Choosing a Data Store in the Subversion book for more information.

Créer un référentiel avec le client de ligne de commande

  1. Créez un dossier vide avec le nom SVN (par exemple D:\SVN\), qui est utilisé comme racine pour tous vos référentiels.

  2. Créez un autre dossier MonNouveauRéférentiel dans D:\SVN\.

  3. Ouvrez l'invite de commande (ou la boîte DOS), allez vers D:\SVN\ et tapez

    svnadmin create --fs-type bdb MonNouveauRéférentiel
    

    ou

    svnadmin create --fs-type fsfs MonNouveauRéférentiel
    

Maintenant vous avez un nouveau référentiel situé à D:\SVN\MonNouveauRéférentiel.

Créer le référentiel avec TortoiseSVN

Figure 4.1. Le menu TortoiseSVN pour les dossiers non versionnés

Le menu TortoiseSVN pour les dossiers non versionnés

  1. Ouvrez l'explorateur Windows

  2. Créez un nouveau dossier et nommez-le par exemple SVNRéférentiel

  3. Faites un clic droit sur le dossier nouvellement créé et sélectionnez TortoiseSVNCréer un référentiel ici....

    Un référentiel est alors créé à l'intérieur du nouveau dossier. N'éditez pas ces fichiers vous-même !!! Si vous avez des erreurs assurez vous que le dossier est vide et qu'il n'est pas protégé en écriture.

Astuce

TortoiseSVN no longer offers the option to create BDB repositories, although you can still use the command line client to create them. FSFS repositories are generally easier for you to maintain, and also makes it easier for us to maintain TortoiseSVN due to compatibility issues between the different BDB versions.

Future versions of TortoiseSVN will not support file:// access to BDB repositories due to these compatibility issues, although it will of course always support this repository format when accessed via a server through the svn://, http:// or https:// protocols. For this reason, we strongly recommend that any new repository which must be accessed using file:// protocol is created as FSFS.

Of course we also recommend that you don't use file:// access at all, apart from local testing purposes. Using a server is more secure and more reliable for all but single-developer use.

Accès local au référentiel

Pour accéder à votre référentiel local vous avez besoin du chemin vers ce dossier. Souvenez-vous juste que Subversion s'attend à des chemins de référentiels dans la forme file:///C:/SVNRéférentiel/. Notez l'utilisation de slashs.

Pour avoir accès à un référentiel placé sur une partage réseau vous pouvez soit utiliser le mappage de disque, ou vous pouvez utiliser le chemin UNC. Pour les chemins UNC, la forme est file://NomDuServeur/chemin/vers/référentiel/. Notez qu'il y a seulement 2 slashs au début ici.

Avant SVN 1.2, les chemins UNC devaient être donnés dans la forme plus obscure file:///\NomDuServeur/chemin/vers/référentiel Cette forme est toujours supportée, mais n'est pas recommandée.

Avertissement

Do not create or access a Berkeley DB repository on a network share. It cannot exist on a remote file system. Not even if you have the network drive mapped to a drive letter. If you attempt to use Berkeley DB on a network share, the results are unpredictable - you may see mysterious errors right away, or it may be months before you discover that your repository database is subtly corrupted.

Accessing a Repository on a Network Share

Although in theory it is possible to put a FSFS repository on a network share and have multiple users access it using file:// protocol, this is most definitely not recommended. In fact we would strongly discourage it, and do not support such use.

Firstly you are giving every user direct write access to the repository, so any user could accidentally delete the entire repository or make it unusable in some other way.

Secondly not all network file sharing protocols support the locking that Subversion requires, so you may find your repository gets corrupted. It may not happen straight away, but one day two users will try to access the repository at the same time.

Thirdly the file permissions have to be set just so. You may just about get away with it on a native Windows share, but SAMBA is particularly difficult.

file:// access is intended for local, single-user access only, particularly testing and debugging. When you want to share the repository you really need to set up a proper server, and it is not nearly as difficult as you might think. Read Chapitre 3, Mettre en place un serveur for guidelines on choosing and setting up a server.

Disposition du référentiel

Avant que vous n'importiez vos données dans le référentiel vous devriez d'abord penser à la façon dont vous voulez organiser vos données. Si vous utilisez une des dispositions recommandées, ce sera beaucoup plus facile plus tard.

There are some standard, recommended ways to organize a repository. Most people create a trunk directory to hold the « main line » of development, a branches directory to contain branch copies, and a tags directory to contain tag copies. If a repository holds only one project, then often people create these top-level directories:

/trunk
/branches
/tags

Si un référentiel contient de multiples projets, les gens indexent souvent leur disposition par branche :

/trunk/paint
/trunk/calc
/branches/paint
/branches/calc
/tags/paint
/tags/calc

...ou par projet:

/paint/trunk
/paint/branches
/paint/tags
/calc/trunk
/calc/branches
/calc/tags

L'indexation par projet a un sens si les projets ne sont pas étroitement liés et si chacun est extrait individuellement. Pour des projets liés où vous pouvez vouloir extraire tous les projets en une fois, ou où les projets sont tous liés ensemble dans un unique package de distribution, il est souvent mieux d'indexer par branche. De cette façon vous avez seulement un tronc à extraire et les relations entre les sous-projets sont plus facilement visibles.

Si vous adoptez une approche de niveau supérieur /trunk /tags /branches, il va sans dire que vous devez copier le tronc en entier pour chaque branche et chaque étiquette et d'une certaine façon, cette structure offre le plus de flexibilité.

Pour les projets sans rapport vous pouvez préférer utiliser des référentiels séparés. Quand vous livrez des changements, c'est le numéro de révision du référentiel entier qui change, pas le numéro de révision du projet. Avoir 2 projets sans rapport qui partagent un référentiel peut signifier de grands écarts dans les numéros de révision. Les projets Subversion et TortoiseSVN apparaissent à la même adresse hôte, mais sont des référentiels complètement séparés permettant le développement indépendant et aucune confusion sur les numéros de génération.

Bien sûr, vous êtes libre d'ignorer ces dispositions communes. Vous pouvez créer n'importe quel sorte de variation, ce qui marche le mieux pour vous ou votre équipe. Rappelez-vous que quoi que vous choisissez, ce n'est pas un engagement permanent. Vous pouvez réorganiser votre référentiel à tout moment. Parce que les branches et les étiquettes sont des répertoires ordinaires, TortoiseSVN peut les déplacer ou les renommer comme vous le souhaitez.

Passer d'une disposition à une autre ne revient qu'à exécuter une série de mouvements côté serveur ; si vous n'aimez pas la façon dont les choses sont organisées dans le référentiel, jonglez juste avec les répertoires.

So if you haven't already created a basic folder structure inside your repository you should do that now. There are two ways to achieve this. If you simply want to create a /trunk /tags /branches structure, you can use the repository browser to create the three folders (in three separate commits). If you want to create a deeper hierarchy then it is simpler to create a folder structure on disk first and import it in a single commit, like this:

  1. créez un nouveau répertoire vide sur votre disque dur

  2. créez votre structure de dossier de niveau supérieur désirée à l'intérieur de ce dossier - n'y mettez pas encore de fichiers !

  3. importez cette structure dans le référentiel via un clic droit sur le dossier et choisissez TortoiseSVNImporter... Cela importera votre dossier temporaire dans la racine du référentiel pour créer la disposition de base du référentiel.

Notez que le nom du dossier que vous importez n'apparaît pas dans le référentiel, seulement son contenu. Par exemple, créez la structure de dossier suivante :

C:\Temp\Nouveau\trunk
C:\Temp\Nouveau\branches
C:\Temp\Nouveau\tags

Importez C:\Temp\Nouveau dans la racine du référentiel, qui ressemblera alors à cela :

/trunk
/branches
/tags