Le versionning, que l'on écrit aussi versioning et que l'on appelle en bon français la gestion de versions, désigne l'ensemble des méthodes et des outils qui permettent d'enregistrer les modifications successives d'un fichier ou d'un projet, afin de pouvoir retrouver à tout moment n'importe quel état antérieur. Le principe parle à tous ceux qui ont déjà enregistré un document sous les noms « rapport final », « rapport final v2 » puis « rapport final vraiment définitif » : le versionning remplace ce bricolage par un historique fiable, daté et commenté, où chaque changement est attribué à son auteur. Né dans le monde du développement logiciel, où des dizaines, voire des milliers de personnes modifient en parallèle le même code source, il s'est imposé comme une pratique incontournable, au point que pratiquement aucun projet informatique sérieux ne s'en passe aujourd'hui. Des outils comme Git, Subversion ou Mercurial, et des plateformes d'hébergement comme GitHub ou GitLab, en sont devenus les instruments les plus connus. Cette définition explique à quoi sert le versionning, comment il a évolué, comment fonctionnent concrètement l'historique, les branches et les fusions, comment on numérote les versions d'un logiciel et pourquoi cette discipline dépasse largement le seul cadre de la programmation.

Qu'est-ce que le versionning ? Définition

Le versionning consiste à conserver, pour chaque fichier d'un projet, la trace de toutes ses versions successives, accompagnées d'informations utiles : qui a fait la modification, à quel moment et pour quelle raison. Les fichiers sont stockés dans un espace particulier appelé dépôt (repository en anglais), géré par un logiciel de gestion de versions, que l'on désigne parfois par le sigle VCS (Version Control System) ou, en français, SGV. À chaque étape jugée significative, le développeur enregistre un instantané de son travail, accompagné d'un message expliquant ce qui a changé. Le système ne se contente pas d'empiler des copies : il sait comparer deux versions pour afficher précisément les lignes ajoutées, modifiées ou supprimées, revenir en arrière sur une modification fautive et réunir le travail de plusieurs personnes. Dans les équipes qui fonctionnent par cycles courts, par exemple selon la méthode agile, où l'on livre régulièrement de petites améliorations, ce suivi rigoureux est indispensable : il permet de savoir exactement ce que contient chaque livraison et de corriger rapidement un problème découvert en production. Le versionning est donc à la fois une mémoire du projet, un filet de sécurité et un outil de collaboration.

Versionning, versioning, gestion de versions : un mot, plusieurs graphies

Le terme versionning est un emprunt à l'anglais, où l'on écrit normalement versioning avec un seul « n ». La forme à deux « n » s'est pourtant répandue en France, sans doute sous l'influence de mots français comme « version » ou « fonctionner », et on la rencontre couramment dans les offres d'emploi, les documentations et les conversations entre développeurs. Les deux graphies désignent exactement la même chose. Les organismes de terminologie recommandent plutôt les expressions gestion de versions ou contrôle de versions, et l'on croise aussi le néologisme « versionnage ». Le verbe « versionner » est entré dans le jargon pour dire qu'on place un fichier sous gestion de versions : on « versionne » un projet, un fichier de configuration ou même une base de données. Il faut enfin distinguer deux sens voisins. Au sens large, le versionning est la pratique qui consiste à suivre l'historique des modifications d'un ensemble de fichiers, grâce à un outil spécialisé. Au sens plus étroit, il peut désigner la manière d'attribuer un numéro aux versions publiées d'un logiciel ou d'une interface de programmation, comme la version 2.4.1 d'une application, une question abordée plus loin dans cet article.

D'où vient le versionning ? Petite histoire de la gestion de versions

Les premiers outils de versionning apparaissent dans les années 1970, lorsque les projets logiciels deviennent trop importants pour être suivis à la main. Le système SCCS, développé aux laboratoires Bell au début de cette décennie, est souvent cité comme l'un des pionniers ; il est suivi au début des années 1980 par RCS, plus simple, qui gère l'historique fichier par fichier. Vers 1990, CVS introduit la possibilité pour plusieurs développeurs de travailler sur un même projet stocké sur un serveur central, et devient pendant des années l'outil de référence du logiciel libre. Au début des années 2000, Subversion, abrégé en SVN, se présente comme un successeur amélioré de CVS et connaît un grand succès dans les entreprises. Le tournant décisif survient en 2005 : Linus Torvalds, le créateur du noyau Linux, conçoit Git pour remplacer l'outil propriétaire utilisé jusque-là par son projet. Git, comme Mercurial apparu la même année, adopte un modèle distribué, dans lequel chaque développeur possède une copie complète de l'historique. L'arrivée de plateformes d'hébergement en ligne à partir de la fin des années 2000 popularise ensuite Git au point d'en faire l'outil dominant, sans faire disparaître totalement les systèmes plus anciens, encore présents dans certains projets.

