Accueil > Réflexions > Pourquoi utiliser un logiciel de gestion de version

Pourquoi utiliser un logiciel de gestion de version

lundi 14 mai 2007, par Nicolas

Un développeur est souvent amené à utiliser un logiciel de gestion de version pour ses projets. Pourtant c’est un outil très puissant qui peut servir à bien d’autres choses.

Qu’est-ce qu’un logiciel de gestion de version ?

Il s’agit d’un logiciel qui permet de suivre les différentes versions d’un ensemble de fichiers. Il permet de retrouver un ou des fichiers tels qu’ils étaient à une date donnée. C’est, en résumé, un logiciel qui garde un historique de l’évolution du fichier.

Ces logiciels permettent, quand il s’agit de fichiers texte [1], de voir les modifications (ajout, suppression, changement) entre différentes versions des fichiers, de savoir qui a modifié, etc. Pour un fichier binaire, le logiciel se contente de garder les différentes versions, sans être capable de dire les modifications [2].

Plus précisément, le développeur demande manuellement, et aussi souvent qu’il le désire, au logiciel de gestion de version de stocker l’état de ses fichiers à un instant donné, lui permettant de revenir à cette version à tout moment.

Pour les utilisateurs connaissant un logiciel tel que Microsoft Word (c), un logiciel de gestion de version est similaire au contrôle de révisions que le traitement de texte offre [3].

Pourquoi utiliser un tel logiciel, et quelles sont ses fonctionnalités majeures ?

La première utilisation est bien sûr de garder une trace des modifications. C’est un point très important :
- il est possible de faire de nombreuses modifications sur les fichiers, puis de tout annuler pour revenir à une version précédente sans avoir besoin de tout annuler manuellement, ou de garder une copie des fichiers originaux, ...
- le logiciel de gestion de version permet de suivre l’historique, qui a modifié quoi, quand. La plupart de ces logiciels permettent d’entrer un commentaire au moment de sauver l’état des fichiers. Associé à la liste, générée automatiquement, des fichiers modifiés, ceci permet de suivre la vie d’un logiciel.

Le logiciel de gestion de version permet également de faciliter le travail entre plusieurs personnes. Chaque développeur travaille sur une copie des sources sur son propre ordinateur, puis quand il juge que sa version est correcte, il la transmet au logiciel de gestion de version, qui centralise les modifications. Les autres développeurs peuvent alors récupérer depuis cette base centrale la dernière version des fichiers.

Il existe deux philosophies par rapport au travail collaboratif :
- soit les développeurs travaillent en mode « exclusif », c’est-à-dire qu’une seule personne à la fois peut modifier un fichier donné
- soit les développeurs modifient arbitrairement n’importe quel fichier, et le logiciel de gestion de version s’occupe de fusionner automatiquement les différentes modifications. Si la fusion automatique n’est pas possible (deux personnes ont modifié une même zone d’un fichier de façon différente et non compatible), il est nécessaire qu’un développeur résolve à la main les conflits de modification [4].

Les deux philosophies ont des points positifs et négatifs. La première évite les conflits de modification puisqu’une seule personne peut modifier un fichier ; en revanche elle peut parfois forcer un développeur à attendre qu’un autre ait fini de travailler sur un fichier pour pouvoir continuer. La deuxième approche est plus souple car elle permet de modifier sans restriction ni délai ; par contre elle demande une coordination entre les développeurs pour qu’ils ne modifient pas le même endroit en même temps [5].

Une fonctionnalité importante d’un logiciel de gestion de version est la possibilité de créer des « branches ». Cette fonctionnalité permet d’avoir plusieurs versions en parallèle des fichiers.

Ainsi, le projet Crossfire, auquel je participe, a deux branches :
- la branche « 1.x » correspond à la version 1.10 du logiciel distribuée publiquement
- la branche « trunk » comprend la version en cours de développement qui sera la future version 2.

Après la distribution de la version 1.10, plusieurs bugs ont été signalés, et corrigés. Les corrections ont eu lieu sur la branche « 1.x », qui donnera lieu, lorsque suffisamment de bugs auront été corrigés, à la version 1.11.

