Hajautettu versionhallintajärjestelmä

Hajautettu versionhallintajärjestelmä () on ohjelmiston versionhallintaan käytettävä järjestelmä, joka ei riipu yksittäisestä palvelimesta. Hajautetun versionhallintajärjestelmän vastakohta on keskitetty versionhallintajärjestelmä.

Ominaisuuksiin kuuluu mahdollisuus noutaa, muokata ja yhdistää lähdekoodi eri tietovarastojen () välillä ilman keskitettyä versioiden synkronointia. Vaihtoehtoisesti järjestelmässä voi olla useita palvelimia. Olennainen ajatus toiminnassa on että jokainen työversio (working copy) on myös itsenäinen tietovarasto. Yksittäisten tiedostojen sijaan järjestelmä seuraa muutosjoukkoja (), jotka voivat kattaa useamman tiedoston muutokset yhteenkuuluvana muutoksena.

Konsepti perustuu havainnolle, että laajamittaisessa kehityksessä lähdekoodista on useita rinnakkaisia versioita esimerkiksi eri alustoilla, osastoilla, ominaisuuksilla tai julkaisuversioilla.
pienoiskuva|oikea|Havainnekuva hajautetun versionhallintajärjestelmän toimintamallista.

Ensimmäinen hajautettu versionhallintajärjestelmä oli BitKeeper, joka inspiroi projekteja kuten GNU Arch, Darcs, Monotone ja Git.

Linus Torvalds kertoo hajautetun järjestelmän eduksi, että politikointi käyttäjäoikeuksista poistuu: jokaisella käyttäjällä on oma tietovarasto.
Hajautetussa versionhallinnassa ei ole yksittäistä vikapaikkaa kuten keskitetyssä järjestelmässä: jokainen työkopio on täysi kopio tietovarastosta ja siten sen varmuuskopio. Yksittäiselle käyttäjälle hajautetut työkalut ovat lähes aina nopeampia kuin keskitetyt työkalut. Linux-ytimen kehitysmallissa muutokset kulkevat "portinvartijoina" toimivien alijärjestelmien ylläpitäjien kautta, jotka pitävät omaa lähdekoodipuuta ja lähettävät Torvaldsille muutoksia pääsarjan ytimeen liitettäväksi.

Hajautettujen versionhallintajärjestelmien merkittävä ominaisuus on skaalautuvuus: suurissa projekteissa suorituskyky on merkittävä ominaisuus. Torvalds on kutsunut toimintamallia luottamusverkoksi (), joka on sama malli kuin tietoturva- ja salausohjelmistoissa.

Eräät hajautetut versionhallintajärjestelmät ovat kolmannen sukupolven versionhallintajärjestelmiä.

 Toimintamallit 
Hajautettu versionhallintajärjestelmä kuten Git tukee eri toimintamalleja versiohallinnassa kuten keskitetty työmalli, integraationhoitajamalli ja hyväntahtoinen diktaattorimalli, joissa muutokset etenevät yhden tai useamman tietovaraston kautta. Koska Git tukee useampia tietovarastoja mahdollisia toimintamalleja on useita.

Keskitetyssä mallissa kaikki kehittäjät tallentavat muutokset samaan jaettuun tietovarastoon kuten keskitetyssä versionhallintajärjestelmässä.

Integraationhoitajamallissa kehittäjät hakevat yhdestä hyväksikatsotusta tietovarastosta ja työntävät muutokset omaan tietovarastoon. Kehittäjä lähettää integraationhoitajalle pyynnön hakea muutokset kehittäjän tietovarastosta, yhdistää muutokset paikallisesti ja työntää hyväksikatsottuun tietovarastoon. 

Hyväntahtoinen diktaattorimalli lisää kerroksen luutnantteja, joilla on yksi integraationhoitaja jota kutsutaan hyväntahtoiseksi diktaattoriksi. Tavalliset kehittäjät työskentelevät omassa aiheenmukaisessa haarassaan ja hakevat hyväksikatsotusta tietovarastosta: tavalliset kehittäjät perustavat muutokset hyväksikatsottuun versioon. Luutnantit hakevat kehittäjien aihekohtaisesta haarasta ja yhdistävät muutokset, jotka diktaattori hakee ja yhdistää hyväksikatsottuun tietovarastoon, josta kaikki hakevat. Mallia käytetään hyvin suurissa projekteissa joissa on satoja henkilöitä yhteistyössä.

 Hajautetut versionhallintajärjestelmät 
Hajautettuja versionhallintajärjestelmiä ovat:
 Bitkeeper
 Git
 Mercurial 
 GNU Bazaar
 Darcs
 GNU arch
 Monotone

 Katso myös 
 Versionhallintajärjestelmät
 Luettelo versionhallintajärjestelmistä

 Lähteet 

 Aiheesta muualla 
 Comments on Open Source Software / Free Software (OSS/FS) Software Configuration Management (SCM) / Revision-Control Systems 

Luokka:Versionhallinta