Pino teknisiä kirjoja

Osaaminen on jatkuvaa oppimista

Uskomme menetelmiin, jotka tukevat oppimista, kommunikointia ja järjestelmällistä tiimityöskentelyä. Menetelmiin, jotka auttavat meitä tekemään työmme paremmin, nopeammin ja harhailematta sivupoluilla.

Näillä sivuilla asiantuntijamme jakavat kokemuksiaan ja näkemyksiään eri teknologioista ja menetelmistä.

Artikkelit

Reaktor Twitter

Hajautettu versionhallinta

Joustavuutta ja nopeutta ketterille tiimeille

Hajautetut versionhallintajärjestelmät (distributed version control system) ovat yleistyneet erityisesti vapaan lähdekoodin projekteissa. Suomalaisen Linus Torvaldsin kehittämä Git on hajautetuista versionhallintatyökaluista tällä hetkellä suosituin.

Gitin levinneisyydestä kielii esimerkiksi yhteisöllisen lähdekoodinhallintapalvelu GitHubin jatkuvasti kasvava suosio. Heinäkuussa 2010 GitHub ylitti miljoonan Git-tietokannan rajan ja 10 kuukautta myöhemmin luku oli jo tuplaantunut.

Räjähdysmäinen suosion kasvu on saanut myös yritysmaailman kiinnostumaan uuden teknologian hyödyistä. Myös Reaktor on todennut uuden teknologian tarjoavan konkreettisia etuja ja käytämme Gitiä suuressa osassa projektejamme.

Hajautetut versionhallintajärjestelmät

Hajautetut versionhallintajärjestelmät eroavat totutuista siten että niissä jokaisella kehittäjällä on täydellinen kopio versiohistoriasta mahdollisen keskitetyn kopion lisäksi. Muutokset lähdekoodiin kirjataan kehittäjän omalla työasemalla olevaan versiotietokantaan. Tämä on hajautetun versionhallinnan lähtökohta – kaikki operaatiot tehdään paikalliseen versiotietokantaan. Valmiit muutokset voidaan sitten julkaista esimerkiksi keskitettyyn kopioon.

Hajautetut versionhallintajärjestelmät tarjoavat laajan työkalupakin versiotietokantojen hallintaan, synkronointiin ja julkaisemiseen. Monet hajautettujen versionhallintajärjestelmien hyödyistä pohjautuvat kykyyn tarkastella ja muokata versiohistoriaa perinteisiä työkaluja vapaammin. Nämä toimenpiteet ovat nopeita, koska verkkoyhteyttä ei tarvita.

Kehittäjien tekemät muutokset käsitellään tiedostokohtaisten muutosten sijaan kokonaisuuksina. Git ylläpitää muutoskokonaisuuksien sisällöstä ja "sukupuusta" kirjaa siten, että kahden kehittäjän erikseen tekemät samanlaiset muutokset pystytään todentamaan identtisiksi. Näin säästytään monilta konflikteilta siinä vaiheessa kun kehittäjät synkronoivat omaa versiohistoriaansa projektin keskitettyyn versiotietokantaan.

Muutoksia voi jakaa monella tavalla

Se, että jokaisella kehittäjällä on oma kopionsa versiohistoriasta avaa kehitystiimeille uusia mahdollisuuksia koordinoida työtään. Näillä uusilla työkaluilla on edelleen mahdollista käyttää vanhaa tuttua jaetun tietokannan mallia (shared repository model), jossa kaikki kehittäjät julkaisevat muutoksiaan omista tietokannoistaan suoraan keskitettyyn versiotietokantaan. Uudenlainen arkkitehtuuri tuo kuitenkin tarjolle myös muunlaisia tapoja jakaa muutoksia.

GitHubin fork+pull -mallissa jokainen kehittäjä julkaiseen oman versiotietokantansa. Sen sijaan että jokainen kehittäjä työntäisi (engl. push) muutoksensa yhteiseen tietokantaan, kehittäjät vetävät (engl. pull) muutokset toistensa tietokannoista. Tällaisessa mallissa yksi versiotietokannoista on valittu viralliseksi versiotietokannaksi josta tuotteen julkaisut tapahtuvat.

Esimerkki fork+pull -mallista on Kent Beckin ylläpitämä JUnit. JUnitista on GitHubissa kirjoitushetkellä yhteensä 62 eri versiotietokantaa joissa tuotetta on voitu kehittää eri suuntiin. JUnit-projektin julkaisut tehdään kuitenkin käyttäen Kent Beckin versiotietokantaa johon hän on vetänyt hyväksymänsä muutokset.

Toinen vaihtoehtoinen ja yleinen kehitysmalli on Linux-kehityksestä tuttu patch-malli, jossa kehittäjät lähettävät tekemänsä muutokset sähköpostitse ylläpitäjille. Ylläpitäjät katselmoivat muutosehdotukset ja sulauttavat hyväksymänsä muutosehdotukset osaksi virallista versiohistoriaa. Tämän mallin edut ovat mahdollisuus kommunikoida muutosehdotuksista ennen niiden sulauttamista ja helposti seurattava lineaarinen versiohistoria.

Vapaus hallita versiohistoriaa

Modernit hajautetun versionhallinnan työkalut antavat kehittäjälle perinteisiä työkaluja suuremman vapauden tarkastella ja muokata versiohistoriaa. Tämä edesauttaa esimerkiksi aikaisemmin julkaistuissa versioissa havaittujen ongelmien paikantamisessa ja päivitysjulkaisujen tekemisessä. Kun kehittäjä siirtyy korjaamaan virhettä aikaisemmin julkaistussa versiossa keskeneräisen työn tallettaminen ja työtilan palauttaminen vanhaan versioon tapahtuu silmänkäänteessä.

Kun kehittäjä on tehnyt muutokset paikallisesti, hän pystyy vielä siivoamaan muutosjoukkoa ennen julkaisua. Hän voi esimerkiksi yhdistellä ja pilkkoa muutoksia selkeämmiksi muutosjoukoiksi, järjestellä muutokset uudelleen ja päivittää kommentit sitten, kun kokonaisuus on selkiytynyt. Nämä ominaisuudet helpottavat kehittäjän arkea ja tukevat hyviä työtapoja.

Git nopeuttaa ketterää kehitystä

Git antaa kehittäjälle paljon valtaa ja mahdollisuuden tehdä toimenpiteitä, jotka eivät onnistu valtavirtatuotteilla. Ketterille tiimeille Gitin kaikkein tärkein etu on kuitenkin yksinkertainen – nopeus. Monien toimenpiteiden nopeus madaltaa kehittäjän kynnystä toteuttaa näitä, mikä johtaa siihen, että versionhallintajärjestelmää käytetään paljon ja monipuolisesti.

Heikki Rauhala lähikuvassa

Heikki Rauhala, vanhempi ohjelmistokehittäjä

Heikki on kokenut ohjelmistokehittäjä, joka valitsee työkalunsa tilanteen mukaan.

Lasse Koskela lähikuvassa

Lasse Koskela, valmentaja

Lasse auttaa yksilöitä, tiimejä ja organisaatioita löytämään tehokkaampia toimintatapoja tuotehallinnan ja ohjelmistokehityksen saralla.