Versionhallintajärjestelmät

Antsawikistä
Siirry navigaatioon Siirry hakuun

Versionhallintajärjestelmiä versiohallintaan on useita, sekä avoimen lähdekoodin että kaupallisia, suljettuja toteutuksia.

Myös eräiden käyttöjärjestelmien tiedostojärjestelmä tukee läpinäkyvästi tiedostojen versiointia (engl. Versioning file system). Tässä ei ole niitä käsitelty.

Osa järjestelmistä on aloittanut suljettuna kaupallisena toteutuksena ja myöhemmin lähdekoodit on julkaistu.

Nykyinen suuntaus on kehittää hajautettuja versionhallintajärjestelmiä, joita edustavat Git, Mercurial ja Bazaar.

Järjestelmien luokittelu[muokkaa | muokkaa wikitekstiä]

Versionhallintajärjestelmät voidaan jakaa kolmeen sukupolveen seuraavasti:[1]

  1. yksittäiset tiedostot, ei verkottamista: RCS, SCCS
  2. useampia tiedostoja, keskitetyt palvelimet: CVS, Subversion
  3. muutosjoukkoja, hajautetut palvelimet: Git, GNU Bazaar, Mercurial

Ensimmäisen sukupolven versiohallintajärjestelmät käsittelivät tiedostoja yksi kerrallaan.

Toinen sukupolvi osaa käsitellä useampia tiedostoja ja tukee verkottumista.

Kolmas sukupolvi tukee muutosjoukkoja (engl. changeset), jossa muutokset ovat jakamattomia useamman tiedoston kattavia muutoksia: tietty muutos voi vaatia muutoksen useampaan tiedostoon yhtä aikaa eikä ole sallittua jakaa eri päivityksiin.

SCCS[muokkaa | muokkaa wikitekstiä]

Source Code Control System (SCCS) on yksi varhaisista versiohallintajärjestelmistä. Se on kehitetty vuonna 1972 Bell Labs:ssa IBM System/370 tietokoneelle.[2]

SCCS:lle on tehty avoimen lähdekoodin korvike GNU CSSC sekä POSIX-yhteensopiva versio.[3][4]

RCS[muokkaa | muokkaa wikitekstiä]

RCS on yhden käyttäjän vapaa versiohallintajärjestelmä.[5] Sen kehityksen aloitti Walter Tichy 1980-luvun alkupuolella Purduen yliopistossa Yhdysvalloissa. RCS on kehitetty Source Code Control Systemin (SCCS) pohjalta.[6] Siihen verrattuna RCS toimii tehokkaammin säilyttämällä kustakin tiedostosta uusimman version kokonaisuudessaan sekä aikaisemmista versioista vain niiden eroavaisuudet seuraavaan verrattuna. Hallittavat tiedostot voivat ohjelmakoodin lisäksi olla mitä tahansa dokumentteja.

RCS käyttää historiallista ja loogista versiointia. Versiointi on toteutettu puurakenteella tallentaen dokumenteista vain viimeisimmät versiot kokonaisuudessaan. Sivuhaaroista tallennetaan eroavaisuudet rekursiivisesti haarautumiskohdasta lähtien. Näin päähaaran uusin versio on nopeasti saatavilla, eikä uuden version lisääminen vaadi kuin sen tallentamisen sekä uuden deltan muodostamisen edeltävää versiota varten. Versioiden eroavaisuuksien tunnistamiseen käytetään diff-ohjelmaa.

Versioiden identifiointi tapahtuu RCS:ssä historiallisen versioinnin tapauksessa kuten aiemmin on kuvattu. Tasonumerointi toimii automaattisesti siten, että uusi versio saa yhtä suuremman numeron edelliseen verrattuna. Halutessaan käyttäjä voi suurempien muutoksien jälkeen kasvattaa myös julkaisunumeroa. Myös loogisessa versioinnissa eli puun haarautuessa, versiot tunnistetaan numeroiden perusteella. Jos esimerkiksi versiosta 1.3 luodaan haara, sille annetaan numero 1.3.1. Varsinaisen haaraan kuuluvan version tunnukseen kuuluu vielä neljäs numero, joka muodostetaan tasonumeroinnin tapaan. Haaran 1.3.1 versioita ovat esimerkiksi 1.3.1.1 ja 1.3.1.2. Jos versiosta 1.3 luodaan uusi, erillinen haara, se saa numeron 1.3.2.

