Subversion (SVN) : gestion de versions de fichiers pour rédaction, développement coopératif

Fiche PLUME
  • Création ou MAJ importante : 07/03/2013
  • Correction mineure : 30/04/2013
  • Auteur : Emmanuel Courcelle - LIPM (CNRS, INRA)
  • Contributions importantes :

    • La fiche Subversion a été initialement rédigée par Romain Kobylanski (INPG-FC) avec des contributions de Gilles Berger-Sabbatel (LIG),

      Olivier Zimmermann (LPSC Grenoble) et Etienne Urbah (LAL). Elle est reprise par E Courcelle.


  • Responsable thématique : Maurice Libes (OSU Institut Pytheas - UMS 3470 CNRS)
  • Relecteur 1 : Olivier Zimmermann
  • Relecteur 2 : Thomas Lallart
  • Relecteur 3 : Gilles Berger Sabbatel
Mots clés
Description
Fonctionnalités générales

Subversion (SVN en abrégé) est un système de gestion de versions multiples de fichiers analogue à CVS, dont il reprend les fonctionnalités essentielles, avec un certain nombre d'améliorations.

  • Les fichiers à contrôler sont confiés à un serveur Subversion centralisé. Plusieurs protocoles réseaux (HTTP/HTTPS si le serveur supporte WebDav, SSH) peuvent être utilisés pour y accéder.
  • L'utilisateur interagit avec le serveur au moyen d'une interface locale (client) qui peut être un logiciel autonome ou une extension d'un logiciel support (explorateur de fichiers, environnement de programmation), en ligne de commande ou graphique, en anglais ou dans d'autres langues.
  • L'utilisateur récupère une copie locale des fichiers, les modifie puis soumet sa nouvelle version accompagnée d'un commentaire.
  • Si le fichier que vous avez modifié a été modifié par quelqu'un d'autre entre temps, vous en êtes averti. Si c'est un fichier texte ASCII (source C par exemple), Subversion vous aide à créer un nouveau fichier tenant compte de toutes les modifications (revue ligne par ligne).
  • Les fichiers autres que texte ASCII, dits "binaires", sont aussi pris en charge (doc, xls, etc.). La fusion des modifications étant plus délicate que pour le texte simple, Subversion offre un mécanisme de "verrou" pour prévenir les modifications concurrentes.
