Git on versionhallinnan sushi-veitsi

Julkaistu 11.8.2023
Lukuaika noin 3 min

Oletko koskaan miettinyt, miksi jotkut käskevät sinua pullaamaan ja toiset fetchaamaan? Oletko koskaan yrittänyt rebasea ilman, että oikeasti ymmärrät, mitä olet tekemässä?

Versionhallinta on yksi ohjelmistoammattilaisen tärkeimmistä työkaluista, ja tämän hetken käytetyin versionhallintajärjestelmä on Git. Se on kuin versionhallinnan sushi-veitsi: yksinkertainen työkalu, jolla saa ihmeitä aikaan, kun on vähän treenannut – mutta millä myös saattaa saada vahinkoa aikaan, jos ei tiedä, mitä tekee.

Mitä Git tekee?

Yksi tärkeä asia, mikä Gitin käyttäjänä täytyy ymmärtää, on se, että Git on ainoastaan versionhallintajärjestelmä, eikä mitään muuta. Sen avulla loppujen lopuksi vain hallitaan versioita, eikä sen ihmeellisempää.

Yllä on kuva yhdestä Gitin omasta repositoriosta, jossa näkyy osa sen versiopuusta. Kokonaisuus voi näyttää hyvin kompleksiselta: se sisältää hyvin monta committia, eli versiota, joilla on hurja määrä relaatioita. Vaikka sen perusteella Git voi näyttää sekavalta, on se oikeasti hyvin johdonmukainen työkalu. Loppujen lopuksi kuvassa on vain esitettynä versioita, joilla on suhteita toisiinsa.

Mitä versionhallinnassa tehdään?

Versionhallina on loppupeleissä vain yksinkertaisia operaatioita. Git commit luo uuden version. Se tarkoittaa, että on olemassa oleva versiopuu, johon tuotetaan uusi versio. Se on perustavanlaatuinen ominaisuus Gitissä ja missä tahansa muussakin versionhallintojärjestelmässä. Sen avulla voidaan eri kohtiin versiohistoriapuuta luoda uusia versioita.

Sen lisäksi versionhallinnassa voidaan sulauttaa (git merge) näitä versioita yhteen, eli voidaan ottaa kaksi haaraa ja tuoda niiden muutokset yhteen. Ja näin on taas luotu tätä versiohistoriapuuta uuteen asentoon.

Sen lisäksi Gitissä on usein käytössä git rebase, jota myös voidaan hyödyntää muutosten integroimisessa yhdestä haarasta toiseen. Alla olevassa esimerkkikuvassa on kaksi muutosta (delta a ja delta b tarkoittamaan kohtia, joissa on joku muutos). Muutos voi olla yhden, 15 tai 1000 tiedoston muutos. Rebasella nämä muutokset saadaan tehtyä uudestaan eri version päälle.

Git rebase on siis komento, jossa siirretään tai yhdistetään useita committeja yhden commitin päälle. Tällä tavalla vanhat commitit jää kummittelemaan versiohistoriaan, kunnes garbage collection siivoaa ne pois tiettyjen sääntöjen mukaisesti. Silloin on vielä mahdollista palata aiempaan versioon, jos huomaa rebasen menneen pieleen. Git rebasea käyttämällä kirjoitat itse asiassa versiohistoriaa uudelleen.

Git cherry-pickissä otetaan joku muutos ja laitetaan se jonnekin toiseen paikkaan, eli käytännössä tarkoittaa commitin poimimista haaralta ja soveltamista toiseen.

Alla olevassa cherry pick -esimerkkikuvassa otetaan joku muutos (vasemmanpuolisen haaran muutos delta a), laitetaan se johonkin toiseen paikkaan (oikeanpuoleiseen haaraan) ja yritetään tehdä se sama muutos sinne. Cherry-pick on hyödyllinen, jos on vaikka julkaisuhaaroja jostain tuotteesta ja haluaa julkaisuhaaraan vain jotain tiettyjä korjauksia päähaarasta.

Viimeinen esimerkki Gitin versiopuun hallinnassa on git revert -komento, jolloin muutos tehdäänkin negatiivisesti. Eli jos halutaankin perua se muutos, esimerkiksi delta a, niin voidaan tehdä ns. ”miinus delta a”, eli käytännössä perutaan se muutos.

Git on simppeli, mutta monipuolinen

Gitin käyttö on hyvin yksinkertaista hommaa lopulta ja näitä ihmeellisempiä asioita ei Gitin kanssa tehdä. Tiivistettynä sillä muutetaan ja synkronoidaan versiopuuta.

Git on sinänsä hyvin joustava työkalu mille tahansa. Olen itse tehnyt Gitillä esimerkiksi elokuvakäsikirjoituksia, koodannut, laittanut scriptejä, laittanut diplomityön sinne, eli sitä voi käyttää mihin vaan tekstin tai vähän muunkin säilyttämiseen. Niin kuin mikä tahansa versionhallintajärjestelmä, niin Git vastaa meille kysymyksiä, että ”kuka teki tämän ja koska”, ”minkä pohjalta tämä on tehty” tai vaikka ”mikä on ero release vitosella ja kutosella”.

Ja hyvä muistaa myös, että Git ei hirveästi pakota ketään toimimaan tietyllä tavalla. Se on hyvin yksinkertainen työkalu, joka sitten antaa paljon mahdollisuuksia. Tämän takia on myös tärkeä tietää, että miten se oikeasti toimii, jotta voi voi tehdä sitten oman projektinsa vaatimuksiin hyvän workflow’n.

Sinua saattaisi kiinnostaa

Katso myös tallenne Viisi totuutta, jotka jokaisen Git-käyttäjän on ymmärrettävä -webinaarista! Kuulet, miten ymmärtämällä muutaman perustavanlaatuisen asian Gitin luonteesta voit kasvattaa työtehokkuutta merkittävästi.

Tietoa kirjoittajasta:

Aleksi Aalto
CEO, Omoroi

Aleksi on suunnitellut ja johtanut versionhallinta-migraatioita sekä versiohallinnan tehokasta käyttöä niin pienissä kuin suurissakin projekteissa. Hän on kouluttanut uusia ja vanhoja Gitin käyttäjiä kursseilla työn ohessa jo yli kymmenen vuoden ajan.

Asiasanat:

GIT Versiohallinta