RCS:n peruskäyttöön tarvitaan vain komennot ci ja co. Komento ci tiedosto.c lisää järjestelmään uuden tiedoston. Komennolla co tiedosto.c tiedoston voi hakea järjestelmästä muokattavaksi. Muokkauksen tuloksena syntynyt uusi versio lisätään puuhun komennolla ci tiedosto.c.

Jos RCS:llä on useita käyttäjiä, käyttäjän tulee aina lukita versio ottaessaan sen muokattavaksi. Tästä seuraa RCS:n suurin ongelma; kutakin tiedostoa voi muokata vain yksi käyttäjä kerrallaan, vaikka eri henkilöt muokkaisivat eri osia tiedostosta. Pakottavassa tilanteessa lukitus on mahdollista murtaa, mutta tästä seuraa helposti ongelmia.

Lisäksi RCS käsittelee vain yksittäisiä tiedostoja, vaikka useimmissa tapauksissa ohjelmiston versio muodostuu useiden lähdekooditiedostojen kokonaisuudesta. RCS ei myöskään tarjoa minkäänlaisia verkko-ominaisuuksia, vaan usean kehittäjän projektissa tiedostot tulee hakea siltä koneelta, jossa järjestelmä sijaitsee. Näin ollen RCS ei ole joustava järjestelmä suuremmissa usean kehittäjän projekteissa.

CVS[muokkaa | muokkaa wikitekstiä]

CVS on RCS:n pohjalle rakennettu vapaa monen käyttäjän versiohallintajärjestelmä. Järjestelmän kehitys lähti liikkelle Dick Grunen 1986 julkaisemista shell-skripteistä, jotka helpottivat RCS:n käyttöä. Nykyisessä järjestelmässä kyseistä koodia ei enää ole jäljellä, mutta CVS:n käyttämät konfliktinhallinta-algoritmit ovat pääosin sieltä peräisin. Varsinaisen CVS:n ensimmäisen version suunnitteli ja ohjelmoi C-kielellä Brian Berliner vuonna 1989.

CVS tallentaa tiedostojen versiot samaan tapaan kuin RCS, ja CVS:n ensimmäiset versiot itse asiassa käyttivät tähän RCS:n ominaisuuksia. CVS kuitenkin pitää kirjaa tiedostojen sijaintihakemistosta ja osaa yhdistää useita hakemistoja yhdeksi kokonaisuudeksi. Näin pystytään hallitsemaan yhtenäistä, useista tiedostoista koostuvaa projektia. Lisäksi CVS mahdollistaa yhteistoiminnallisen versioinnin, sillä revisiopuuhun luotu haara on myöhemmin mahdollista yhdistää päähaaraan.

CVS tekee eron version ja revision välillä. Revisiot ovat versioita yksittäisestä tiedostosta ja ne numeroidaan samaan tapaan kuin RCS:ssä. Versio sen sijaan tarkoittaa koko sovelluksen versiota, joka koostuu usean tiedoston revisioista. Tällainen versio voidaan määritellä esimerkiksi annettaessa sovellus asiakkaalle testattavaksi.

CVS ei estä useita kehittäjiä muokkaamasta samaa tiedostoa yhtä aikaa, vaan järjestelmä osaa yhdistää eri kehittäjien tekemät muutokset. 1990-luvun alussa järjestelmään lisättiin myös verkko-ominaisuudet, jolloin projektin tuotoksiin saattoi tarvittaessa päästä käsiksi kaikkialta Internetistä. Juuri näinä aikoina CVS saavutti runsaasti suosiota erityisesti vapaan ohjelmistonkehityksen piirissä.

