Le contrôle de version (également appelé contrôle de révision , contrôle de source et gestion du code source ) est la pratique du génie logiciel qui consiste à contrôler, organiser et suivre les différentes versions dans l'historique des fichiers informatiques – principalement les fichiers texte de code source , mais généralement tout type de fichier.
Le contrôle de version est un composant de la gestion de la configuration logicielle .
Un système de contrôle de version est un outil logiciel qui automatise le contrôle de version. Alternativement, le contrôle de version est intégré comme fonctionnalité de certains systèmes tels que les traitements de texte , les tableurs , les documents Web collaboratifs , et les systèmes de gestion de contenu , tels que l'historique des pages de Wikipédia .
Le contrôle de version inclut des options permettant de consulter les anciennes versions et de rétablir une version antérieure d'un fichier.
Aperçu
Lors du développement logiciel, il est fréquent de déployer plusieurs versions d'un même logiciel et que différents développeurs travaillent simultanément sur une ou plusieurs versions. Les bogues ou certaines fonctionnalités sont souvent présents uniquement dans certaines versions (en raison de la correction de certains problèmes et de l'introduction d'autres au fur et à mesure du développement). Par conséquent, pour localiser et corriger les bogues, il est essentiel de pouvoir récupérer et exécuter différentes versions du logiciel afin de déterminer dans laquelle ou lesquelles le problème se produit. Il peut également être nécessaire de développer deux versions du logiciel en parallèle : par exemple, une version où les bogues sont corrigés mais où aucune nouvelle fonctionnalité n'est intégrée ( branche ), tandis que l'autre version sert au développement de nouvelles fonctionnalités ( branche principale ).
Au niveau le plus simple, les développeurs pourraient conserver plusieurs copies des différentes versions du programme et les étiqueter correctement. Cette approche simple a été utilisée dans de nombreux projets logiciels de grande envergure. Bien que cette méthode puisse fonctionner, elle est inefficace car elle nécessite la maintenance de nombreuses copies quasi identiques du programme. Cela exige une grande rigueur de la part des développeurs et conduit souvent à des erreurs. Le code source étant identique, il est également nécessaire d'accorder des droits de lecture, d'écriture et d'exécution à un groupe de développeurs, ce qui implique la gestion des permissions afin de garantir l'intégrité du code et complexifie encore le processus. C'est pourquoi des systèmes d'automatisation du contrôle de version, partiels ou complets, ont été développés. Ces systèmes masquent la plupart des étapes opérationnelles aux utilisateurs.
De plus, dans le développement logiciel, les pratiques juridiques et commerciales, et d'autres environnements, il est devenu de plus en plus fréquent qu'un même document ou extrait de code soit modifié par une équipe dont les membres peuvent être géographiquement dispersés et poursuivre des intérêts différents, voire contradictoires. Un système de contrôle de version sophistiqué, qui assure le suivi et la traçabilité des modifications apportées aux documents et au code, peut s'avérer extrêmement utile, voire indispensable, dans de telles situations.
Le contrôle de version permet également de suivre les modifications apportées aux fichiers de configuration , tels que ceux généralement stockés sur /etcles /usr/local/etcsystèmes Unix . Cela offre aux administrateurs système un moyen supplémentaire de suivre facilement les modifications effectuées et de revenir à des versions antérieures en cas de besoin.
De nombreux systèmes de contrôle de version identifient la version d'un fichier par un nombre ou une lettre, appelé numéro de version , version , numéro de révision , révision ou niveau de révision . Par exemple, la première version d'un fichier peut être la version 1. Lorsque le fichier est modifié, la version suivante est la version 2. Chaque version est associée à un horodatage et à la personne qui a effectué la modification. Les révisions peuvent être comparées, restaurées et, pour certains types de fichiers, fusionnées.
Histoire
En affaires et en droit
Le contrôle de version est largement répandu dans le monde des affaires et le droit. En effet, les « annotations contractuelles » et les « annotations juridiques » figurent parmi les premières formes de contrôle de version et sont encore utilisées dans ces domaines avec différents degrés de sophistication. Les techniques les plus sophistiquées commencent à être employées pour le suivi électronique des modifications apportées aux fichiers CAO (voir la gestion des données produit ), remplaçant ainsi la mise en œuvre électronique « manuelle » du contrôle de version traditionnel
Dans le développement de jeux
Le développement de jeux vidéo implique souvent de volumineux fichiers binaires et la collaboration d'équipes pluridisciplinaires. Par conséquent, les studios de jeux utilisent des systèmes de contrôle de version prenant en charge les fichiers binaires volumineux, le verrouillage des fichiers et une synchronisation rapide. Parmi les outils courants figurent Perforce et plusieurs systèmes plus récents basés sur le cloud.
Modèles de gestion des sources
Les systèmes de contrôle de version traditionnels utilisent un modèle centralisé où toutes les fonctions de contrôle de version sont exécutées sur un serveur partagé . Si deux développeurs tentent de modifier le même fichier simultanément, sans mécanisme de gestion des accès, ils risquent d'écraser le travail de l'autre. Les systèmes de contrôle de version centralisés résolvent ce problème grâce à deux modèles de gestion des sources : le verrouillage des fichiers et la fusion des versions.
opérations atomiques
La plupart des systèmes de contrôle de version permettent à plusieurs développeurs de modifier simultanément un même fichier. Le premier développeur à enregistrer ses modifications dans le dépôt central obtient toujours gain de cause. Le système peut offrir des fonctionnalités permettant de fusionner les modifications ultérieures dans le dépôt central et de préserver les modifications du premier développeur lorsque d'autres développeurs enregistrent leurs travaux.
La fusion de deux fichiers peut s'avérer très délicate et n'est généralement possible que si la structure des données est simple, comme pour les fichiers texte . La fusion de deux fichiers image peut ne pas produire de fichier image. Le second développeur qui valide les fichiers devra veiller à la compatibilité des modifications et s'assurer que l'opération de fusion n'introduit pas d' erreurs logiques . Ces problèmes limitent l'utilisation des fusions automatiques ou semi-automatiques aux seuls documents texte simples, sauf si un plugin de fusion spécifique est disponible pour ces types de fichiers.
Le concept d' édition réservée peut fournir un moyen optionnel de verrouiller explicitement un fichier pour un accès en écriture exclusif, même lorsqu'une fonctionnalité de fusion existe.
Lignes de base, étiquettes et balises
La plupart des outils de gestion de versions n'utilisent qu'un seul de ces termes similaires (ligne de base, étiquette, balise) pour désigner l'action d'identifier un instantané (« étiqueter le projet ») ou l'enregistrement de l'instantané (« essayez avec la ligne de base X »). Généralement, un seul de ces termes (ligne de base , étiquette ou balise) est utilisé dans la documentation ou les discussions ; ils peuvent être considérés comme synonymes.
Dans la plupart des projets, certains instantanés sont plus importants que d'autres, comme ceux utilisés pour indiquer les versions publiées, les branches ou les étapes clés.
Lorsque les termes « ligne de base » et « étiquette » ou « tag » sont utilisés ensemble dans le même contexte, « étiquette » et « tag » font généralement référence au mécanisme de l’outil permettant d’identifier ou d’enregistrer l’instantané, et « ligne de base » indique l’importance accrue de toute étiquette ou de tout tag donné.
La plupart des discussions formelles sur la gestion de la configuration utilisent le terme de référence .