Article de reference

Contrôle de version

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, organi...

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

. Département de la Défense des États-Unis. 9 juin 1997. .Ce système de contrôle permettait implicitement de revenir à un état antérieur de la conception, notamment en cas d'impasse technique lors du développement. Un tableau de révision servait à consigner les modifications apportées. De plus, les zones modifiées du dessin étaient mises en évidence par des nuages ​​de révision.

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 .

Contrôle de version distribué

Le système de branches simplifie le déploiement, la maintenance et le développement

La gestion des branches facilite le déploiement et la gestion des versions . La création et la fusion de branches, la production, l'empaquetage et l'étiquetage des correctifs de code source , ainsi que l'application aisée de ces correctifs aux bases de code, simplifient la maintenance et le développement simultané des multiples bases de code associées aux différentes étapes du processus de déploiement : développement, tests, préproduction, production, etc.

Atténuation des dommages, responsabilisation et amélioration des processus et de la conception

La tenue de registres assurée par le contrôle de version, qui permet de suivre qui a fait quoi, quand, pourquoi et comment, peut entraîner une atténuation des dommages, une responsabilisation, une amélioration des processus et de la conception, ainsi que d'autres avantages.

En cas de bogues, la connaissance de l'historique des modifications facilite la limitation des dégâts et la récupération en permettant d'identifier les problèmes existants, leur durée et en déterminant leur étendue et les solutions possibles. Les versions précédentes peuvent être installées et testées afin de vérifier les conclusions tirées de l'examen du code et des messages de commit.

Simplifie le débogage

Le contrôle de version simplifie considérablement le débogage. L'application d'un cas de test à plusieurs versions permet d'identifier rapidement la modification à l'origine d'un bogue. Le développeur n'a plus besoin de connaître l'intégralité du code source et peut se concentrer sur la portion de code ayant introduit le problème.

Améliore la collaboration et la communication

Le contrôle de version améliore la collaboration de plusieurs manières. Comme il permet d'identifier les modifications conflictuelles, c'est-à-dire les modifications incompatibles apportées aux mêmes lignes de code, la coordination entre les développeurs est moins nécessaire.

Le regroupement des commits, des branches et de tous les messages de commit et étiquettes de version associés améliore la communication entre les développeurs, aussi bien instantanément que sur le long terme. Une meilleure communication, qu'elle soit immédiate ou différée, peut optimiser le processus de revue de code, le processus de test et d'autres aspects essentiels du développement logiciel.

Intégration

Certains outils de contrôle de version plus avancés offrent de nombreuses autres fonctionnalités, permettant une intégration plus poussée avec d'autres outils et processus d'ingénierie logicielle.

environnement de développement intégré

Des plugins sont souvent disponibles pour les environnements de développement intégrés (IDE) tels qu'Oracle JDeveloper , IntelliJ IDEA , Eclipse , Visual Studio , Delphi , NetBeans IDE , Xcode et GNU Emacs (via vc.el). Les prototypes de recherche avancée génèrent des messages de commit appropriés.

Terminologie courante

La terminologie peut varier d'un système à l'autre, mais certains termes couramment utilisés comprennent :

Ligne de base

Un ensemble de fichiers sous contrôle de version peut être ramifié ou dupliqué à un moment donné afin que, à partir de ce moment, deux copies de ces fichiers puissent évoluer à des vitesses différentes ou de manières différentes, indépendamment l'une de l'autre.

Changement

Une modification (ou diff , ou delta ) représente une modification spécifique apportée à un document sous contrôle de version. Le niveau de détail de la modification considérée comme telle varie selon les systèmes de contrôle de version.

Liste des modifications

Dans de nombreux systèmes de contrôle de version avec des commits atomiques à modifications multiples, une liste de modifications (ou CL ), un ensemble de modifications , une mise à jour ou un correctif identifie l'ensemble des modifications apportées lors d'un seul commit. Cela peut également représenter une vue séquentielle du code source, permettant ainsi d'examiner le code source à partir de n'importe quel identifiant de liste de modifications.

Vérifier

Extraire (ou copier ) un fichier consiste à créer une copie de travail locale à partir du dépôt. Un utilisateur peut spécifier une révision particulière ou obtenir la dernière version. Le terme « extraction » peut également être utilisé comme nom pour désigner la copie de travail. Lorsqu'un fichier a été extrait d'un serveur de fichiers partagé, il ne peut plus être modifié par d'autres utilisateurs. C'est un peu comme un hôtel : lorsque vous quittez l'établissement, vous n'avez plus accès à ses services.

Cloner

Le clonage consiste à créer un dépôt contenant les modifications d'un autre dépôt. Cela équivaut à effectuer un push ou un pull dans un dépôt vide (nouvellement initialisé). Deux dépôts sont dits « clones » s'ils sont synchronisés et contiennent les mêmes modifications.

S'engager (nom)

Dans les logiciels de gestion de versions, un changeset (également appelé commit ou révision ) est un ensemble de modifications regroupées, accompagnées de métadonnées. Un changeset décrit les différences exactes entre deux versions successives dans le référentiel de modifications du système de gestion de versions. Les changesets sont généralement traités comme une unité atomique , un ensemble indivisible, par les systèmes de gestion de versions. Il s'agit d'un modèle de synchronisation .

S'engager (verbe)

La plupart des logiciels de gestion de versions utilisent la compression delta , qui ne conserve que les différences entre les versions successives des fichiers. Cela permet un stockage plus efficace de nombreuses versions différentes d'un même fichier.

Flux dynamique

Un flux dans lequel certaines ou toutes les versions de fichiers sont des copies conformes des versions du flux parent.

Exporter