Työskentely CVS:ää käyttäen tapahtuu niin sanotun kopioi-muokkaa-yhdistä -mallin mukaisesti (vrt. RCS:n käyttämä lukitse-muokkaa-vapauta -malli). Yksinkertaisimmillaan työskentelyyn kuuluu kolme vaihetta. Ensimmäisessä vaiheessa projektista ladataan niin sanottu työkopio lokaalille koneelle. Tätä tapahtumaa kutsutaan nimellä check out. Toisessa vaiheessa projektin työkopiota voidaan muokata vapaasti CVS:stä riippumatta ja kolmannessa vaiheessa työkopioon tehdyt muutokset kirjataan CVS:ään. Muutosten kirjaamista CVS:ään kutsutaan nimellä commit. Muutosten kirjaamisen jälkeen muutokset ovat näkyvissä kaikille projektin kehittäjille, jotka kukin kehittäjä voi edelleen päivittää omiin työkopioihinsa.

Subversion (SVN)[muokkaa | muokkaa wikitekstiä]

Pääartikkeli: Subversion

Subversion on vapaa versiohallintajärjestelmä, jonka tarkoitus on ennen kaikkea korjata CVS:ssä havaittuja puutteita ja lisätä CVS:stä puuttuvia, mutta yleisesti tarpeellisiksi koettuja ominaisuuksia. Subversion on rakennettu CVS:n pohjalta, minkä takia Subversionin toiminta ja käyttö ovat monella tapaa samantyylisiä CVS:ään verrattuna.

Subversion mahdollistaa hakemistojen, tiedostojen uudelleennimeämisten ja tiedostoihin liittyvän metadatan versioinnin. Näin esimerkiksi tiedoston nimen tai attribuuttien muuttaminen tulkitaan muutokseksi samaan tapaan kuin tiedoston sisällön muuttaminen.

Commit-toiminto tulee Subversionissa voimaan vasta kun toiminto on kokonaisuudessaan suoritettu. Toimintoa käsitellään yhtenä kokonaisuutena, joka saa oman versionumeronsa. Tämän seurauksena yksittäisillä muutoskerroilla tehtyjä muutoksia voidaan seurata kokonaisuutena.

Subversionissa versioiden tallentamiseen voi puhtaasti tiedostopohjaisen varaston sijaan käyttää myös BerkeleyDB-tietokantaa. Lisäksi Subversionissa on tehostettu loogiseen versiointiin liittyvää haarojen muodostamista ja käsittelyä, verkon yli tapahtuvaa toimintaa sekä binääritiedostojen käsittelyä.

GNU arch[muokkaa | muokkaa wikitekstiä]

GNU arch on avoimen lähdekoodin hajautettu versionhallintajärjestelmä, jonka kehitys on päättynyt.[7]

GNU arch on vaikuttanut useiden muiden versionhallintajärjestelmien kehitykseen kuten Git, Mercurial ja GNU Bazaar.[7]

Monotone[muokkaa | muokkaa wikitekstiä]

Monotone on avoimen lähdekoodin hajautettu versionhallintajärjestelmä, joka asettaa suuremman painoarvon tiedon yhtenäisyydelle (engl. integrity) ja luotettavuudelle kuin suorituskyvylle.[8]

Monotone käyttää kryptografisia toimintoja sekä muutoshistorian seuraamiseen että käyttäjätoimintojen autentikoimiseen.

Git[muokkaa | muokkaa wikitekstiä]

Pääartikkeli: Git

Kun BitMover lakkautti kaupallisen BitKeeper-järjestelmänsä ilmaisversion keväällä 2005, Linus Torvalds koodasi Linux-ytimen kehittämistä varten oman vapaan hajautetun versionhallintajärjestelmänsä Gitin. Subversionia Torvalds ei kokenut sopivaksi kernelin kehitystarkoituksiin.[9]

BitKeeperin ohella Monotonesta inspiraatiota saanut Git lähtee liikkeelle ajatuksesta, että sen on oltava mahdollisimman nopea ja tuettava hajautettua ohjelmistonkehitystä, jolloin jokaista versiota voi kehittää ja testata itsenäisesti. Tällöin testausta varten ei tarvitse kasata yhtä suurta pakettia, joka sisältää kaikki muutokset. Keskuspalvelinta ei tarvitse kuin muutoksista tiedottamiseen.[10]

