# Logiciel de gestion de versions

Un logiciel de gestion de versions (ou VCS en anglais, pour version control system) est un logiciel qui permet de stocker un ensemble de fichiers en conservant la chronologie de toutes les modifications qui ont été effectuées dessus. Il permet notamment de retrouver les différentes versions d'un lot de fichiers connexes.
Il existe aussi des logiciels et services de gestion de versions décentralisé (distribué) (ou DVCS en anglais, pour distributed version control system). Git et Mercurial sont deux exemples de logiciels de gestion de versions décentralisés et sont disponibles sur la plupart des systèmes Unix et Windows.
Les logiciels de gestion de versions sont utilisés couramment en développement logiciel pour conserver le code source relatif aux différentes versions d'un logiciel ; et plus rarement à la rédaction d'ouvrages.

## Définition

Un logiciel de gestion de versions agit sur une arborescence de fichiers afin de conserver toutes les versions des fichiers, ainsi que les différences entre les fichiers.
Ce système permet par exemple de mutualiser un développement. Un groupe de développeurs autour d'un même développement se sert de l'outil pour stocker toute évolution du code source. Le système gère les mises à jour des sources pour chaque développeur, conserve une trace de chaque changement. Ceux-ci sont, en bonne utilisation, chaque fois accompagnés d'un commentaire. Le système travaille par fusion de copies locale et distante, et non par écrasement de la version distante par la version locale. Ainsi, deux développeurs travaillant de concert sur une même source, les changements du premier à soumettre son travail ne seront pas perdus lorsque le second, qui a donc travaillé sur une version non encore modifiée par le premier, renvoie ses modifications.
Généralement, chaque nouvelle version d'un fichier est appelée révision et son numéro de version est incrémentée de un par rapport à la précédente.

## Autres utilisations

Bien que la plupart du temps utilisés pour le suivi de projets informatiques, le concept des gestions de versions peut s'adapter à d'autres types de ressources. Les wikis (tel Wikipédia) sont des exemples de logiciels de gestion de versions agissant sur des champs de base de données et non sur des fichiers.

## Historique

L'un des premiers gestionnaires de version était Librarian (produit non IBM) au milieu des années 1970, travaillant sous TSO et fonctionnant encore sur le modèle de la carte perforée à 80 colonnes (bien entendu simulée sur disque). On mémorisait son programme - venant soit d'un paquet de cartes réel, soit d'un éditeur de texte - sous Librarian, et toute modification effectuée était datée dans des colonnes "virtuelles" 81 à 89 des "cartes" ainsi simulées. Le retour automatique en arrière en cas de modifications infructueuses de programme était ainsi très facile, même si des passages de code très éloignés les uns des autres avaient été modifiés.
Certains outils de génie logiciel ont eu très tôt une gestion de version, parfois rudimentaire ; c'est notamment le cas de Pacbase, dont les premières versions remontent aux années 1970.

## Limitations

Des limitations ou caractéristiques peuvent concerner certains systèmes, notamment le codage des fichiers, les conventions de fin de ligne, ou le codage des noms de fichiers. Par exemple sous Source Safe, certains caractères d'un nom de fichier ne sont conservés que s'ils sont enregistrés en Unicode. À partir de source Safe 2005, les fichiers textes unicode sont reconnues en tant que tel.
Si SVN peut gérer efficacement les modifications de fichiers binaires, Git lui duplique entièrement chaque fichier binaire à chaque commit, ce qui alourdit le dossier du projet.