Subversion (SVN)
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.
Commentaires
Responsable thématique précédent
Cette fiche a d'abord été suivie par le responsable thématique Jacquelin Charbonnel. Maurice Libes l'a reprise en février 2012.