Koska Gitissä muutosten kirjaaminen eli commit ja versioiden tekeminen on salamannopeaa, voi työtä hajauttaa helposti pieniin paloihin ja eri kehittäjille. Git käsittelee muutoksia koodiin kokonaisuutena eikä yksittäisten tiedostojen pohjalta. Muutoshistorian seuranta perustuu SHA-1 -algoritmiin.[10]

Gitiä on alettu vuoteen 2009 mennessä hyödyntää Linuxin ohella lukuisissa korkean profiilin ohjelmistohankkeissa kuten: Perl, GNOME, Qt, Samba, Kannettava tietokone jokaiselle lapselle, VLC media player, FFmpeg, Wine, Ruby on Rails ja Googlen Android-käyttöjärjestelmä. Gitin ympärille on muodostunut vahva yhteisö, joka kehittää sitä aktiivisesti.[10]

Ars Technican mukaan Microsoft käyttää nykyisin Gitiä Windowsin lähdekoodien hallintaan.[11]

Mercurial[muokkaa | muokkaa wikitekstiä]

Pääartikkeli: Mercurial

Mercurial on avoimen lähdekoodin hajautettu versionhallintajärjestelmä kuten Git ja Bazaar, jota mm. Facebook käyttää.[12]

GNU Bazaar[muokkaa | muokkaa wikitekstiä]

Pääartikkeli: GNU Bazaar

GNU Bazaar on hajautettu versionhallintajärjestelmä kuten Git ja Mercurial. Bazaar on avoimen lähdekoodin projekti, jota sponsoroi Canonical.[13]

Darcs[muokkaa | muokkaa wikitekstiä]

Pääartikkeli: Darcs

Darcs on avoimen lähdekoodin hajautettu versionhallintajärjestelmä, joka on tehty Haskell-kielellä.[14]

BitKeeper[muokkaa | muokkaa wikitekstiä]

BitKeeper on BitLogic:n kaupallinen versiohallintajärjestelmä, joka soveltuu erityisen hyvin suuriin, hajautettuihin projekteihin. BitKeeper toimii hajautetusti ja versioiden yhdistäminen on tehokkaampaa kuin CVS:ssä. Rational ClearCase on toinen suosittu kaupallinen järjestelmä, joka tarjoaa ominaisuuksia versiohallinnan lisäksi myös muuhun ohjelmistotuotteen hallintaan.

BitKeeperin kehityksen aloitti Larry McVoy ja sen omistaa BitMover-yhtiö. CVS:ään verrattuna BitKeeper tarjoaa ominaisuuksia, jotka helpottavat versiohallintaa suurissa, maantieteellisesti hajautetuissa projekteissa. BitKeeper on ollut käytössä esimerkiksi Linuxin ytimen kehityksessä.

BitKeeper toimii hajautetusti siinä mielessä, että jokaisella kehittäjällä on omalla koneellaan täydellinen kopio projektin varastosta. Tätä kopiota kutsutaan lapseksi ja päävarastoa vanhemmaksi. Kun kopio on kerran tehty, kehittäjän koneen ja päävaraston välillä siirretään vain tietoa tehdyistä muutoksista. Lapsivarastot voivat vaihtaa muutostietoa myös keskenään. Tämä helpottaa työskentelyä kun verkkoyhteyttä ei ole käytettävissä, tai käytössä on hidas yhteys. Myöskään päävarastopalvelimen käyttökatkokset eivät haittaa työskentelyä siinä määrin kuin täysin keskitetyssä järjestelmässä.

BitKeeper voi käyttää eri protokollia, kuten SSH:ta, RSH:ta, BKD:ta, HTTP:ta ja SMTP:tä päivitysten tekemiseen.

