Den styring af versioner (i engelsk : versionsstyring eller revision kontrol ) består i at forvalte alle versioner af en eller flere filer (generelt i teksten ). I det væsentlige anvendt inden for oprettelse af software , vedrører det primært styring af kildekoder .
Denne aktivitet er kedelig og relativt kompleks, softwaresupport er næsten afgørende. Til dette formål er der forskellige version management software, som, selvom de har fælles koncepter, hver har deres eget ordforråd og deres egne anvendelser. For eksempel er der en rudimentær versioneringsmekanisme i Wikipedia : for hver artikel er historikken tilgængelig ved at klikke på linket Vis historik ; hver linje er en version af artiklen. Et sådant system er lineært i modsætning til mere detaljeret indholdsstyring ifølge en træstruktur.
Efterhånden som softwaren udvikler sig, kaldes hvert trin i fremskridt en version (eller revision ). De forskellige versioner er nødvendigvis forbundet via modifikationer ( diff eller patch ): en modifikation er et sæt tilføjelser, modifikationer og sletning af data.
Skematisk vil vi gå fra version N til version N + 1 ved at anvende en ændring M. Version management software anvender eller fjerner disse ændringer en efter en for at give den ønskede version af filen.
Udtrykket ”revision” foretrækkes undertiden for ikke at forveksle versionen af en fil og versionen af en software , som er et distributionsstadium i “færdig” form, det vil sige hovedsageligt binært.
En modifikation udgør derfor udviklingen mellem to versioner. Vi kan derfor tale om forskellen mellem to versioner såvel som om ændringer, der fører til en ny version.
Vi bruger normalt versionering til et sæt filer, der udgør et projekt. Som et resultat er det almindeligt at tale om ændringer til en enkelt fil og om et ændringssæt, når det drejer sig om projektet (og derfor om flere filer). Faktisk udvikler de to sig ikke i samme hastighed.
For at illustrere, lad os tage eksemplet med en software kaldet "Toto". Den består af filer A, B og C. Version 1.0 af “Toto” svarer til version 1.0 af hver af filerne. Lad os indrømme, at tilføjelsen af en funktionalitet til "Toto" kræver ændring af A og C. Lad os præsentere situationen ved hjælp af en tabel
versioner af "Toto" | versioner af A | versioner af B | versioner af C |
---|---|---|---|
1.0 | 1.0 | 1.0 | 1.0 |
1.1 | 1.1 | 1.1 |
Fra et projektperspektiv er ændringerne til A og C en del af den samme pakke.
Filerne, der er versioneret på denne måde, stilles til rådighed i et lager , det vil sige et lagerplads, der administreres af version management software .
For at kunne foretage ændringer skal udvikleren først lave en lokal kopi af de filer, de ønsker at ændre, eller af hele arkivet. Afhængigt af versionskontrolsystemer kan nogle filer være låst eller skrivebeskyttet for alle eller for bestemte personer.
Udvikleren foretager sine ændringer og udfører sine første tests lokalt, uafhængigt af de ændringer, der er foretaget i lageret på grund af samtidig arbejde fra andre udviklere. Han skal derefter foretage en forpligtelse (en "indsendelse"), det vil sige indsende sine ændringer, så de gemmes i arkivet. Det er her, der kan opstå konflikter mellem, hvad udvikleren ønsker at indsende, og de ændringer, der er foretaget siden den sidste lokale kopi. Disse konflikter skal løses ( flette ) for at programrettelsen kan accepteres i arkivet.
Når divergerende ændringer sker uden konflikt, oprettes grene . At ønsker at samle to grene er en sammensmeltning af grene.
Filialer bruges til at tillade:
Rettelserne til den sidste version skal foretages på bagagerummet .
I tilfælde af teamudvikling, især hvis de er spredt over hele verden, er det nødvendigt at dele en fælles arbejdsbase, og det er hele pointen med versionstyringssystemer. Det er dog også nødvendigt at sikre, at udviklingsholdene koordineres ved hjælp af kommunikationsværktøjer, software til problemsporing , en dokumentationsgenerator og / eller projektstyringssoftware .
Det er ikke ualmindeligt, at nogle ændringer er modstridende (f.eks. Når to personer har foretaget forskellige ændringer i den samme del af en fil). Dette kaldes en modifikationskonflikt, fordi software til versionstyring ikke er i stand til at vide, hvilken af de to ændringer, der skal anvendes.
Den konkurrence kontrol (i) , for at undgå sådanne konflikter modifikationer er et klassisk problem i datalogi: det findes for eksempel i ledelsessystemer database eller systemprogrammeringen . Det kan styres på to forskellige måder, som begge er blevet anvendt til versionering:
Med centraliseret versionssoftware, som CVS og Subversion (SVN), er der kun et version lager, der refererer til.
Dette forenkler versionadministration, men er begrænset til visse anvendelser, såsom at arbejde uden forbindelse til netværket, eller ganske enkelt når man arbejder på eksperimentelle eller anfægtede grene.
Decentraliseret versionstyring består i at se versionsstyringsværktøjet som et værktøj, der gør det muligt for alle at arbejde i deres eget tempo, ude af synkronisering med andre og derefter tilbyde en måde for disse udviklere at udveksle deres respektive arbejde. Der er faktisk flere arkiver til den samme software. Dette system bruges i vid udstrækning af gratis software .
F.eks. Er GNU Arch , Git og Mercurial decentraliseret version management software.
Fordele ved decentral ledelse:
Ulemper:
Softwareudviklingsforfatter Joel Spolsky beskriver decentraliseret versionstyring som “muligvis det største fremskridt inden for softwareudviklingsteknologier i de [sidste] ti år. ".
Dette består i at knytte et navn til en given version. For nogle versioneringsværktøjer (som CVS ), der håndterer versioner med lav granularitet (masser af ubetydelige ændringer), er dette en måde at nemt finde en meningsfuld version på.
Til teamwork giver nogle version management software værktøjer til at kommunikere.
For eksempel bruges låsning til at forhindre ændring af en fil, mens meddelelsen udsender en advarsel til alle andre medlemmer, når en fil ændres.
Revision Proposal (PR) er handlingen med at bede ejeren af henvisningslageret om at tage hensyn til de ændringer, du har foretaget i dit gaffelregister eller lokale lager, som du vil dele til henvisningsregisteret.
Versionskontrolsoftware er rigelig. Under UNIX var der SCCS, som gav anledning til en anden gratis software : GNU RCS, som blev en de facto-standard. CVS , der administrerer filtræer bedre end RCS, er blevet ekstremt populært i den fri softwareverden og i virksomhederne på grund af sin enkelhed.
De blev gradvist erstattet af mere moderne alternativer, såsom Subversion og derefter Git , som nu er mere udbredt end deres forgængere. Anden software, såsom Bazaar eller Mercurial, er alternativer til Git, som har betydelige brugerbaser.
I den proprietære verden, ClearCase og Synergy (fra IBM ), er Serena Dimensions de mest almindelige . Der er også Visual Source Safe og Team Foundation Server (fra Microsoft ), der integreres med Visual Studio . Der er også AlienBrain , der ofte bruges i videospilverdenen, fordi den er særligt velegnet til styring af grafik og lydressourcer . Den WinDev AGL (fra PCSoft ) bruger sin egen versionsstyring implementering.