Versiohallinta

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

Koneenpiirustuksessa versiohallinta on ollut normaali menettelytapa jo vuosikymmeniä.

Versiohallinta tietotekniikassa 
Laajempi esitys artikkelissa Ohjelmiston versiohallinta

Tietotekniikassa versiohallintaa käytetään yleisesti ohjelmistoja kehitettäessä.  Hyvän toimintatavan mukaan lähdekoodi pyritään pitämään versiohallinnassa, jossa muilla kehittäjillä on siihen pääsy ja päällekkäisten muutosten mahdollisuus vähenee. Ohjelmiston versiohallinta tallentaa myös tiedostojen aikaleiman ja tiedoston tallentajan nimen, joka on tärkeää jo tietoturvankin kannalta. Versiohallinnassa voidaan määrittää tietty versio ohjelmasta koostuvaksi tiettyjen tiedostojen tietyistä versiosta, ja kehittää eri versioita rinnan.

Suuremmissa järjestelmissä on yleistä pitää myös konfiguraatiotiedostoja versiohallinnassa, jolloin muutoksia ja niiden tekijöitä voidaan seurata.

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

Versionhallintajärjestelmät

SCCS vuodelta 1972 on yksi ensimmäisistä 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ä.

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)

Katso myös 

 DeltaV
 Metatieto
 Hajautettu versionhallintajärjestelmä

Lähteet

Aiheesta muualla