Au cœur de la zone d'administration de la copie locale

Comme nous l'avons déjà mentionné, chaque répertoire d'une copie de travail Subversion contient un sous-répertoire spécial nommé .svn qui héberge les données administratives concernant le répertoire de la copie de travail. Subversion utilise .svn pour gérer des informations telles que :

L'agencement et le contenu de la zone d'administration de la copie de travail Subversion sont considérés comme des détails de l'implémentation non-destinés à être exploités par les utilisateurs. Nous encourageons les développeurs à utiliser les API publiques ou les outils fournis avec Subversion pour accéder aux données de la copie de travail et pour les manipuler, plutôt que de lire et modifier directement ces fichiers. Les formats de fichiers employés par la bibliothèque de la copie de travail pour gérer les données administratives changent de temps en temps et l'API publique réalise un gros travail pour que l'utilisateur moyen ne s'en rende pas compte. Dans cette section, nous abordons crûment certains détails de l'implémentation pour satisfaire votre insatiable curiosité.

Le fichier « entries »

Le fichier entries est sûrement LE fichier le plus important du répertoire .svn. Il contient l'essentiel des informations administratives concernant les éléments suivis en versions du répertoire de la copie de travail. Ce fichier contient l'URL du dépôt, le numéro de révision original, les sommes de contrôle des fichiers, les horodatages des copies originales et des propriétés, les informations d'état sur les conflits et les actions planifiées, les dernières informations connues sur les propagations (auteur, numéro de révision et horodatage) et l'historique de la copie locale : pratiquement tout ce qui intéresse un client Subversion à propos d'un élément suivi (ou à suivre) en versions !

Les lecteurs familiers avec les répertoires administratifs de CVS auront tout de suite reconnu que le fichier .svn/entries a les mêmes objectifs, entre autres choses, que l'ensemble des fichiers CVS/Entries, CVS/Root et CVS/Repository combinés.

Le format du fichier .svn/entries a changé au cours du temps. Au départ, c'était un fichier XML ; aujourd'hui, il utilise un format personnalisé mais toujours lisible par l'utilisateur. Le choix d'XML était particulièrement adapté pour les premiers développeurs de Subversion qui déboguaient fréquemment le contenu du fichier (et le comportement associé de Subversion). Cependant, le besoin de débogage a diminué au fur et à mesure que Subversion devenait plus mature et le besoin de performance au profit de l'utilisateur a alors pris le dessus. Soyez conscient que la bibliothèque Subversion de la copie de travail met automatiquement à niveau les copies de travail d'un format à un autre — elle comprend les vieux formats et utilise pour l'écriture le nouveau format — ce qui vous épargne l'effort d'extraire une nouvelle copie de travail mais peut aussi compliquer certaines situations : lorsque différentes versions de Subversion essaient de partager la même copie de travail.

Copies originales et propriétés des fichiers

Comme mentionné auparavant, le répertoire .svn contient aussi les copies originales (avant modification locale) des fichiers : les « versions de base » (text-base versions en anglais). Vous pouvez les trouver dans le répertoire .svn/text-base. Ces copies originales offrent tout un tas d'avantages — identification des différences et des modifications, retour en arrière sur les fichiers modifiés ou supprimés, tout cela sans faire appel au réseau ; échanges plus performants avec le serveur — mais au prix d'avoir chaque fichier stocké au moins en double sur le disque. De nos jours, c'est pratiquement négligeable pour la majorité des fichiers. Cependant, la situation se détériore à mesure que vos fichiers suivis en versions grossissent. Nous étudions dorénavant la possibilité de rendre optionnelle la présence de ces « versions de base ». Cependant, c'est justement quand vos fichiers suivis en versions grossissent que l'existence des « versions de base » devient cruciale : qui a envie de transmettre un énorme fichier à travers le réseau juste parce qu'il veut propager une petite modification ?

Dans le même esprit que les fichiers « versions de base », nous avons les fichiers de propriétés qui, eux aussi, possèdent leurs copies originales « propriétés en version de base », situés respectivement dans .svn/props et .svn/prop-base. Comme les répertoires aussi peuvent avoir des propriétés, il existe également des fichiers .svn/dir-props et .svn/dir-prop-base.