Gestion de versions
534
29903860
2008-05-23T14:49:36Z
Salebot
173239
bot : révocation de [[Special:Contributions/90.38.67.153|90.38.67.153]], retour à la version 28977589 de Loomchild
La '''gestion de versions''' (en [[anglais]] ''revision control'') est une activité qui consiste à maintenir l'ensemble des [[Version d'un logiciel|versions d'un logiciel]]. Essentiellement utilisée dans le domaine de la [[Programmation informatique|création de logiciels]], elle est surtout concernée par le [[code source]] ; mais elle peut être utilisée pour tout type de document informatique.
Cette activité étant fastidieuse et relativement complexe, un appui logiciel est presque indispensable. À cet effet, il existe différents [[logiciel de gestion de versions|logiciels de gestion de versions]] qui, bien qu'ayant des concepts essentiels communs, apportent chacun son propre vocabulaire et ses propres usages. À titre d'exemple, on trouve un mécanisme de gestion de versions dans [[Wikipédia]] : pour chaque article, l'historique est disponible en cliquant sur le lien [http://fr.wikipedia.org/w/wiki.phtml?title=Gestion_de_version&action=history Historique].
==Les versions==
Les logiciels évoluant, chaque étape d'avancement est appelée '''version'''. Les différentes versions sont nécessairement liées à travers des '''modifications'''.
Une modification peut correspondre à des ajouts, modifications, suppressions ou une combinaison des trois sur une version donnée. Schématiquement, on passera de la version N à la version N + 1 en appliquant une modification M. Un logiciel de gestion de versions nous aidera alors à soustraire la modification M de la version N + 1 pour retrouver la version N.
Les concepteurs du logiciel de gestion de versions [[Concurrent versions system|CVS]] ont choisi de parler de « révisions » (''revisions'') afin de ne pas confondre la version du logiciel avec les « révisions » de ses fichiers sources.
Pour des raisons pratiques, on associe généralement un « numéro » à une version (voir [[Version d'un logiciel]]).
==Modifications et ensemble de modifications==
Une modification constitue donc l'évolution entre deux versions. On peut donc aussi bien parler de la différence entre deux versions que de modification ayant amené à une nouvelle version.
On utilise généralement la gestion de versions à un ensemble de fichiers qui constitue un projet. De ce fait, il est courant de parler de modification pour un seul fichier et d'ensemble de modifications (''change set'') lorsqu'il s'agit du projet (et donc de plusieurs fichiers). En effet, les deux n'évoluent pas au même rythme.
Pour illustrer, prenons l'exemple d'un logiciel nommé « Toto ». Il est constitué des fichiers <tt>A</tt>, <tt>B</tt> et <tt>C</tt>. À la version 1.0 de « Toto » correspondent les versions 1.0 de chacun des fichiers. Admettons que l'ajout d'une fonctionnalité à « Toto » impose la modification de <tt>A</tt> et de <tt>C</tt>. Présentons la situation à l'aide d'un tableau
{| class="wikitable"
! versions de « Toto » !! versions de <tt>A</tt> !! versions de <tt>B</tt> !! versions de <tt>C</tt>
|- align="center" valign="middle"
| 1.0 || 1.0 || rowspan="2"| 1.0 || 1.0
|- align="center" valign="middle"
| 1.1 || 1.1 || 1.1
|}
Du point de vue du projet, les modifications apportées à <tt>A</tt> et à <tt>C</tt> font partie du même ensemble.
==Branches==
Des modifications divergentes peuvent intervenir sur un ensemble de fichiers. On parle alors de [[Branche (gestion de configuration)|branche]]s.
Parfois il s'agit aussi de faire converger des branches. On parle alors de '''fusion de branches'''.
Les branches sont utilisées pour permettre :
* la maintenance d'anciennes versions du logiciel (sur les branches) tout en continuant le développement des futures versions (sur le tronc) ;
* le développement parallèle de plusieurs fonctionnalités volumineuses sans bloquer le travail quotidien sur les autres fonctionnalités.
===Conflit de modifications===
Dans le cas d'une gestion de versions en équipe, chacun travaille de façon indépendante, donc sur des branches de versions différentes. Les fusions régulières sont nécessaires à un avancement global du logiciel.
Il n'est pas rare que, suite à une mauvaise communication au sein de l'équipe, certaines modifications soient contradictoires (par exemple lorsque deux personnes ont apporté des modifications différentes à la même partie d'un fichier). On parle alors de '''conflit''' (de modifications) puisque le logiciel de gestion de versions n'est pas en mesure de savoir laquelle des deux modifications appliquer.
==Systèmes centralisés et décentralisés==
[[Concurrent versions system|CVS]] et [[Subversion (logiciel)|Subversion]] sont des logiciels '''centralisés''', ce qui veut dire qu'il n'existe qu'un seul '''dépôt''' des fichiers, dépôt qui fait référence. Cela peut simplifier le modèle mais cela est contraignant pour certains usages (travail sans connexion au réseau ou tout simplement travail sur des branches expérimentales ou bien contestées).
Il existe donc également des logiciels '''décentralisés''' comme [[Mercurial]], [[darcs]] ou [[Bazaar (logiciel)|Bazaar]]. Avec ceux-ci, il existe plusieurs dépôts dont aucun n'a de statut privilégié.
==Fonctionnalités notoires des logiciels de gestion de versions==
===Étiquetage ou marquage===
Cela consiste à associer un nom à une version donnée. Pour certains outils de gestion de versions (comme [[Concurrent versions system|CVS]]) qui gèrent les versions à une faible granularité (beaucoup de modifications non significatives), c'est un moyen de retrouver facilement une version significative.
===Comparaison===
Il est possible de comparer plusieurs versions pour en extraire les modifications.
===Verrouillage et notifications===
Pour le travail en équipe, certains logiciels de gestion de versions apportent des outils pour communiquer.
Par exemple, le verrouillage permet d'interdire la modification d'un fichier, tandis que la notification émet un avertissement à tous les autres membres lorsqu'un fichier est modifié.
==Exemples de logiciels de gestion de versions==
Les logiciels de contrôle de versions sont nombreux. Sous [[UNIX]], il y a eu [[Source Code Control System|SCCS]] qui a suscité un [[logiciel libre]] alternatif : [[Revision Control System|RCS]] (Revision Control System) qui est devenu un standard de fait. Comme ''RCS'' ne gérait que des fichiers individuels, nombre de ses utilisateurs ont créé des surcouches gérant les arborescences de fichiers. Certaines de ces surcouches furent distribuées librement. Il en fut ainsi de [[PRCS]] et de [[Concurrent versions system|CVS]]. ''CVS'' est devenu extrêmement répandu dans le monde du [[logiciel libre]] sur Internet, mais aussi dans les entreprises. CVS est simple à mettre en œuvre et offre les fonctionnalités fondamentales qu'attendent ses utilisateurs.
Mais l'histoire des logiciels de contrôle de versions ne s'arrête pas en [[2006]] et de nouveaux logiciels libres concurrencent ''CVS'', comme par exemple [[Subversion (logiciel)|Subversion]], [[SVK (informatique)|SVK]], [[darcs]], [[mercurial]] et [[GNU Arch]].
Dans le monde propriétaire, [[ClearCase]] (de [[International Business Machines Corporation|IBM]]), [[Synergy (logiciel)|Synergy/CM]] (de [http://www.telelogic.com Telelogic]) et [[Serena|Serena Dimensions]] (de [http://www.serena.com Serena]) sont les plus répandus. [[Visual Source Safe]] (de [[Microsoft]]) est largement utilisé aussi, notamment du fait de son intégration avec l'outil de développement [[Visual Studio]], malgré de nombreuses lacunes et des mises à jour peu fréquentes. En 2006, [[Microsoft]] lance une nouvelle famille d'outils de développement et de [[gestion de configuration logicielle]] sous le nom de Team Suite et [[Visual Studio Team System|Team Foundation Server]]. Cette suite qui s'appuie sur Visual Studio 2005 intègre entre autres un nouveau logiciel de gestion de versions plus complet et ambitieux que Visual Source Safe.
== Voir aussi ==
{{Wikilivres|Gestion de version|la gestion de version}}
* [[Logiciel de gestion de versions]]
* [[Gestion de configuration]]
* [[Version d'un logiciel]]
* [[Gestion de version décentralisée]]
[[Catégorie:Gestion de projet]]
[[Catégorie:Programmation informatique]]
[[Catégorie:Système de gestion de versions|*]]
[[cs:Verzování]]
[[de:Versionsverwaltung]]
[[en:Revision control]]
[[es:Control de versiones]]
[[fa:سورس کنترل]]
[[fi:Versionhallinta]]
[[he:ניהול גרסאות]]
[[hu:Verziókezelés]]
[[id:Pengontrol versi]]
[[it:Controllo versione]]
[[ja:バージョン管理システム]]
[[ko:버전 관리]]
[[lt:Versijų kontrolės sistema]]
[[lv:Versiju pārvaldības sistēma]]
[[nl:Versiebeheersysteem]]
[[no:Versjonskontrollsystem]]
[[pl:System kontroli wersji]]
[[pt:Sistema de controle de versão]]
[[ro:Controlul versiunilor]]
[[ru:Система управления версиями]]
[[sv:Versionshantering]]
[[th:การควบคุมการปรับปรุงแก้ไข]]
[[uk:Система керування версіями]]
[[vi:Hệ thống quản lý phiên bản]]
[[zh:版本控制]]