Myös versioiden välisten muutosten käsittelyä on BitKeeperissä tehostettu. Kehittäjät voivat koota samaan asiaan liittyvät muutokset niin sanotuksi muutosjoukoksi (engl. changeset). Muutosjoukko tallennetaan tiedostoon, jossa kerrotaan, mitä on muutettu ja mitä ei. Tämän avulla voidaan erottaa esimerkiksi yksittäisen virheen korjaamiseksi tehdyt muutokset.

BitKeeper on kaupallinen, mutta aikaisemmin sitä on kuitenkin voinut käyttää ilman maksullista lisenssiä, mikäli ei ole käyttänyt monen käyttäjän varastoa tai on suostunut käyttämään OpenLogging-järjestelmää. OpenLogging on järjestelmä, jossa lähetetään metatietoja projekteista keskitetylle web-palvelimelle, jonka avulla muut kehittäjät voivat seurata toistensa edistymistä. Palvelu on julkinen, jonka vuoksi kuka tahansa voi selata projektien tietoja. Järjestelmä ei sisällä lähdekoodia vaan ainoastaan kehityslokeja sekä kehittäjäkohtaista statistiikkaa. Pääasiallisesti BitKeeper on kuitenkin suunnattu maksullisen lisenssin omaaville, joka korostui kun BitMover ilmoitti 5. huhtikuuta 2005 lopettavansa ilmaisen version tarjoamisen BitKeeperistä.

ClearCase[muokkaa | muokkaa wikitekstiä]

ClearCase on IBM Rationalin kaupallinen versiohallintajärjestelmä, jonka alkuperäinen kehittäjä Rational Software on nykyisin IBM:n omistuksessa. ClearCase on osa IBM:n tarjoamaa kokonaista tuoteperhettä ohjelmistotuotteen hallinnan eri osa-alueisiin. Varsinaisen versiohallinnan lisäksi ClearCase tarjoaa toimintoja myös työtilan, ohjelmistokoontien ja muutosten hallintaan. Järjestelmä on integroitavissa moniin ohjelmistonkehitysympäristöihin kuten Eclipseen, Visual Studioon, ja WebSphereen[15].

Kaupallisen järjestelmän sisäisestä toiminnasta on vaikea saada tietoa, mutta ClearCase mahdollistaa ainakin historiallisen ja loogisen versioinnin. Työskentely ClearCasella tapahtuu checkin/checkout -mallin mukaan, joka vastaa CVS:n toimintatapaa.

ClearCase käyttää versioiden tallentamiseen oliotietokantaa, joka mahdollistaa tarkan pääsynvalvonnan. Järjestelmällä voidaan hallita teksti- ja binääritiedostoja, testauskomentojonoja, hakemistoja ja yleisesti ottaen kaikkia tiedostojärjestelmän kohteita.

ClearCase on saatavissa seuraaville käyttöjärjestelmille: AIX, HP-UX, Linux, muut Unix-kaltaiset alustat, Solaris ja Windows.[16] Se integroituu natiivina myös saman tuoteperheen ClearQuest-virheenseurantajärjestelmään.

Endevor[muokkaa | muokkaa wikitekstiä]

Endevor on CA Technologiesin versiohallintajärjestelmä IBM z/OS suurtietokoneille.

Perforce Helix[muokkaa | muokkaa wikitekstiä]

Perforce Helix (ennen vain Perforce) on Perforce Softwaren kaupallinen versionhallintajärjestelmä.

PVCS[muokkaa | muokkaa wikitekstiä]

PVCS Version Manager (ent. Polytron Version Control System) on Serena Softwaren kaupallinen versionhallintajärjestelmä. Versio 8.5 on saatavilla muun muassa AIX, Linux, Solaris ja Windows alustoille.[17]

QVCS[muokkaa | muokkaa wikitekstiä]

QVCS (Quma Version Control System) on alun perin Amiga-tietokoneelle julkaistu kaupallinen versionhallintajärjestelmä, jonka on julkaissut Quma Software. Alkuperäinen versio on siirretty Windows-alustalle vuonna 1996, se on myöhemmin toteutettu uudelleen Java:lla ja julkaistu avoimena lähdekoodin versiona.[18][19][20]

