Subversion
De Ensiwiki.
| |||
|---|---|---|---|
| Développeur | [CollabNet, Inc]
| ||
| Dernière version | 1.5.1
| ||
| Environnement | Windows,MacOS,Linux
| ||
| Type | Gestionnaire de version | ||
| Licence | Apache/BSD
| ||
| Site Web | subversion.tigris.org | ||
Sommaire |
Présentation
Subversion, SVN pour les intimes est un logiciel de gestion de version. Entendez par là qu'il gère les différentes versions, appelées révisions, de vos travaux en permettant un travail collaboratif simple. L'application la plus courante qu'on lui trouve est bien sûr le cadre du développement en informatique.
Pour un codeur solitaire, l'intérêt est principalement la simple sauvegarde de données et le fait de pouvoir revenir en arrière, SVN prend tout son sens lorsque le développement se fait en équipe !
Actions de base
- Lors de l'Import initial, SVN initialise le projet et crée son arborescence propre dans le répertoire précisé qu'on appelle repository.
- Le Checkout importe les données présentes dans le repository voulu.
- Le Commit envoie les modifications que vous avez apportées, en créant une nouvelle révision.
- L'Update met à jour votre version à la dernière révision qui a été commit
Installer Subversion
Tout d'abord, récupérez la dernière version sur le site officiel : http://subversion.tigris.org/.
- Windows : Windows Binaries
- Mac OS X : Mac OS X Binaries
- Linux : selon votre distribution, par exemple Ubuntu ou Debian
Les puristes pourront aussi partir du code source !
Notez également que si la ligne de commande vous rebute dès à présent, il existe des logiciels Clients un peu plus User Friendly qui s'intègrent (ou pas) au choix dans votre IDE préféré ou directement dans votre environnement ! Certains ne nécessitent pas d'installer Subversion. La suite de l'article prend les exemples en ligne de commandes.
Premiers pas
Utilisation
Checkout
Autant y aller par l'exemple. Commençons par récupérer la dernière révision par un Checkout.
ensisun:~>svn checkout http://igate.imag.fr/secure/svn/bde ... A bde/trunk/cercle/img/index.html A bde/trunk/cercle/img/icone_date.png A bde/trunk/cercle/js A bde/trunk/cercle/js/index.html A bde/trunk/cercle/js/tools.js A bde/trunk/cercle/top_bar.php A bde/trunk/cercle/index.php A bde/trunk/index.php Checked out revision 94. ensisun:~>
SVN transfère tous les fichiers de la dernière révision actuelle dans le dossier courant. Notez que chaque dossier contient un dossier .svn qui contient toutes les informations nécessaires à la gestion de version. Mieux vaut ne pas y toucher sans savoir ce que vous faites pour ne pas pourrir votre version.
Raccourci :
ensisun:~>svn co http://igate.imag.fr/secure/svn/bde
Commit
Disons que vous avez modifié le fichier index.php. Pour envoyer votre version, faites un commit
ensisun:~>svn commit Sending bde/trunk/index.php Transmitting file data . Committed revision 95.
Après la première ligne vous aurez certainement à rentrer le message de commit, pour préciser les changements apportés. Pour cela il faut toucher un peu au .bash_login ou au .bashrc au choix dans votre répertoire $HOME
ensisun:~>cd ensisun:~>echo"export SVN_EDITOR=pico" >> .bash_login # Ajoute pico en tant qu'editeur SVN ensisun:~>source .bash_login # pour recharger (sourcer) le fichier
Bien sûr, remplacez pico par votre éditeur préféré, Vi, Vim, Nedit ou encore Emacs...
Raccourci pour le commit :
ensisun:~>svn ci -m "Message de commmit"
Petite précision : avant de commit votre travail, SVN s'assurera que vous disposez de la dernière version disponible sur le repository, pour minimiser les conflits entre les committers. Il est conseillé de toujours effectuer un Update avant un Commit :
Update
Mettez à jour votre version de travail avec la commande suivante :
telesun:~>svn update U bde/trunk/index.php Updated to revision 95. #Raccourci ensisun:~>svn up
Lors de l'update, SVN récupère les fichiers qui ont été modifié par rapport à votre version pour vous mettre à jour. Si vous avez modifié également un de ces fichiers, il tente de fusionner les modifications (opération Merge) avec une relative efficacité.
Cependant, s'il n'arrive pas à faire cette fusion, le fichier concerné est alors en conflit (Conflicted). Cela arrive notamment si vous éditez à plusieurs la même portion d'un fichier, et même parfois pour des raisons plus obscures...
Conflits
Si vous êtes dans le cas décrit juste avant, vous pouvez vérifier avec
ensisun:~>svn status C index.php
Le fichier index.php est marqué Conflicted. Il faut résoudre le conflit du fichier. La solution dépend de la situation. Si vos modifications étaient peu pertinentes, il suffira de forcer SVN à remplacer votre version par celle de la dernière révision. C'est le revert.
ensisun:~>svn revert index.php Reverted 'index.php'
Si vous ouvrez le fichier en conflit avec un éditeur, certaines parties vont ressembler à ça :
<<<<<<< .mine Partie qui correspond à votre version ======= Partie qui correspond à la révision actuelle >>>>>>> .r95
Editez alors au mieux pour rendre le tout cohérent, puis indiquez que le fichier n'est plus en conflit :
ensisun:~>svn resolved index.php
Si vous avez conservé des modifications par rapport à la version du SVN, svn status donnera alors
ensisun:~>svn status M index.php
Faites alors un nouveau commit pour envoyer vos modifications.
Si les modifications sont à prendre en compte des deux côtés, il faut alors s'armer de patience et faire la fusion plus ou moins à la main.
Ajouter / Supprimer des fichiers
SVN n'est pas "tout puissant" : si lors de l'évolution du projet, celui-ci comprend de nouveaux fichiers, il faut préciser à SVN qu'il peut (et qu'il doit) placer son autorité dessus :
$ svn add fich.c A fich.c
De la même manière, toutes les manipulations qui modifient le chemin des fichiers doivent passer par svn, pour qu'il puisse s'y retrouver. Au lieu de "rm", on fait "svn delete", au lieu de mv on a "svn mv", et au lieu de cp on a "svn cp".
svn cp A B et cp A B; svn add B ne sont pas identiques ; dans le premier cas on copie également l'historique du fichier. Cela veut aussi dire que le fichier n'est pas renvoyé au serveur, mais uniquement un "pointeur" vers le fichier ancêtre. C'est très pratique pour faire des branches et des tags en temps constant !
Diff
svn diff permet de lister les différences entre la copie locale et le dépôt. Grosso modo, c'est le travail fait, qui sera envoyé au serveur. Le format employé est celui de diff -u : une ligne commençant par un + est un ajout, et par un -, une suppression.
Rendre le TP : export
C'est bien beau de travailler, mais à un moment c'est l'heure de TEIDE ! Bien sûr, on peut faire un tarball de sa copie locale, mais on rendrait par la même occasion les .svn qui trainent dans les répertoires.
Pour faire une copie sans inclure les informations spéciales (.svn), il suffit de faire svn export :
tp_ada_1 $ svn export . rendu Export complete. tp_ada_1 $ tar czf rendu.tar.gz rendu/ tp_ada_1 $ rm -rf rendu/
Un fichier rendu.tar.gz est créé, on peut le déposer sur TEIDE.
Qui a tout cassé ? blame
Quand une fonction pose problème et qu'on aimerait discuter avec son "propriétaire" (celui qui l'a écrite), c'est fastidieux de relire tous les logs pour voir l'histoire du fichier. Svn propose la commande "blame" : svn blame fichier affiche le fichier, en faisant précéder chaque ligne du numéro de révision où cette ligne a été modifiée pour la dernière fois, ainsi que l'auteur de cette révision.
Créer son propre SVN
Chez soi ou sur les machines de l'Ensimag
Sur le web
- Assembla : un fournisseur de service SVN gratuit.
Clients
- RapidSVN : interface graphique pour svn multi plates-formes.
- TortoiseSvn : intégration de svn dans l'explorateur Windows.
- psvn : svn dans Emacs.
