Chapitre 3. 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
Accéder à un référentiel situé dans un partage réseau
Disposition du référentiel
Sauvegarde de référentiel
Scripts de hook côté serveur
Liens d'extraction
Accéder au référentiel
Serveur basé sur Svnserve
Introduction
Installer svnserve
Exécuter svnserve
Authentification de base avec svnserve
Sécuriser le serveur avec SASL
Authentification avec svn+ssh
Autorisation basée sur le chemin avec svnserve
Serveur basé sur Apache
Introduction
Installer Apache
Installer Subversion
Configuration
Plusieurs référentiels
Autorisation basée sur le chemin
Authentification avec un domaine Windows
Plusieurs sources d'authentification
Sécuriser le serveur avec SSL
Utiliser des certificats avec des hôtes SSL virtuels

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

Vous pouvez créer un référentiel avec le backend FSFS ou avec le format de base de données Berkeley (BDB) plus ancien. Le format de FSFS est plus rapide et plus facile à gérer, il fonctionne maintenant sur les partages réseau et sous Windows 98 sans problème. Le format BDB est considéré comme plus stable car il est utilisé depuis plus longtemps ; cependant, FSFS est maintenant utilisé depuis plusieurs années, donc cet argument est dépassé. Lisez Choosing a Data Store dans le manuel de Subversion pour plus d'informations.

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 3.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.

    You will also be asked whether you want to create a directory structure within the repository. Find out about layout options in la section intitulée « Disposition du référentiel ».

    TortoiseSVN will set a custom folder icon when it creates a repository so you can identify local repositories more easily. If you create a repository using the official command line client this folder icon is not assigned.

Astuce

TortoiseSVN ne permet plus de créer des référentiels BDB, cependant vous pouvez toujours le faire en ligne de commande. Les référentiels FSFS sont généralement plus aisés à maintenir et, pour des raisons de compatibilité entre les différentes versions de BDB, nous permet de maintenir plus aisément TortoiseSVN.

TortoiseSVN does 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.

Bien sûr, nous recommendons également de ne pas utiliser d'accès de type file://, hormis à des fins de test. Utiliser un serveur est plus sécurisé et plus fiable pour toute utilisation mutualisée.

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

Ne créez pas ou n'accédez pas à un référentiel Berkeley DB sur un partage réseau. Il ne peut pas exister sur un système de fichiers distant. Même si vous mappez le disque réseau sur une lettre de disque. Si vous essayez d'utiliser Berkeley DB sur un partage réseau, les résultats seront imprévisibles - vous pouvez voir des erreurs mystérieuses tout de suite, ou il peut s'écouler des mois avant que vous ne découvriez que votre base de données du référentiel est corrompue.

Accéder à un référentiel situé dans un partage réseau

Au moins en théorie, il est possible d'utiliser un référentiel FSFS sur un partage réseau en utilisant le protocole file://, ce n'est certainement pas recommendé. En fait, nous le déconseillons fortement, et ne supportons pas un tel usage.

Premièrement vous donnez le droit d'accès en écriture dans le référentiel à tous les utilisateurs, de manière à ce qu'aucun ne puisse supprimer ou rendre complètement inutilisable de quelque manière que ce soit le référentiel.

Ensuite, tous les protocoles d'échange de fichiers ne supportent pas le verouillage dont Subversion a besoin, donc votre référentiel peut être corrompu. Ca ne devrait pas arriver tout de suite, mais un jour deux utilisateurs vont essayer d'accéder au référentiel en même temps.

Troisièmement, les droits des fichiers doivent être fixés exactement de cette manière. Vous pouvez vous en tirer sur un partage Windows, mais SAMBA est particulièrement compliqué.

Les accès de type file:// sont réservés à des fins de test et de debug ou pour une utilisation mono-utilisateur. Lorsque vous voulez partager votre référentiel vous devez vraiment mettre en place un vrai serveur, et ce n'est pas aussi compliqué qu'il n'y parait. Lisez la section intitulée « Accéder au référentiel » pour guider votre choix.

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.

Il y a quelques standards, des manières recommandées d'organiser un référentiel. La plupart des personnes créent un répertoire trunk contenant la « version principale » de développement, un répertoire branches qui contient les copies de travail paralèlles et un répertoire tags qui contient les versions stables. Si un référentiel ne contient qu'un seul projet, ces répertoires sont créés à la base du référentiel :

/trunk
/branches
/tags

Because this layout is so commonly used, when you create a new repository using TortoiseSVN, it will also offer to create the directory structure for you.

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.

Si vous n'avez pas encore créé la structure de base de votre référentiel, vous devriez le faire maintenant. Il y a deux manière de le faire. Si vous souhaitez simplement une structure /trunk /tags /branches, vous pouvez utiliser l'explorateur de référentiel pour créer les trois répertoires (dans trois livraisons différentes). Si vous souhaitez créer une arborescence plus complexe, il sera plus simple de le faire directement sur le disque puis de l'importer dans une seule livraison, comme suit:

  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. import this structure into the repository via a right click on the folder that contains this folder structure and selecting TortoiseSVNImport... In the import dialog enter the URL to your repository and click OK. This will import your temp folder into the repository root to create the basic repository layout.

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