Page 1 of 1

Johdatus versionhallintajärjestelmiin

Posted: Fri May 15, 2009 10:57 am
by Aavesoturi
Johdatus versionhallintajärjestelmiin

Versionhallinta pitää kirjaa ja tallentaa ohjelmiston eri versiot (tai vaikka dokumenttien, niin kuin Wikipedia), osaa palata vanhoihin versioihin ja lisäksi yhdistellä eri versioita. Yksittäiselle kehittäjälle se tarjoaa helpon tavan kokeilla villejä ideoita - jos homma ei toimi voidaan palata vanhempaan, toimivaan versioon. Vielä kehittyneenpää on "oksat", eli lähdekoodin kehitys voidaan haarauttaa esim. stabiiliin ja experimentaaliseen haaraan - molempien kehitys voi kulkea omia polkujaan ja jos kokeellinen haara osoittautuu hyväksi, se voidaan vaivattomasti yhdistää päähaaraan sinne tehtyjen muutosten säilyessä.

Useamman hengen kehitystiimille versionhalllinta on lähes välttämätöntä tai ainakin se helpottaa hommaa suuresti. Jokainen voi koodailla itsekseen ja kun muutokset lähetetään versionhallintaan, muut voivat yhdistää ne itselleen, ilman että omat muutokset koodiin häviävät. Ainoastaan jos on esim. muokkailtu samoja koodirivejä, syntyy konflikteja, jotka joutuu ratkaisemaan käsin, mutta muuten versionhallinta tekee yhdistelyn automaattisesti.

Versionhallintasysteemit perustuvat yleensä commit:eihin, eli pieniin muutoksiin, joille annetaan lyhyt kuvaus. Ideana on, että aina kun on tehty joku muutoskokonaisuus, se lähetetään versionhallintaan. Muutoksien koot voivat vaihdella korjatusta typosta kokonaisiin uusiin funktioihin, mutta yleensä ohjenuorana on, että jos ei pysty kuvaamaan tehtyjä muutoksia yhdellä lauseella, on se liian iso. Pitämällä muutokset pienehköinä, on patchit helppo yhdistää muille ja mahdollisten uusien bugien löytäminen on helppoa. Lisäksi motivaatiokin kasvaa, kun konkreettisesti näkee, että on tullut jotain tehtyä.

Järkevästi toteutettu systeemi ei tallenna joka kerta täysiä tiedostoja, vaan pelkästään muutokset, jotka se vielä pakkaa. Tällöin laajankin projektin pitkä historia vie vain vähän tallennustilaa.

Soolo käytössä versionhallinta ei vaadi nettipalvelinta, vaan tiedostovaraston (repositorio) voi muodostaa omalle kiintolevylle. Jos komentorivi pelottaa, systeemeille on saativalla erilaisia graafisia käyttöliittymiä, joista monet osaavat integroitua Windowsin tiedostoselaimeen. Tällöin muutoksien tallennus käy yksinkertaisesti kakkospainikkeen kontekstimenusta.

Seuraavassa muutaman versionhallintasysteemin lyhyet esittelyt. Muitakin on olemassa, Google ja Wikipedia auttaa.

CVS (Concurrent Versions System)
CVS on vanha, mutta tunnettu ja paljon käytetty vapaa versionhallintasysteemi. Siinä on kuitenkin rajoitteita, jotka saavat nykyään monet valitsemaan jonkun toisen systeemin.

SVN (Subversion)
SVN kehitettiin CVS:n moderniksi seuraajaksi ja se on tällä hetkellä hyvin suosittu. Se on kohtuullisen yhteensopiva CVS:n kanssa. Kuten CVS, SVN:kin käyttää asiakas-palvelin mallia, eli kaikki käyttäjät käyttävät yhtä, jaettua varastoa.

Git
Gitistä en ollut kuullutkaan vähän aikaa sitten, mutta kun törmäsin siihen yhä useammassa projektissa (esim. VLC media player, Wine, GNOME ja Googlen Android), päätin ottaa asioista selvän ja kävi ilmi, että se koodattiin muutama vuosi sitten Linux ytimen kehitykseen Linus Torvaldsin toimesta. Gitissä olennaista on nopeus ja se, että se tukee hajautettua kehitystä, eli kaikki voivat koodailla omalla varastolla ja keskusserveriä tarvitaan lähinnä muutoksista tiedottamiseen. Windows ei ole Gitin ominta aluetta, mutta se toimii kyllä: http://code.google.com/p/msysgit/ ja http://kylecordes.com/2008/04/30/git-windows-go/ )

Oma weapon-of-choiceni on Git, jota käytän nykyään kaikissa uusissa projekteissani ja vanhoissakin. Julkiseen hostaukseen käytän GitHubia (omat reponi: http://github.com/tapio ).

SourceForge.net, suurin avoimen lähdekoodin projektien hostaus palvelu tarjoaa projekteille kaikkia kolmea systeemiä (+esittelemätöntä Mercurialia).

Siinäpä pieni intro versionhallintaan. Pienehköissä, yhden henkilön projekteissa se ei ole välttämätöntä, vaikkakin ihan kätevää. Kuitenkin jos tiimillä meinaa koodia vääntää, kannattaa ehdottomasti laittaa kunnon systeemi pystyyn, sillä jokin koodien vaihtelu ircissä tai foorumilla on tuskasen köykästä. Jos joskus meinaa ohjelmoida työkseen monen kehittäjän firmassa, tulee versionhallinta vastaan ennemmin tai myöhemmin.

Re: Johdatus versionhallintajärjestelmiin

Posted: Tue Jun 23, 2009 8:09 pm
by Jare
Hyvää tietoa. Itsekin olen pintapuolisesti asiaan tutustunut joskus aikaa sitten, ja nyt oli hyvä kerrata asiaa täältä. Kiitoksia! Toivotaan, että versionhallinta saisi lisää suosiota täällä CB-yhteisössä. 8-)

Re: Johdatus versionhallintajärjestelmiin

Posted: Thu Jun 25, 2009 12:45 pm
by CCE
Pätevä opas, pitäisi varmaan tuohon Gittiin tutustua. Ja komea nebula-opas tuolla sivusi artikkeliosastolla :)

Re: Johdatus versionhallintajärjestelmiin

Posted: Wed Jul 29, 2009 12:36 am
by Someday coder
Omalla kohdalla riittänyt ihan hyvin että kun lähtee päivittelemään projektia jostain kohti niin tekee vain varmuus kopion ja se siitä.

Re: Johdatus versionhallintajärjestelmiin

Posted: Mon Aug 03, 2009 7:37 pm
by Ruuttu
Juu, se toimii yhden miehen projekteissa ihan hyvin, mutta ei, jos menet vaikkapa jollekin isolle softayritykselle töihin työstämään muiden koodia ja tekemään koodia muiden työstettäväksi.