Vous entendez parler d’Apache SVN mais vous ne savez pas vraiment ce que c’est ? Pas de souci.
Ce guide vous explique simplement ce qu’est SVN et comment il fonctionne, même si vous partez de zéro.
Fiche d’identité d’Apache Subversion (SVN)
- Créateur : CollabNet (en 2000)
- Développeur actuel : Apache Software Foundation
- Modèle : Centralisé (Client-Serveur)
- Objectif initial : Remplacer son prédécesseur, CVS (Concurrent Versions System)
- Type : Logiciel de gestion de versions (Version Control System)
- Licence : Apache 2.0 (Open source)
- Site officiel : subversion.apache.org
Comment fonctionne SVN ? Le modèle centralisé
Le fonctionnement d’Apache Subversion (SVN) est simple : tout est centralisé. Il y a un seul serveur qui contient le « dépôt » (repository en anglais). Ce dépôt est la source officielle, la version de référence de tout votre code et de tous vos fichiers. Personne ne touche directement à cette source.
Chaque développeur récupère une « copie de travail » (working copy) de ce dépôt sur sa propre machine. Il peut alors modifier les fichiers, ajouter du code, corriger des bugs. Une fois son travail terminé, il envoie ses modifications au serveur central via une opération appelée « commit ». Le serveur met alors à jour la version de référence.
Ce modèle client-serveur garantit que tout le monde travaille sur la même base et que l’historique des modifications est stocké en un seul endroit sécurisé.
Pourquoi SVN a-t-il été créé ? Les améliorations clés par rapport à CVS
SVN a été conçu pour une raison principale : corriger les gros défauts de son ancêtre, CVS. CVS était populaire, mais il avait des limites qui compliquaient le travail des développeurs. Voici ce que Subversion a apporté de neuf.
- Les commits atomiques : Avec CVS, si vous modifiiez 10 fichiers et que la connexion coupait au milieu de l’envoi, certains fichiers étaient mis à jour et d’autres non. Le projet était alors dans un état instable. SVN a réglé ça. Un commit sur plusieurs fichiers passe en entier ou ne passe pas du tout. C’est beaucoup plus sûr.
- La gestion des fichiers et répertoires : Une des plus grosses faiblesses de CVS était qu’on ne pouvait pas facilement renommer ou supprimer un fichier sans perdre son historique. SVN, lui, traite ces opérations comme des modifications normales. L’historique complet est conservé.
- Les métadonnées versionnées : SVN permet d’attacher des « propriétés » aux fichiers, comme des permissions d’exécution. Et surtout, ces propriétés sont suivies dans l’historique, comme le code lui-même.
- Les numéros de révision globaux : Dans CVS, chaque fichier avait son propre numéro de version. C’était un cauchemar pour savoir à quelle version du projet correspondait un ensemble de fichiers. SVN utilise un seul numéro de révision pour tout le dépôt. La révision 525, par exemple, représente un état précis de l’ensemble du projet. C’est plus simple.
Fonctionnalités principales et commandes essentielles
Pour bien utiliser SVN, il faut comprendre comment il gère les branches et connaître les commandes de base. Le système est logique et facile à prendre en main.
Gestion des branches et des tags
Contrairement à des outils plus récents, SVN a une approche très simple des branches et des tags. En fait, pour SVN, il n’y a aucune différence technique entre une branche, un tag et un répertoire normal. C’est juste une convention de nommage.
Créer une branche ou un tag se fait avec la commande `svn copy`. C’est une copie du projet à un instant T dans un autre dossier du dépôt. – Une branche est une copie sur laquelle on va continuer à travailler (par exemple, pour développer une nouvelle fonctionnalité sans toucher au code principal). – Un tag est une copie « figée », une sorte d’étiquette pour marquer une version importante (comme la « version 1.0 »). On n’est pas censé y toucher.
SVN utilise aussi des références pour désigner des versions spécifiques :
- HEAD : La toute dernière version du dépôt.
- BASE : La version de base du fichier dans votre copie de travail (avant vos modifications).
- COMMITTED : La dernière version sur laquelle vous avez fait un commit.
- PREV : La version juste avant la version COMMITTED.
Liste des commandes SVN à connaître
Voici les commandes les plus courantes que tout utilisateur de SVN doit connaître. La plupart ont un alias plus court (par exemple, `co` pour `checkout`).
| Commande (alias) | Signification |
|---|---|
| add | Ajoute un nouveau fichier ou répertoire au suivi de versions. |
| blame | Affiche l’auteur et la révision pour chaque ligne d’un fichier. |
| checkout (co) | Récupère une copie de travail depuis le dépôt. |
| cleanup | Nettoie la copie de travail (en cas de plantage d’une opération). |
| commit (ci) | Envoie vos modifications locales vers le dépôt central. |
| copy (cp) | Crée une copie d’un fichier ou répertoire dans le dépôt (pour les branches/tags). |
| delete (rm) | Supprime un fichier ou répertoire du suivi de versions. |
| diff (di) | Affiche les différences entre deux versions d’un fichier. |
| export | Récupère les fichiers du dépôt sans les métadonnées SVN (.svn). |
| import | Importe un ensemble de fichiers non versionnés dans le dépôt. |
| info | Affiche des informations détaillées sur un fichier ou répertoire. |
| list (ls) | Liste le contenu d’un répertoire dans le dépôt. |
| lock | Verrouille un fichier pour empêcher d’autres de le modifier. |
| log | Affiche l’historique des commits. |
| merge | Applique les changements d’une branche à une autre. |
| move (mv) | Déplace ou renomme un fichier ou répertoire. |
| propget (pg) | Affiche la valeur d’une propriété sur un fichier. |
| propset (ps) | Définit la valeur d’une propriété sur un fichier. |
| resolved | Marque un conflit de fusion comme étant résolu. |
| revert | Annule les modifications locales sur un fichier. |
| status (st) | Affiche l’état des fichiers de votre copie de travail (modifiés, ajoutés…). |
| switch (sw) | Change votre copie de travail pour qu’elle pointe vers une autre branche. |
| update (up) | Met à jour votre copie de travail avec les dernières modifications du serveur. |
| unlock | Déverrouille un fichier. |
Mettre en place un serveur SVN
Pour héberger un dépôt SVN, il y a deux solutions principales. La mise en place est assez directe.
D’abord, il faut créer le dépôt. C’est la même commande quel que soit le serveur que vous choisirez ensuite :
svnadmin create /chemin/vers/mon/depot
Cette commande prépare la structure de dossiers nécessaire.
Ensuite, il faut choisir comment y accéder :
- Option 1 : `svnserve` C’est un serveur léger, autonome, fourni avec Subversion. Il est simple à configurer et utilise son propre protocole sur le port TCP 3690. Pour la sécurité, on le combine souvent avec un tunnel SSH pour chiffrer les communications.
- Option 2 : Apache HTTP Server On peut aussi accéder au dépôt via le serveur web Apache, grâce à un module appelé `mod_dav_svn`. Cette option est plus robuste et permet d’utiliser le protocole HTTPS pour une sécurité native. Elle offre aussi une gestion des droits d’accès plus fine.
Pour les utilisateurs sous Windows, une solution très populaire est VisualSVN Server. C’est un paquet tout-en-un qui installe et configure Apache Subversion et une interface de gestion graphique. Ça simplifie beaucoup l’administration.
SVN vs Git : Lequel choisir en 2025 ?
Aujourd’hui, la plupart des nouveaux projets de développement logiciel utilisent Git. Mais ça ne veut pas dire que SVN est inutile. Les deux outils répondent à des besoins différents.
Le tableau ci-dessous résume les principales différences.
| Critère | Apache SVN | Git |
|---|---|---|
| Modèle | Centralisé | Distribué |
| Gestion des binaires | Bonne (gère bien les gros fichiers) | Limitée (dépôt grossit vite) |
| Courbe d’apprentissage | Moyenne (plus simple au début) | Plus complexe |
| Popularité | Moyenne (niche) | Très élevée (standard de l’industrie) |
La différence fondamentale, c’est le modèle : SVN est centralisé, Git est distribué. Avec SVN, vous avez besoin d’être connecté au serveur pour faire un commit. Avec Git, chaque développeur a une copie complète de l’historique sur sa machine et peut travailler hors ligne.
SVN est souvent préféré pour des projets qui gèrent beaucoup de gros fichiers binaires (images, documents, fichiers 3D). Git n’est pas très bon pour ça. La simplicité du modèle centralisé de SVN reste aussi un avantage pour des équipes qui ont un flux de travail très linéaire et un besoin de contrôle d’accès strict par répertoire.
Cas d’usage et écosystème de SVN
Même si Git domine le marché, Apache Subversion reste une solution pertinente dans plusieurs contextes. Son écosystème d’outils est mature et stable.
Cas d’utilisation pertinents
On retrouve souvent SVN dans ces domaines :
- Entreprises industrielles : Pour la gestion de configurations logicielles critiques où la traçabilité et le contrôle centralisé sont importants.
- Organisations publiques : Pour l’archivage à long terme de documents officiels, où l’historique ne doit jamais être altéré.
- Équipes de documentation technique : Pour gérer les versions de fichiers PDF, Word ou images. SVN s’en sort mieux que Git avec ces formats.
- Gestion de projet : Quand on a besoin d’un contrôle d’accès très fin par répertoire, ce qui est plus simple à configurer dans SVN.
Outils et intégrations populaires
L’écosystème SVN est bien fourni, avec de nombreux clients et intégrations :
- Clients graphiques : Le plus connu est TortoiseSVN sur Windows, qui s’intègre directement à l’explorateur de fichiers.
- Intégration IDE : Des plugins existent pour la plupart des environnements de développement comme Eclipse (Subversive) ou Visual Studio.
- Interfaces web : Des outils comme Trac ou Redmine permettent de naviguer dans le dépôt et de lier les commits à des tickets de gestion de projet.
Apache SVN n’est pas mort, loin de là. C’est un outil éprouvé, stable et maintenu par la fondation Apache. Il reste une excellente solution de version control pour des projets qui ont besoin d’un modèle centralisé simple et d’une bonne gestion des fichiers binaires. Même si Git est plus à la mode, SVN conserve une place de choix pour des besoins spécifiques où le contrôle et la simplicité priment.
