Système de gestion de versions

Même si c’est pour des projets personnels, si un développement commence à prendre un peu d’envergure, il peut être intéressant de pouvoir garder une trace de l’évolution de son programme et même garder un historique des différentes versions.

Pour cela, on peut utiliser une système de gestion de versions.

Plusieurs logiciels existent: cvs, subversion (svn), bazaar (bzr), git pour les plus connus.

cvs et svn ont à peu près le même mode de fonctionnement, svn ayant été développé dans le but de succéder à cvs.

git a été développé à l’initiative de Linus Torvalds pour gérer les versions du noyau linux. Il permet la gestion de versions décentralisées.

bzr est le résultat du développement de cannonical (sponsor d’ubuntu). Ce dernier a l’avantage de ne pas avoir besoin d’un serveur, le dépôt est un simple répertoire qui peut être manipulé avec les commande gérant le système de fichier. Il permet aussi la gestion de versions décentralisées

Etant donné que je prends l’exemple d’une gestion de projet personnel, donc en théorie, sur une seule machine, on va se pencher sur le cas svn (je ferais un billet prochainement sur Trac qui gère svn)

Déjà, pourquoi gérer les versions?

Personnellement, j’aurais une seule réponse:
Pour ne pas regretter amèrement une modification de sources qui se révèle une catastrophe pour le projet :)

Les autres avantages pourront facilement être trouvés par une petite recherche sur le net.

Principe.

Les sources sont stockées dans un dépôt en local ou en réseau.
En principe, on crée trois répertoires par projet:

  • trunk: qui correspond au sources en cours de développement.
  • tags: contient les sources de chaque version (release).
  • branches: correspond aux différentes évolutions effectuées sur les releases.

On travaille principalement sur le répertoire trunk.
Chaque version sortie possède un répertoire tags/version-x.y.z correspondant.
Si une correction ou une évolution doit être apportée à une version antérieure, elle est faite dans le répertoire branches/version-x.y.z
Si les évolutions apportées à une branche doivent être reportées dans la version de développement, on peut effectuer une fusion (merge) avec le répertoire trunk.

Installation de svn.

subversion est disponible dans les dépôt officiels de toutes (je pense) les distributions linux.

Utilisation.

Tout d’abord, il faut initialiser le dépôt:

mkdir $HOME/svn
svnadmin create svn/projet
REPO=file:///$HOME/svn/projet

Le répertoire peut être choisi librement.
On définit la variable REPO par commodité pour la suite.

Une fois le dépôt créé, il faut faire un import de l’arborescence des sources.
Une fois dans le répertoire du projet:

svn import . $REPO/trunk -m 'Import initial'

Puis, on va installer une copie de travail du projet:

svn co $REPO projet

Voilà, votre projet est vérsionné :p

Pour interroger le dépôt, on peut soit le spécifier explicitement, soit être dans le répertoire du projet:

svn info $REPO
svn info

Les opérations de copie, déplacement, etc… peuvent être faite directement sur le dépôt ou sur la copie de travail avant de valider les modifications.
On peut avoir la liste des commandes de svn avec:

svn help
svn help commit # pour avoir l'aide sur l'action 'commit'

A partir de ce point, si le dépôt est omis, c’est qu’on est dans la copie de travail.

Quelques actions avec svn:


svn add nouveau_fichier  # ajout d'un nouveau fichier depuis la copie de travail
svn del fichier          # efface un fichier
svn commit -m message    # valide la version de la copie de travail
svn revert .             # Annule les modifications
svn log                  # Affiche tous les log

svn mkdir $REPO/branches # crée le répertoire branches
svn mkdir $REPO/tags     # crée le répertoire tags

# Sortie d'une release, création d'un tag et une branche y correspondant
svn copy $REPO/trunk $REPO/tags/projet-1.0
svn copy $REPO/trunk $REPO/branches/projet-1.0

On peut à tout moment avoir des informations sur le dépôt ou la copie de travail:

svn info
svn status # Donne un résumé des différences entre la copie et le dépôt
svn diff [fichier] # Affiche la différence

Sauvegarde et restauration.

Si svn est efficace contre les erreurs dans la modification du code, il n’est pas immunisé contre une perte de données, celle du dépôt en l’occurence.
Pour cela, il faut, de temps en temps sauvegarder le dépôt avec:

svnadmin dump svn/projet > sauvegarde_depot_projet

Après avoir recrée le dépôt, il suffit de le recharger:

svnadmin load svn/projet < sauvegarde_depot_projet

Voilà, reste plus qu'à l'utiliser à bon escient.