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.

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