Versioonihaldus

Versioonihaldus on tarkvara, dokumentide ja muu failidena säilitatava info muudatuste haldamine. Kõige lihtsamal tasemel versioonihaldust saab teostada käsitsi, tehes failidest aeg-ajalt varukoopiaid, kuid veakindlam moodus on kasutada spetsiaalset versioonihaldustarkvara. Viimased on eriti levinud tarkvaraarenduses, kus paljud programmeerijad töötavad korraga samade failidega.
Iga versioonihaldustarkvara keskseks komponendiks on repositoorium ehk hoidla – see on andmebaas, kus säilitatakse hallatava projekti kõiki redaktsioone. Vastavalt hoidla asukohale jagatakse versioonihaldustarkvarad tsentraliseerituteks ja hajutatuteks.

Tsentraliseeritud mudel

Tsentraliseeritud arhitektuuriga süsteemides asub hoidla keskses serveris. Töö tegemiseks tehakse repositooriumist kõigepealt väljavõte, töödeldakse faile ning salvestatakse failide seis uue sissekandena. Vältimaks konflikte, kui mitu kasutajat muudavad ühte ja sama faili, kasutatakse kas failide lukustamist või versioonide mestimist:

Failide lukustamine

Lukustamise puhul valib arendaja enne töö alustamist failid, mida ta muuta kavatseb, mispeale versioonihaldustarkvara ei luba teistel kasutajatel nendes failides muudatusi teha seni kuni lukustaja on töö lõpetanud.
Kuigi lukustamine pakub kaitset konfliktide vastu, on sel ka suur puudus: see pärsib teiste arendajate tööd, kes tahaksid samuti parajasti lukustatud failiga tööd teha. Eriti tõsised probleemid tekivad juhul kui mõni arendaja lukustab suurema hulga faile või kui fail lukustatakse pikemaks ajaperioodiks (näiteks unustab töötaja enne puhkusele sõitmist luku vabastada). Lisaks kaasneb lukustamisega oht sattuda "tupikusse" – olukorda, kus kasutaja Anu on lukustanud faili A kuid peab töö lõpetamiseks tegema veel muudatuse failis B, mille on aga lukustanud kasutaja Bert, kes omakorda vajab töö lõpetamiseks faili A. Kõik need kirjeldatud probleemid tulenevad suuresti sellest, et arendajatel on raske ette aimata, milliseid faile neil on tarvis probleemi lahendamiseks muuta – lukustades liiga palju, pärsivad nad teiste arendajate tööd, lukustades aga liiga vähe, võivad sattuda ootama teiste taha või hoopis tupikusse.
Kirjeldatud probleemide tõttu kasutab enamik tsentraliseeritud versioonihaldussüsteeme tänapäeval lukustamise asemel mestimist.

Versioonide mestimine

Selle mudeli puhul saab mitu kasutajat muuta samu faile ühel ajal. Arendaja, kes saab oma muudatustega esimesena valmis, saab teha sissekande repositooriumisse ilma igasuguste probleemideta. Järgmine arendaja peab seejärel uuendama oma töökataloogi repositooriumist uueks versiooniks ning ühendama ehk mestima oma muudatused eelmise kasutaja tehtutega. Enamasti teevad arendajad muudatusi faili erinevates osades, sel juhul saab versioonihaldustarkvara ise automaatselt mestida.
Mestimisel baseeruvate süsteemide teerajajaks oli Concurrent Versions System (CVS), millest sai levinuim versioonihaldus vaba tarkvara projektide seas, kus lukustamise kasutamine oli eriti problemaatiline. Tänapäeval on levinumaks tsentraliseeritud süsteemiks CVS-i järeltulija Subversion.

Hajutatud mudel

Hajutatud arhitektuuri puhul on igal kasutajal kogu versioonide andmebaasist oma isiklik koopia. Töö tegemiseks kloonib iga kasutaja endale kogu repositooriumi, kuhu tehakse lokaalseid sissekandeid ja mida sünkroonitakse teiste kasutajate repositooriumitega. Tehtud muudatuste jagamiseks teiste kasutajatega lükatakse muudatused serverina käituvasse repositoorumi, kustkohast teised neid alla laadida saavad.