Simultanément, un travail de fond de modification a eu lieu sur la branche « trunk ». Cette branche est considérée expérimentale, et c’est sur elle que les efforts majeurs de développement ont lieu, que la plupart des nouvelles fonctionnalités sont rajoutées. Les corrections apportées sur la branche « 1.x » sont, si applicables, dupliquées sur cette branche.

Lorsque la branche « trunk » sera considérée stable, la branche « 1.x » sera abandonnée sauf pour corrections de bugs majeurs.

Deux versions des fichiers cohabitent donc, chacune ayant son utilité, l’une pour avoir une version distribuable à tout instant et l’autre pour expérimenter.

À quoi peut servir un tel logiciel pour un non développeur ?

Même si c’est à l’origine un outil destiné aux développeurs, un logiciel de gestion de version peut parfaitement être utilisé par un non développeur.

Le premier avantage est qu’une copie des fichiers gérés par le logiciel est disponible dans un emplacement centralisé. Ceci permet de facilement faire une sauvegarde des données — il suffit de copier le répertoire central. De plus même si un fichier est effacé par erreur il est possible d’en récupérer une version depuis le logiciel de gestion de version.

Le deuxième avantage est l’historique offert. Pour des documents souvent modifiés, pouvoir revenir à un point arbitraire dans le passé est un énorme avantage.

Bien sûr, utiliser un tel logiciel impose une certaine discipline, à savoir transmettre régulièrement au logiciel de gestion de versions les modifications effectuées sur les documents. Cependant les gains sont probablement suffisants pour s’imposer cette contrainte sans trop de difficultés.

Utiliser un logiciel de version nécessite également d’avoir un peu plus d’espace disque disponible, puisqu’un fichier existe en différentes versions, occupant de la place sur le disque. Mais avec les capacités actuelles de stockage, ce n’est pas vraiment une difficulté — enfin, vouloir gérer des versions de films en haute définition poserait certainement des soucis !

Exemple d’application de la gestion de versions

Un exemple d’application de gestion de versions est disponible l’encyclopédie Wikipédia. En effet, chaque article a un historique intégral depuis sa création, comprenant toutes les modifications jamais effectuées [6]. Il est possible de visualiser les changements apportés entre deux versions arbitraires, de revenir à des versions antérieures, ...

De plus plusieurs personnes peuvent modifier le même article simultanément, avec un conflit uniquement si la même zone a été modifiée de façon incompatible.

Même si le mécanisme est peu visible pour le contributeur, il s’agit bel et bien d’un système de gestion de version.


Mise à jour le 04/05/2011 : petit article sur Git, outil de contrôle de sources.


[1Il est coutume de distinguer les fichiers ou formats dits texte — qui ne contiennent que des caractères alphanumériques ou symboles — qui peuvent être simplement affichés, et les fichiers dits binaires qui nécessitent un programme pour être visualisés. Ainsi une image est un fichier binaire, alors que par exemple un mail est en format texte — il contient parfois des « tags » qui permettent d’indiquer l’italique, le gras, ..., mais ces tags eux-mêmes sont en format texte, et peuvent être lus sans logiciel spécial si besoin.

[2Se contenter de repérer les modifications d’une image entre deux versions ne serait pas forcément une tâche insurmontable, mais pour par exemple un film cela n’aurait pas beaucoup de sens.

[3À noter qu’un document Word n’est pas un document texte, mais bien un fichier binaire. Les données de mise en forme (gras, italique, tableaux, ...) sont stockées sous format complexe illisible sans logiciel spécialisé. Cependant les dernières versions peuvent aussi utiliser un format dit XML, qui lui devrait être, si j’ai bien compris, en format texte un peu plus simple à interpréter sans logiciel spécial.

[4La plupart des logiciels travaillent sur un mode de modification ligne à ligne, avec une certaine zone autour. En général, les conflits ont lieu uniquement si la même ligne est modifiée par deux développeurs simultanément, les algorithmes des logiciels étant assez puissant pour fusionner les modifications.

[5Un argument en faveur de cette méthode est que «  si deux développeurs modifient en même temps la même zone d’un fichier, ils ont un problème de communication, ce qu’aucun logiciel de gestion de version ne peut résoudre.  »

[6Il est possible de totalement supprimer des versions, cependant c’est une fonctionnalité uniquement utilisée pour purger les modifications de type spam, ou requises pour raisons légales.