Visual Source Safe[muokkaa | muokkaa wikitekstiä]

Visual Source Safe on Microsoftin versiohallintajärjestelmä, joka seuraa Microsoftin Visual Studio -kehitysympäristön mukana. Visual Source Safe (VSS) on erityisesti Windows-alustalle tarkoitettu asiakas-palvelin -tyylinen versiohallintaohjelmisto.

Source Safen etuna on helppo käyttöönotto, jos sovelluskehitystä tehdään Visual Studio -työkaluilla Microsoft-ympäristössä. VSS integroituu vakiona Visual Studioon.

Laajempiin ja hajautetumpiin projekteihin Microsoft suosittelee Visual Studio Team Systemin Visual Studio Team Foundation Server -palvelinta.

Microsoft tukee Visual Source Safen käyttämistä vain Windows-asiakasohjelmien kanssa, mutta kolmansilta osapuolilta on tarjolla myös asiakasohjelmat Javalle, Linuxille, Macintoshille ja Sunin Solaris-käyttöjärjestelmälle.

Source Safe on kerännyt laajalti negatiivista huomiota sen ongelmakohtiin.[11][21][22][23][24]

Lähteet[muokkaa | muokkaa wikitekstiä]

  1. A History of Version Control ericsink.com. Viitattu 23.2.2017.
  2. SCCS vs RCS sccs.sourceforge.net. Viitattu 21.2.2017.
  3. GNU CSSC gnu.org. Viitattu 21.2.2017.
  4. Welcome to the SCCS project sccs.sourceforge.net. Viitattu 21.2.2017.
  5. Tichy, W. F.: Rcs – a system for version control. Software-Practice & Experience, 15(7), 1985, 637–654.
  6. Rochkind, M.J.: The Source Code Control System, IEEE Transactions on Software Engineering, Volume 1(4), 1975, 364–370.
  7. 7,0 7,1 Tai, Andy: Re: [Gnu-arch-users revc] lists.gnu.org. Viitattu 23.2.2017.
  8. 6 Version Control Systems Reviewed smashingmagazine.com. Viitattu 23.2.2017.
  9. Torvalds, Linus: Linus on the BK withdrawal LWN. Viitattu 23.2.2017.
  10. 10,0 10,1 10,2 Marti, Don: Linus on Linux: The Linus Torvalds Interview Part 2 ("Linus talks about the process of managing kernel developer commits, selecting a revision control system and how he personally uses git.") Linux Magazine. 26.4.2009. Viitattu 28.4.2009. (englanniksi)
  11. 11,0 11,1 Microsoft hosts the Windows source in a monstrous 300GB Git repository Ars Technica. Viitattu 21.2.2017.
  12. Goode, Durham & Agarwal, Siddharth P.: Scaling Mercurial at Facebook Facebook. Viitattu 21.2.2017.
  13. Bazaar is now a GNU project lists.ubuntu.com. Viitattu 23.2.2017.
  14. Moertel, Tom: How I stopped missing Darcs and started loving Git blog.moertel.com. Viitattu 23.2.2017.
  15. http://www-306.ibm.com/software/awdtools/clearcase/features/index.html?S_CMP=wspace
  16. http://www-306.ibm.com/software/awdtools/clearcase/
  17. Announcing the Release of Serena PVCS Version Manager 8.5 Serena Software. Viitattu 23.2.2017.
  18. Quma Version Control System web.archive.org. Viitattu 23.2.2017.
  19. QVCS-Enterprise open source project github.com. Viitattu 23.2.2017.
  20. Amiga World Magazine (December 1992) archive.org. Viitattu 23.2.2017.
  21. Source Safe Problems abstrakti.com. Viitattu 21.2.2017.
  22. De Smet, Alan: Visual SourceSafe: Microsoft's Source Destruction System highprogrammer.com. Viitattu 21.2.2017.
  23. Source Control: Anything But SourceSafe blog.codinghorror.com. Viitattu 21.2.2017.
  24. Visual SourceSafe Version Control: Unsafe at any Speed? developsense.com. Viitattu 21.2.2017.

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]