Subversion, aussi appellé SVN, est un logiciel permettant de travailler à plusieurs sur des sources communs.
Il permet de transférer un ensemble de fichiers depuis un serveur, d'y effectuer des modifications localement, puis de valider ces modifications. SVN gère les conflits si 2 personnes modifient le même fichier, il permet aussi de retrouver chaque modification faites sur les sources dans le temps, sous forme de fichier "diff" (lignes ajoutées, modifiées et supprimées sur chaque fichier) et permet de revenir sur l'une d'elle pour corriger d'éventuelles erreurs.
SVN est un descendant du logiciel CVS, autre système, plus ancien, de gestion de sources en commun. Il existe d'autres systèmes comme DARCS ou ARCH/TLA qui effectuent le même genre de tâche : la gestion concurrente de sources et le partage de documents en commun.
Lorsque l'on utilise subversion sur son ordinateur, on travaille sur son ordinateur localement, sur une copie des sources. Les sources sont situés sur un serveur subversion, dans ce que l'on appelle un dépôt. Un administrateur de dépot vous fournit généralement l'adresse du dépot. Cette adresse, appellée URL, peut prendre plusieurs formes comme suit :
Exemple 4.1. Exemple d'url de dépot SVN
svn://svn.example.com/monprojet/trunk svn+ssh://svn.debian.org/var/lib/svn/debian-edu/trunk http://corp.mycompany.com:8080/svn/internal/
Ce ne sont, bien sur, que des exemples. Subversion supportant de nombreux protocoles de transfert d'information, il est possible que d'autres forme d'url existent.
Si votre administrateur de dépôt vous a fourni un nom d'utilisateur et un mot de passe, il se peut que vous ayez besoin d'ajouter le nom d'utilisateur à cette url. Il se place dans ce cas juste après le :// et avant le nom de domaine. On fait suivre le nom d'utilisateur d'un @, à la manière des emails. L'url devient alors :
svn+ssh://john@svn.debian.org/var/lib/svn/debian-edu/trunk/
Dans la suite de ce manuel, nous présenterons des commandes de subversion. Ces commandes sont accessibles via l'outil en ligne de commande svn ou via un menu permettant de lancer cette commande, selon le logiciel que vous utilisez. Les exemples de commandes de cette documentation seront données sous forme de commande pour le logiciel SVN en console, à vous de trouver l'équivalent dans votre logiciel, les termes utilisés étant généralement les mêmes.
La première commande subversion à connaître est celle permettant d'obtenir une copie locale (sur votre machine) des sources distants (fichiers situés dans le dépôt distant). Pour cela, on utilise la commande checkout, parfois abbréviée co. On l'utilise comme suit : svn checkout <url du dépôt> Par exemple :
Exemple 4.2. Exemples d'obtention d'une copie d'un dépôt
$ svn checkout svn://svn.example.com/monprojet/trunk $ svn co svn+ssh://philippe@svn.debian.org/var/lib/svn/debian-edu/trunk
La commande svn peut vous demander un mot de passe si vous utilisez un compte disposant de droits étendus. Dans ce cas, saisissez votre mot de passe lorsque le système vous le demande.
Vous devez voir alors la liste des fichiers téléchargés sur votre machine au fur et à mesure de leur arrivée, comme suit :
$ svn checkout svn://svn.debian.org/svn/debian-edu/trunk A trunk/html A trunk/html/logs A trunk/html/logs/cd-build.log A trunk/html/logs/overview.log A trunk/html/logs/securitylist.html A trunk/html/logs/buglist.html A trunk/html/logs/README A trunk/html/index.html A trunk/security A trunk/security/README A trunk/src ...
Une fois téléchargés, vous disposez des fichiers dans un nouveau dossier local, et vous pouvez les lire, les modifier localement, bref, faire ce que vous voulez dessus. Vous noterez dans chaque dossier de ces sources la présence d'un dossier .svn, généralement caché. Ce dossier permet à Subversion de s'y retrouver et de savoir quels fichiers ou dossier vous avez modifié.
Quelques temps après avoir utilisé checkout pour aller récupérer les sources, l'on peut souhaiter mettre à jour cette copie locale, pour y récupérer les modifications effectuées par les autres développeurs. Pour cela, on utilise tout simplement la commande update. Pour lancer cette commande, il faut bien évidemment être situé dans la copie locale. En voici un exemple :
Exemple 4.3. Exemple de mise à jour d'une copie locale
trunk$ svn update U trunk/html/logs/overview.log U trunk/html/logs/buglist.html M trunk/html/logs/README ...
Vous remarquerez le détail des informations fournies par svn : les lignes avec U montrent les fichiers mis à jour, celles avec M montrent les fichiers que vous avez modifié (M) et qui n'ont donc pas été mis à jour si besoin.
Si vous effectuez des modifications dans les fichiers de votre copie locale, vous devez ensuite valider ses modifications en renvoyant les fichiers ainsi modifiés sur le serveur, au dépôt. Subversion suivant les modifications en détail, il est nécessaire d'accompagner cet envoi d'un petit commentaire expliquant de quoi il s'agit.
Pour envoyer les modifications sur le dépôt, on utilise la commande svn commit qui regarde la liste des fichiers modifiés et les renvois au dépôt. Cette commande lance votre éditeur pour vous demander de remplir le commentaire associé à vos modifications. On peut l'accompagner de la liste des fichiers à modifier, si l'on souhaite ne valider que certains d'entre eux.
Lorsque l'on crée de nouveaux fichiers ou dossiers dans les sources, il faut signaler à subversion que ces fichiers doivent être ajoutés au dépôt. Pour cela, on utilise la commande svn add. On précise derrière cette commande la liste des fichiers ou dossiers à ajouter au dépôt.