Autres fonctionnalités
  • On peut définir des "hooks", permettant de faire quelque chose (par exemple l'envoi d'un courriel à l'équipe de développement) lors de chaque "commit".
  • Les fichiers et dossiers sous contrôle peuvent être renommés ou déplacés sans perte d'historique.
  • Toutes les versions successives sont conservées par le serveur Subversion qui les numérote de 0 à N. Chaque version correspond à une modification dont on connaît la nature, la date, l'auteur, le commentaire, etc.
  • Subversion optimise le volume de l'archive sur le serveur. Seule l'information modifiée est effectivement enregistrée. Ainsi, les fichiers obtenus par copie sont enregistrés comme référence à leurs originaux. Il ne faut donc pas se gêner pour créer autant de branches que nécessaire, la création d'une nouvelle branche est peu coûteuse en espace-disque.
  • Possibilité de spécifier un outil externe (lorsqu'il existe) pour visualiser les modifications ou les différences sur des fichiers de format autre que texte ASCII (doc, vi, etc).
  • Subversion permet de créér des branches de développement pour intégrer de nouvelles fonctionnalités à un projet puis de les fusionner dans la branche principale une fois validées (merge tracking): la création d'une branche revient simplement à créer un répertoire qui soit une copie du répertoire existant. Pour chaque fichier, subversion mémorise les révisions où le fichier a été copié, il est donc capable de retrouver automatiquement le dernier ancêtre commun de deux versions d'un fichier, ce qui facilite énormément l'opération (en général délicate) de fusion de branches.
  • subversion fournit des fonctionnalités essentielles de gestion du cycle de vie du logiciel en gérant la notion de révisions (ensemble cohérent de modifications de fichiers et/ou de répertoires):
    • Chaque révision possède un intitulé.
    • Pour chaque révision, on peut obtenir la liste des fichiers et/ou répertoires impactés.
    • Chaque fichier et répertoire possède son historique de révisions.
  • subversion permet de gérer des droits d'accès différents en lecture et écriture sur les répertoires en fonction de l'utilisateur (développeurs, intégrateurs, validateurs, ...).

À l'aide de simples répertoires, SVN permet donc la mise en oeuvre facile de branches indépendantes de développement, de versions stabilisées (si besoin en lecture seule) du logiciel.

Interopérabilité
  • Disponibilité d'outils comme tailor, http://progetti.arstecnica.it/tailor/, pour effectuer des conversions entre différents formats de dépôts.
  • A signaler également git-svn qui permet de synchroniser un dépôt svn à partir de git et vice-versa, avec les avantages de chacun (notamment l’indépendance d'une connexion réseau et la création d'un historique local pour git).
Contexte d'utilisation dans mon laboratoire/service

Les contextes d'utilisation sont très variés :

  • Développement de programmes : versionnement d'un projet.
  • Partage de documents : édition collaborative de documents (grâce au dépôt centralisé et aux fonctions de fusion ou de verrouillage).
  • Données personnelles : accès et mise à jour de ses données depuis un poste de travail quelconque.
  • Associé à TortoiseSVN, Subversion est un excellent outil pour la gestion des versions de programmes LabVIEW.

Au LIPM, nous créons un dépôt svn pour chaque projet de développement, quelque soit le nombre de personnes travaillant sur le projet.

Limitations, difficultés, fonctionnalités importantes non couvertes
  • Si on n'est pas connecté, il est impossible de créer de nouvelles révisions.
  • Dans chaque répertoire, un répertoire chaché appelé .svn est créé, il faut utiliser la commande svn export pour générer une distribution du logiciel.
  • Il arrive que le répertoire de travail devienne inutilisable (par exemple suite à une mise à jour sur le client ou sur le serveur). Dans ce cas, la meilleure chose à faire est de créer un nouveau répertoire de travail, et recopier à la main dans celui-ci les fichiers modifiés du premier répertoire. Si on travaille proprement (en faisant de nombreux commits, de sorte qu'à chaque instant il y a peu de modifications locales), cette opération n'est pas trop douloureuse.
Environnement du logiciel
Distributions dans lesquelles ce logiciel est intégré

Subversion est disponible dans les dépots standard de la plupart des distributions Linux.

Plates-formes

Toutes plates-formes

Logiciels connexes
Autres logiciels aux fonctionnalités équivalentes
Environnement de développement
Type de structure associée au développement

Subversion est depuis février 2010 un projet de l'Apache Software Foundation

Eléments de pérennité

Largement utilisé dans un contexte de développement (open source et propriétaire).
Existence de supports commerciaux, entre autres Collabnet http://www.collab.net/subversion.

Références d'utilisateurs institutionnels
  • Un certain nombre de projets Open Source ont migré de CVS à Subversion
  • La DSI de l’INRA utilise Subversion
  • Les fichiers de configuration de la Plateforme en Ligne de Mathrice (PLM) sont gérés par Subversion
Environnement utilisateur
Liste de diffusion ou de discussion, support et forums
Documentation utilisateur
Divers (astuces, actualités, sécurité)
  • svn permet la gestion complète de copies de travail légères, c'est à dire ne comportant que les répertoires désirés, en :
    1.créant le répertoire de travail avec uniquement les sous-répertoires de premier niveau
    2.Ajoutant explicitement les sous-répertoires désirés
    3.Supprimant de la copie de travail uniquement les répertoires vides devenus inutiles
    ce qui donne:

    svn checkout --depth=immediates URL
    svn update --set-depth=infinity répertoire-à-ajouter ...
    svn update --set-depth=exclude répertoire-à-retirer ...
    
  • Lors de la création d'un nouveau dépôt subversion, il est recommandé de crééer tout de suite trois répertoires:

    trunk
    branches
    tags
    

    qui recevront le tronc principal, les branches créées par les développeurs, et les différentes versions destinées à être livrées.