Outil de versionningApparitionModèleParticularité
SCCSAnnées 1970Local, fichier par fichierL'un des tout premiers systèmes
RCSDébut des années 1980Local, fichier par fichierStocke les différences entre versions
CVSVers 1990Centralisé (serveur)Travail à plusieurs sur un même projet
Subversion (SVN)Début des années 2000Centralisé (serveur)Successeur de CVS, très utilisé en entreprise
Git2005DistribuéCréé pour Linux, devenu la référence
Mercurial2005DistribuéProche de Git, réputé simple d'emploi
Illustration du versionning, la gestion des versions successives d'un projet logiciel
Le versionning garde la trace de chaque étape d'un projet, du premier jet à la version publiée.

Comment fonctionne le versionning ? Historique, branches et fusions

Au quotidien, le versionning s'organise autour de quelques opérations simples. Le développeur modifie ses fichiers dans sa copie de travail, puis sélectionne les changements qu'il souhaite enregistrer et les valide dans le dépôt : cette validation, appelée commit (que l'on traduit parfois par « soumission » ou « instantané »), reçoit un identifiant unique, une date, le nom de son auteur et un message descriptif. Les commits s'enchaînent pour former l'historique du projet, que l'on peut parcourir à tout moment pour comprendre quand et pourquoi une ligne de code a changé. L'outil sait afficher les différences entre deux états, un affichage que les développeurs appellent un diff, où les ajouts apparaissent souvent en vert et les suppressions en rouge. Si une modification introduit un bug, il est possible d'annuler précisément ce commit, ou de revenir à l'état complet du projet tel qu'il était à une date donnée. Certains outils permettent même de rechercher automatiquement, par dichotomie, le commit qui a introduit un problème. On peut également poser des étiquettes (tags) sur des moments importants, par exemple pour marquer la version publiée d'un logiciel, afin de la retrouver facilement des années plus tard.

Schéma animé d'un historique de versions : une branche principale, une branche de fonctionnalité qui s'en détache puis y est fusionnée, et une étiquette de version main nouvellefonction commit 1commit 2correctifessaifinitions fusion(merge) v1.2.0 Chaque rond est un instantané du projet, que l'on peut retrouver à tout moment
Une branche permet de développer une nouveauté à l'écart de la version principale, puis de l'y intégrer par une fusion une fois le travail terminé.

Les branches et les fusions

La notion de branche est l'une des plus utiles du versionning. Une branche est une ligne de développement parallèle, qui part d'un point de l'historique et évolue indépendamment de la ligne principale, souvent appelée main ou master. Elle permet par exemple de développer une nouvelle fonctionnalité, de tester une idée risquée ou de préparer une version corrective sans perturber le travail des autres membres de l'équipe ni la version stable en service. Lorsque le travail est terminé et validé, la branche est réintégrée dans la ligne principale par une fusion (merge). Si deux personnes ont modifié différemment les mêmes lignes du même fichier, l'outil ne peut pas deviner laquelle des deux versions garder : il signale alors un conflit, que le développeur doit résoudre à la main en choisissant ou en combinant les modifications. Pour organiser ces flux, les équipes adoptent des conventions, comme Git Flow, qui distingue des branches dédiées au développement, aux nouvelles fonctions, aux préparations de livraison et aux corrections urgentes, ou des modèles plus légers fondés sur de courtes branches fusionnées rapidement après relecture. Sur les plateformes en ligne, la fusion passe souvent par une demande formelle, qui permet à des collègues de relire le code avant son intégration.

Versionning centralisé ou distribué ?

On distingue deux grandes familles d'outils de versionning. Dans le modèle centralisé, celui de CVS ou de Subversion, l'historique complet réside sur un serveur unique : chaque développeur y récupère la dernière version, travaille sur sa copie, puis renvoie ses modifications au serveur. Ce fonctionnement est simple à comprendre et facilite le contrôle des accès, mais il rend chacun dépendant du serveur : sans connexion, impossible de consulter l'historique ou d'enregistrer une nouvelle version, et une panne du serveur bloque toute l'équipe. Dans le modèle distribué, adopté par Git et Mercurial, chaque développeur dispose d'une copie intégrale du dépôt, historique compris. Il peut enregistrer ses commits localement, créer des branches et consulter tout le passé du projet hors ligne, puis synchroniser son travail avec les autres en « poussant » ses modifications vers un dépôt partagé ou en « tirant » celles de ses collègues. Chaque copie constituant une sauvegarde complète, le risque de perte est très faible. Dans la pratique, les équipes qui utilisent un outil distribué désignent tout de même un dépôt de référence, souvent hébergé sur une plateforme comme GitHub, GitLab ou Bitbucket, qui ajoutent des fonctions de relecture, de suivi des tâches et d'automatisation.

Comment numéroter les versions d'un logiciel ? Le versionning sémantique

Le mot versionning désigne aussi la façon de numéroter les versions publiées d'un logiciel, d'une bibliothèque ou d'une interface de programmation. La convention la plus répandue est le versionnage sémantique (Semantic Versioning, souvent abrégé en SemVer), qui utilise trois nombres séparés par des points, par exemple 2.4.1. Le premier, dit majeur, augmente lorsqu'une modification casse la compatibilité avec les versions précédentes, obligeant les utilisateurs à adapter leur propre code. Le deuxième, dit mineur, augmente lorsqu'on ajoute des fonctionnalités sans rien casser. Le troisième, appelé correctif (patch), signale de simples corrections de bugs. Des suffixes peuvent préciser qu'il s'agit d'une préversion, comme « 3.0.0-beta ». Ce système permet aux développeurs qui dépendent d'une bibliothèque de savoir d'un coup d'œil si une mise à jour est sans risque. D'autres conventions existent : certains éditeurs numérotent leurs versions selon la date de publication (par exemple l'année et le mois), d'autres utilisent des noms de code. Les interfaces web, enfin, affichent souvent leur version dans l'adresse elle-même, sous la forme « v1 » ou « v2 », afin que les anciennes applications continuent de fonctionner pendant la transition.

Décomposition du numéro de version 2.4.1 selon le versionnage sémantique : majeur, mineur et correctif 2 . 4 . 1 MAJEURchangement qui cassela compatibilité MINEURnouvelle fonctioncompatible CORRECTIFcorrection de bugsans nouveauté Exemple : de 2.4.1 à 2.5.0 (ajout) ou à 3.0.0 (rupture)
Dans le versionnage sémantique, chaque chiffre du numéro de version indique la nature des changements apportés.

Pourquoi le versionning est-il indispensable ? Avantages et limites

Les bénéfices du versionning sont nombreux et expliquent son adoption quasi universelle. Il offre d'abord une traçabilité complète : chaque modification est datée, signée et expliquée, ce qui facilite la compréhension du code des années plus tard, l'audit de sécurité ou la recherche de l'origine d'un bug. Il constitue ensuite un filet de sécurité : une erreur, une suppression accidentelle ou une expérimentation ratée peuvent être annulées en quelques commandes. Il rend possible la collaboration à grande échelle, en permettant à des personnes dispersées dans le monde entier de travailler simultanément sur le même projet, ce dont témoigne le développement des grands logiciels libres. Il sert enfin de socle à l'automatisation : les chaînes d'intégration et de déploiement continus, souvent désignées par le sigle CI/CD, se déclenchent à chaque nouveau commit pour compiler le programme, lancer les tests et parfois le mettre en ligne. Le versionning a cependant ses exigences. Les outils comme Git demandent un apprentissage réel, et leurs commandes déroutent souvent les débutants. Les fichiers volumineux ou binaires, comme les vidéos ou les maquettes graphiques, s'y prêtent mal sans extensions spécialisées. Les grands projets doivent aussi définir des règles claires pour éviter des conflits de fusion à répétition.

Le versionning au-delà du code

Si le développement logiciel reste son terrain d'élection, le versionning s'est diffusé bien au-delà. Les traitements de texte et tableurs en ligne conservent automatiquement un historique des modifications, permettant de restaurer une version de la veille ou de voir qui a modifié tel paragraphe. Les services de stockage en ligne gardent souvent les versions précédentes des fichiers pendant une certaine durée, ce qui protège contre les erreurs et parfois contre les logiciels de rançon. Les rédactions, les juristes et les traducteurs utilisent des outils de suivi des modifications pour comparer des versions successives d'un texte. Les administrateurs systèmes versionnent leurs fichiers de configuration, et les équipes de données appliquent des principes similaires aux jeux de données et aux modèles d'apprentissage automatique, qui évoluent eux aussi au fil du temps. Les bases de données disposent d'outils de « migrations » versionnées pour faire évoluer leur structure de manière maîtrisée. L'exemple le plus parlant pour le grand public reste sans doute le wiki, dont chaque page conserve l'historique complet de ses modifications : n'importe quel lecteur peut y comparer deux versions d'un article et rétablir une version antérieure en cas de vandalisme, une application directe des principes du versionning à l'écriture collaborative.