SVN est un outil libre de gestion de versions. C’est à dire qu’il nous évite d’avoir 156 fichiers sur notre ordinateur avec marqué v1....vn.
Ce petit aide mémoire est destiné à ceux qui travaillent seuls ou en groupe sur un projet SVN.
Une dernière chose, si vous voulez ’apprendre’ à vous servir de SVN pour un projet déjà en cours, allez directement sur checkout...
Le dépot svn est la base de données comportant toutes les versions, les modifications et les logs de votre programme géré par subversion. Ce dépôt peut être installé sur un serveur (indispensable si vous travaillez à plusieurs), mais aussi sur le système de fichiers (voire sur une clef USB( !), testé !!). La création de dépot svn est simple : il suffit d’aller dans un dossier réservé et de taper svnadmin create mon_depot
Veillez à bien prendre en compte les droits de l’utilisateur : pour un dépôt auquel on accède par http, il faut que ce soit autorisé à l’utilisateur du processus apache (www-data sous debian).
La création de dépôt ne se fait qu’une fois pour tout le projet.
L’accès au dépôt se fait de différentes manières :
Arborescence de base Lorsque l’on met un document de type latex sous gestionnaire de version pour son travail personnel, il n’y a pas trop à chercher pour savoir comment on va organiser le dépôt. Mais lorsque l’on veut travailler à plusieurs, ou pouvoir garder des versions stables, c’est plus compliqué.
SVN ne donne pas d’architecture de base pour les dossiers. Mais il est usuel de faire 3 dossiers dans un repos :
La création de cette arborescence se fait en utilisant la fonction "svn mkdir".
Import : mettre le pré-projet dans la base
Lorsque l’on décide de mettre un projet sous gestionnaire de version, certains codes peuvent avoir été écrits. Il faut donc les installer dans la base. Pour cela, nous avons la fonction import :
Checkout : récuperer un projet en cours
Lorsque le projet a été installé dans la base de données, on doit le récupérer sur les ordinateurs de développement. C’est le principe de la commande checkout (co pour les intimes). Ce n’est que quand les fichiers sont récupérés par cette méthode qu’ils sont versionnés.
Add, mkdir, et rm : ajouter, créer et effacer dossiers et répertoires Lorsque notre dossier est sous gestionnaire de version, on peut vouloir ajouter des dossiers ou des fichiers.
Lorsque l’on a apporté des modifications au projet, ou lorsque quelqu’un d’autre en a fait, il convient de faire une communication avec le serveur pour être à jour ou que les autres le soient. En effet, svn, comme tout bon gestionnaire de version, ne travaille pas sous connexion permanente [1]. Il faut donc lui dire ’je veux mettre mon projet à jour’ ou ’je veux que le développement actuelle sur ma machine soit envoyé sur le serveur’. C’est le travail de commit et update :
Lorsque l’on fait un update alors que l’on a modifié des choses en local par rapport à la dernière version du serveur, on peut arriver à un conflit : Notre fichier est recopié (avec un .mine), le fichier qui est envoyé est recopié (avec un .rn°version .r42 par ex) et dans le fichier normal, certaines lignes sont rajoutées qui mettent en exergue la différence entre les 2 fichiers. A ce moment, il est impossible de faire un commit : il faut d’abord résoudre le conflit :
Le diff permet de voir la différence entre 2 versions. Le plus simple emploi de diff consiste à envoyer la différence sur un programme comme kdiff3 : svn diff -r 41:42 superfichier.cpp --diff-cmd=kdiff3
La fonction merge permet de mettre dans une branche les modifications qui ont été effectuées dans une autre branche entre différentes versions. Le cas usuel est lorsqu’un fichier à été modifié dans une branche, et que l’on veut le mettre à jour dans une autre branche (branche qui peut être le trunk bien entendu).
Pour l’appliquer, il faut se mettre dans le répertoire que l’on veut mettre à jour [2] :
Une autre technique consiste à utiliser l’outil ’svnmerge’ qui fait partie des contributions (les développeurs svn sont probablement en train de travailler sur une technique pour facilier les commits [3]).
Permet de retrouver la situation du dernier update : on annule les modifications locales. svn revert mon_fichier
Pour savoir quel est l’état du dépôt, il faut utiliser svn status. Cela permet de détecter les conflicts. Les commandes svn log et svn info sont aussi intéressantes.
Pour mettre de manière lisible à tous quel est la dernière personne qui à modifié un fichier, il est intéressant d’utiliser le tag $Id$ et la fonction propset :
[1] J’aurais aimé être sur que ces précisions sont totalement inutiles. Mais en cas de doute, il faut parfois s’abstenir.
[2] Voire les trucs pour de plus amples informations
[3] voire par exemple l’article sur linuxfr