Les logiciels de gestion de version décentralisés
La gestion de version
Petit rappel...
"La gestion de versions (en anglais version control ou revision control) est une activité qui consiste à maintenir l'ensemble des versions ou révisions d'un logiciel ou autre document" -- Source Wikipedia
Elle permet de revenir en arrière en cas de mauvaise manipulation ou de perte d'informations. Si la gestion de version de Papy ressemblait à un ensemble de fichiers renommés à la main par le propriétaire :
- fichier_source--V1.c
- fichier_source--V2.c
- fichier_source--V2a.c
- mon_rapport-septembre2008.doc
- mon_rapport-janvier2011.doc
- mon_projet--latest
Elle a depuis quelques années bien évoluée et se fait de manière quasi-automatisée. Les outils d'aujourd'hui permettent de travailler à plusieurs sur le même projet, c'est-à-dire de modifier en même temps le même fichier sans se marcher sur les pieds.
Un bon logiciel de gestion de version offre les fonctionnalités suivantes :
- Sauvegardes et restaurations. Pour pouvoir revenir à une version donnée d'un fichier peu importe la date à laquelle il a été édité.
- Synchronisation. Pour que les personnes travaillant sur le même projet possèdent une version à jour des fichiers.
- Traçabilité Donner la possibilité à celui qui modifie le code de laisser un message décrivant les changements qu'il a effectué sur le code source. Ceci afin de voir l'évolution du code mais aussi de punir les coupables :-) en cas de découverte de bogues.
- Branchements et fusion de branches (merge). Pouvoir faire évoluer du code source en parallèle de la ligne de développement principale. Et, au besoin, faire revenir ces modifications avec la ligne de développement principale (= fusion).
Le modèle classique
Les logiciels de gestion de version classique comme CVS et SVN fonctionnent selon un modèle centralisé. Dans ce modèle, plusieurs développeurs travaillant sur le même projet récupèrent les fichiers depuis un dépôt central (checkout). Pour se synchroniser entre eux, les développeurs vont envoyés toutes leur modifications sur ce même dépôt (commit).

La représentation de l'historique du projet se fait de manière linéaire. Il s'agit d'une séquence de révisions (commit) qui se suivent les unes après les autres. Ceci implique qu'il existe un serveur commun qui garde en mémoire le numéro de la prochaine révision.

Ce modèle fonctionne correctement depuis quelques années mais des critiques ont été exprimées par les développeurs travaillant, pour la plupart, sur des projets open-source. Ces reproches ont mis en évidences de nouveaux besoins. Faisons un tour d'horizon de ces reproches.