Caractéristiques de Subversion

Quand on discute des caractéristiques de Subversion et de ce qu'elles apportent au contrôle de version, il est généralement utile de les décrire par ce qu'elles améliorent comparées à CVS. Si vous n'êtes pas familier de CVS, vous pourriez ne pas comprendre toutes ces caractéristiques. Et si vous n'avez aucune notion du contrôle de version, vous risquez d'être complètement perdus à moins de commencer par lire le Chapter 2, Concepts de base, dans lequel nous donnons une introduction en douceur au contrôle de version en général.

Subversion apporte :

Un versionnage des dossiers

CVS gère uniquement les historiques de fichiers, mais Subversion implémente un système de fichiers “virtuel” versionné qui suit les changements des arborescences de dossiers au cours du temps. Les fichiers et les dossiers sont versionnés.

Un vrai historique de versions

Parce qu'il est limité au versionnage de fichiers, CVS ne supporte par des opérations telles que la copie ou le renommage — ce qui peut arriver à des fichiers, mais sont en réalité des changements du contenu des dossiers contenants. De plus, dans CVS on ne peut pas remplacer un fichier versionné par un autre de même nom sans que ce dernier n'hérite de l'historique de l'ancien — et n'ayant peut-être rien à voir — fichier. Avec Subversion, on peut ajouter, supprimer, copier et renommer à la fois des fichiers et des dossiers. Et chaque fichier nouvellement ajouté part avec un historique vide qui lui est propre.

Des validations atomiques

Un ensemble de modifications est placé dans le dépôt soit entièrement, soit pas du tout. Ceci permet aux développeurs de mettre au point et valider des changements groupés en unités logiques, et évite les problèmes qui peuvent survenir quand seule une portion d'un groupe de changements est envoyée avec succès vers le dépôt.

Un versionnage des métadonnées

Chaque fichier et dossier a un ensemble de propriétés — des clés et leurs valeurs — qui lui est associé. Vous pouvez créer et stocker n'importe quelle paire clé/valeur. Les propriétés sont versionnées dans le temps, tout comme le contenu des fichiers.

Le choix des couches réseau

Subversion utilise une notion abstraite d'accès au dépôt, ce qui rend simple l'implémentation de nouveaux mécanismes réseaux. Subversion peut s'installer en tant que module d'extension d'un serveur HTTP Apache. Cela lui donne un gros avantage en termes de stabilité et d'interoperabilité, ainsi qu'un accès aux fonctionnalités fournies par ce serveur — authentification, permissions, compression à la volée, etc. Un serveur Subversion léger et autonome et également disponible. Ce serveur utilise un protocole spécifique qui peut être facilement tunnellisé par SSH.

Une gestion cohérente des données

Subversion détermine les différences entre fichiers en utilisant un algorithme de différenciation binaire, qui fonctionne de la même façon avec des fichiers textes (lisibles par des humains) et binaires (non lisibles par des humains). Les deux types de fichiers sont stockés compressés pareillement dans le dépôt, et les différences sont transmises au travers du réseau dans les deux directions.

Création de branches et étiquetage performants

Le coût d'une création de branche ou d'étiquette n'est pas nécessairement proportionnel à la taille du projet. Subversion crée les branches et étiquettes en copiant le projet, en utilisant un mécanisme similaire aux liens physiques d'un système de fichiers. Ainsi ces opérations prennent un temps constant et très court.

Modularité

Subversion n'a pas de bagage historique; il est composé d'un ensemble de librairies C partagées avec une API bien définie. Ces caractéristiques facilitent la maintenance de Subversion et le rendent utlisable par d'autres applications et langages.