Versionhallinta

Versionhallinta () on tekniikka, jolla pidetään kirjaa tiedostoihin (ja joskus myös paperiasiakirjoihin) tehdyistä muutoksista ja säilötään niiden vanhemmat versiot. Versionhallinnan kohteina voivat olla esimerkiksi CAD-piirustukset, erilaiset dokumentit tai ohjelmoinnissa lähdekoodi.

Lähdekoodin hallinnalla () viitataan usein versiohallintaan.

Koneenpiirustuksessa versiohallinta on ollut normaali menettelytapa vuosikymmeniä.

 Versionhallinta tietotekniikassa 
Tietotekniikassa versiohallintaa käytetään yleisesti ohjelmistoja kehitettäessä. Ilman versionhallintaa on vaikeaa seurata eri kehittäjien tekemiä muutoksia ja ristiriitojen havaitseminen on vaikeampaa. Versionhallinnan sivuvaikutusta sanotaan passiiviseksi kommunikaatioksi, jolloin koko kehittäjäryhmä voi seurata etenemistä ja tarvittaessa palata taaksepäin. Merkittävä etu on tarvittavan viestinnän väheneminen ja päällekkäisyydet voidaan käsitellä ennen julkaisua.

Versionhallintajärjestelmä tallentaa tiedostojen sisällön lisäksi luomiset ja poistamiset sekä uudelleen nimeämiset. Muutoksista tallennetaan tekijä, ajanhetki sekä muutokseen liittyviä merkintöjä ja huomioita kuten perustelut muutoksen tekemiselle.

Useissa avoimen lähdekoodin ohjelmistoprojekteissa versiohallinta on yleisesti myös kehittäjäryhmän ulkopuolelta luettavissa, jolloin käyttäjillä on mahdollisuus noutaa välittömästi uusimmat muutokset ja osallistua ohjelman kehittämiseen.

Versionhallintajärjestelmät
SCCS on yksi ensimmäisistä nimenomaan lähdekoodin hallintaan tarkoitetuista järjestelmistä.

Versionhallintajärjestelmät voidaan jakaa kolmeen sukupolveen seuraavasti:
 yksittäiset tiedostot, ei verkottamista: RCS, SCCS
 useampia tiedostoja, keskitetyt palvelimet: CVS, Subversion
 muutosjoukkoja, hajautetut palvelimet: Git, GNU Bazaar, Mercurial

Ensimmäisen sukupolven versiohallintajärjestelmät käsittelivät tiedostoja yksi kerrallaan. Rinnakkaisuusmalli perustui lukituksiin, jolloin vain yksi henkilö pystyi muokkaamaan tiedostoa kerrallaan.

Toinen sukupolvi osaa käsitellä useampia tiedostoja ja tukee verkottumista. Rinnakkaisuusmalli perustui muutoksien yhdistämiseen ennen tallettamista.

Kolmas sukupolvi tukee muutosjoukkoja (), jossa muutokset ovat jakamattomia useamman tiedoston kattavia muutoksia: tietty muutos voi vaatia muutoksen useampaan tiedostoon yhtä aikaa eikä ole sallittua jakaa eri päivityksiin. Muutosten yhdistäminen () ja muutosten tallettamien () ovat erillisiä toimintavaiheita. Rinnakkaisuusmalli sallii tallettaa muutokset ensin ja päättää jälkikäteen yhdistämisestä. Git seuraa tilannekuvia (), joka eroaa varhaisien järjestelmien tavasta seurata tehtyjä tiedostokohtaisia muutoksia (delta).

Versionhallintajärjestelmien tavoitteita ovat:
 mahdollistaa ihmisten työskentely samanaikaisesti, ei vuorotellen
 kun useampi ihminen työskentelee samanaikaisesti, muutosten ei pitäisi aiheuttaa konflikteja
 halutaan säilöä kaikki versiot kaikesta (mikä muutos oli, kuka teki, milloin ja miksi)

 Konfiguraationhallinta 
Ohjelmiston konfiguraationhallinta (, SCM) sisältää myös muuta metatietoa ja käytetään lähdekoodin versionhallinnan rinnalla. Laajemmin konfiguraationhallinta sisältää tuotteen elinkaaren aikaiset ominaisuudet.

 Katso myös 

 DeltaV
 Metatieto
 Hajautettu versionhallintajärjestelmä

 Lähteet 

 Aiheesta muualla