2010-08-21

Subversion (SVN), le système de gestion de version

Subversion, aka SVN est un système de gestion de version qui a fait ses preuves et offre beaucoup d'avantages. Il a remplacé CVS pour pallier à ces défauts. Depuis quelques temps, un autre système de gestion de version fait parler de lui : GIT. J'y reviendrai dans un futur billet lorsque j'aurai besoin de l'utiliser.

SVN est simple d'utilisation et est intégré à beaucoup d'outils comme certains IDE (Anjuta, Eclipse etc.). Je ne détaillerai ici que son installation / configuration / utilisation en tant que "client". Je ferai un autre billet pour l'utilisation de subversion côté "serveur" (comment créer de nouveaux dépôts et comment les organiser). Ce billet vous permettra surtout d'avoir un mémo pour les commandes très utiles de SVN

Lire la suite

Installation

L'installation est extrêmement compliqué puisqu'il faut taper les nombreuses commandes suivantes :

cordeld@Black:~$ sudo aptitude install subversion

Voilà, c'est installé. Et la partie "cliente" (binaire "svn"), et la partie "serveur" (binaire "svnadmin").

Commandes utiles

Commandes de base

Récupérer une copie d'un dépôt. Vous récupérerez les sources et y serez "connecté", ce qui vous permettra d'utiliser les fonctions de SVN (mise à jour, suppression, commit etc.)

svn co <depot>

Récupérer les sources d'un dépôt (en sortant de svn). Une fois la copie récupéré, celle-ci sera entièrement "déconnectée" de SVN : il s'agira de fichiers / dossiers normaux.

svn export <depot>

Mettre à jour une copie

svn up /chemin/de/la/copie

Les trois commandes précitées peuvent s'utiliser avec l'option "-r" vous permettant de spécifier un numéro de révision. Si vous saisissez un numéro de révision plus ancien que celui de la copie de travail courante, le "svn up" mettra à jour vers le passé (en enlevant les modifications apportées par les révisions postérieures)

Versionner de nouvelles sources

svn add NouvelleSourceDeLaCopieDuDepot

S'il s'agit d'un dossier, svn ajoutera récursivement son contenu. Attention ! Le add ne fait pas un commit, n'oublier donc pas d'envoyer vos modifications

Supprimer des sources

svn delete SourceDeLaCopieDuDepot

S'il s'agit d'un dossier, svn supprimera récursivement son contenu. Attention ! Le delete ne fait pas un commit, n'oublier donc pas d'envoyer vos modifications

Envoyer ses modifications. Une modification peut être : la modification du contenu d'un fichier, la suppression d'un fichier, l'ajout d'un fichier etc. Tout ce qui rend différente la copie de travail par rapport au dépôt.

svn commit CopieDuDepot

S'il s'agit d'un dossier, svn enverra récursivement toutes les modifications apportées à l'intérieur de celui-ci.

Commandes avancées

Utiliser des référentiels externes

Les réfentiels externes offrent de gros avantages suivant l'architecture de vos projets. Il n'est pas rare qu'un projet utilise les même "briques" qu'un autre projet. Si vous modifiez l'une de ces briques dans le projet "A", vous devez ensuite reporter vos corrections / améliorations dans la copie de travail de la brique en question. Grâce aux référentiels externes, la brique du projet A n'appartient pas à la copie de travail du projet mais est bien sa propre copie de travail. Pour utiliser ces référentiels externes, voici comment procéder :

svn propedit svn:externals /dossierAuMoinsParentDesFutursEnfants

Votre éditeur par défaut s'ouvrira, vous permettant d'éditer la propriété "externals" du dossier ciblé. Le format est le suite :

destinationRelativeAuDossierCiblé        urlDuDepot

Concrètement, ça donne ceci :

www/modules/toto        svn+ssh://webu.info/webucms/modules/toto/tags/1.0.5
www/modules/titi        svn+ssh://webu.info/webucms/modules/titi/tags/2.1.1

Exclure certains fichiers

Tous les fichiers ne doivent pas être versionnés. Par exemple un config.php contenant les login/mot de passe d'accès à la base de donnée n'a rien à faire sur SVN. Pour ignorer des fichiers, ceux-ci ne doivent pas encore être versionnés (donc supprimés les au préalable avec "svn delete" si besoin) puis faites :

svn propedit ignore /dossierParentDesSourcesAExclure
A nouveau, un éditeur de texte se lancera. Il vous suffit alors de mettre les noms des ressources à ignorer (une par ligne), sachant que vous pouvez utiliser le caractère joker "*". Ainsi "*.tmp" ne versionnera pas tous les fichiers ".tmp" du répertoire sur lequel cette propriété est définie.

Nouvelle version se basant sur une existante

Si vous décidez de créer une nouvelle version (exemple la 1.2.0) se basant sur un existante (la 1.1.0 normalement pour notre exemple), la commande "copy" vous permettra de le faire tout en gardant l'historique des modifications de la 1.1.0 sur la 1.2.0. En fait SVN ne copiera pas vraiment la version, il saura que jusqu'à tel instant, la 1.1.0 et la 1.2.0 partagent les même modifications.

svn copy urlDepotSource cheminCible

La commande copy ne nécessite plus qu'un commit pour envoyer la nouvelle version sur le dépôt.

Changer de version d'un dépôt

Vous utilisez la version 1.1.0 du module toto lorsque vous décidez d'essayer la version 1.2.0. Vous pouvez passer d'une version à une autre grâce à la commande switch :

svn switch URLNouvelleVersion cheminASwitcher

Outils Graphiques

J'utilise principalement SVN en ligne de commande et via Eclipse. Mais si vous en avez l'utilité, sachez qu'il existe des clients graphiques dédiés au SVN. C'est le cas de :

J'espère que ça vous aidera à utiliser plus sereinement SVN. Ce mémo est loin d'être exhaustif, mais ce sont des commandes qui reviennent régulièrement en général.

Aucun commentaire:

Enregistrer un commentaire