L'exportation consiste à récupérer les fichiers du dépôt. Elle est similaire à l'extraction, à la différence qu'elle crée une arborescence de répertoires vierge, sans les métadonnées de contrôle de version utilisées dans une copie de travail. Cette opération est souvent effectuée avant la publication du contenu, par exemple.

Aller chercher

Voir tirer .

Intégration en aval

Le processus de fusion des modifications apportées à la branche principale dans une branche de développement (fonctionnalité ou équipe).

Tête

Également parfois appelée « tip » , cette fonction désigne la dernière modification apportée à la branche principale ou à une branche. La branche principale et chaque branche ont leur propre « head », bien que le terme « HEAD » soit parfois utilisé de manière imprécise pour désigner la branche principale.

Importer

L'importation consiste à copier pour la première fois une arborescence de répertoires locaux (qui n'est pas actuellement une copie de travail) dans le dépôt.

Initialiser

Pour créer un nouveau dépôt vide.

deltas entrelacés

Certains logiciels de contrôle de version utilisent les deltas entrelacés , une méthode qui permet de stocker l'historique des fichiers texte de manière plus efficace qu'en utilisant la compression delta .

Étiquette

Voir l'étiquette .

Verrouillage

Une fusion ou une intégration est une opération qui consiste à appliquer deux ensembles de modifications à un fichier ou à un ensemble de fichiers. Voici quelques exemples :

Promouvoir

L’action de copier le contenu d’un fichier d’un emplacement moins contrôlé vers un emplacement plus contrôlé. Par exemple, de l’espace de travail d’un utilisateur vers un dépôt, ou d’un flux vers son parent.

Tirer, pousser

Copie les modifications d'un dépôt vers un autre. L'opération « pull » est initiée par le dépôt destinataire, tandis que l'opération « push » est initiée par la source. Le terme « fetch » est parfois utilisé comme synonyme de « pull » , ou pour désigner une opération de « pull » suivie d'une mise à jour .

Demande de fusion

Les contributions à un dépôt de code source utilisant un système de contrôle de version distribué se font généralement par le biais d'une demande de fusion (ou pull request). Le contributeur demande au responsable du projet d'intégrer sa modification du code source, d'où le nom de « pull request ». Le responsable doit fusionner la demande de fusion pour que la contribution soit intégrée au code source.

Le développeur crée une demande de fusion pour informer les responsables de la maintenance d'une nouvelle modification ; un fil de commentaires est associé à chaque demande de fusion. Cela permet une discussion ciblée des modifications de code . Les demandes de fusion soumises sont visibles par toute personne ayant accès au dépôt. Une demande de fusion peut être acceptée ou refusée par les responsables de la maintenance.

Une fois la demande de fusion examinée et approuvée, elle est intégrée au dépôt. Selon le flux de travail établi, le code peut nécessiter des tests avant d'être inclus dans la version officielle. C'est pourquoi certains projets disposent d'une branche spéciale pour l'intégration des demandes de fusion non testées. D'autres projets exécutent une suite de tests automatisés sur chaque demande de fusion, à l'aide d'un outil d'intégration continue , et le relecteur vérifie que tout nouveau code bénéficie d'une couverture de test adéquate.

Dépôt

Dans les systèmes de contrôle de version, un dépôt est une structure de données qui stocke les métadonnées d'un ensemble de fichiers ou d' une arborescence de répertoires . Selon que le système de contrôle de version utilisé soit distribué, comme Git ou Mercurial , ou centralisé, comme Subversion , CVS ou Perforce , l'ensemble des informations du dépôt peut être dupliqué sur le système de chaque utilisateur ou conservé sur un serveur unique . Parmi les métadonnées d'un dépôt figurent notamment un historique des modifications, un ensemble d'objets de commit et un ensemble de références à ces objets, appelées têtes .

Résoudre

L'intervention de l'utilisateur pour résoudre un conflit entre différentes modifications apportées à un même document.

Intégration inverse

Le processus de fusion des différentes branches d'équipe dans la branche principale du système de gestion de versions.

Révision et version

Une version correspond à toute modification de forme. Dans SVK, une révision représente l'état, à un instant donné, de l'ensemble de l'arborescence du dépôt.

Partager

Le partage consiste à rendre un fichier ou un dossier accessible simultanément à plusieurs branches. Lorsqu'un fichier partagé est modifié dans une branche, la modification est répercutée dans les autres branches.

Flux

Un conteneur pour fichiers ramifiés ayant une relation connue avec d'autres conteneurs similaires. Les flux forment une hiérarchie ; chaque flux peut hériter de diverses propriétés (telles que les versions, l'espace de noms, les règles de flux de travail, les abonnés, etc.) de son flux parent.

Étiqueter

Le tronc est la seule ligne de développement qui n'est pas une branche (parfois aussi appelée ligne de base, ligne principale ou maître ).

Mise à jour

Une mise à jour (ou synchronisation , mais ce terme peut aussi désigner une opération combinant envoi et récupération ) fusionne les modifications apportées au dépôt (par d'autres personnes, par exemple) dans la copie de travail locale . Le terme « mise à jour » est également utilisé par certains outils de gestion de configuration (CM+, PLS, SMS) pour désigner le concept de paquet de modifications (voir la liste des modifications ). Il est synonyme d' extraction dans les systèmes de contrôle de version qui exigent que chaque dépôt possède une seule copie de travail (ce qui est courant dans les systèmes distribués).

Déverrouillage

Déverrouillage.

Copie de travail

La copie de travail est la copie locale des fichiers d'un dépôt, à un instant ou une révision spécifique. Toute modification apportée aux fichiers d'un dépôt est initialement effectuée sur une copie de travail, d'où son nom. Conceptuellement, il s'agit d'un environnement isolé .

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index