Viikon VALO #159

Git

Git on hajautettu versionhallintajärjestelmä ohjelmointiin ja muuhun tekstintuottamiseen.

 Git on ohjelmointiprojektien tai muiden tekstipohjaisten projektien versioiden hallintaan käytettävä hajautetusti toimiva työkalu. Sen etuina joihinkin muihin versionhallintajärjestelmiin ovat muun muassa hajautettu rakenne, helppo rinnakkaisten versioiden tekeminen ja skaalautuvuus pienistä projekteista jättimäisiin. Git toimii hyvin niin pienissä yhden hengen yhdellä koneella toteutettavissa tuotoksissa kuin suurissa monen tekijän ja monen koneen välillä synkronoitavissa projekteissakin.

Git-järjestelmän ohjelmoi alunperin Linus Torvalds Linux-ytimen versionhallintaa varten tilanteessa, jossa aiemmin käytetyn kaupallisen BitKeeper-ohjelman käyttö kävi mahdottomaksi ja muut vapaat versionhallintajärjestelmät eivät hänen mielestään täyttäneet Linux-projektin vaatimuksia. Sana "git" on brittislangia ja tarkoittaa ääliötä. Linus on itse sanonut olevansa egoisti, joka nimeää projektinsa itsensä mukaan: "I'm an egotistical bastard, and I name all my projects after myself. First Linux, now git."

Git on toteutukseltaan hajautettu versionhallinta, joka tarkoittaa sitä, että toisin kuin Subversionin kaltaisessa keskitetyssä versionhallinnassa, versioiden ylläpito ja varastointi tapahtuukin suoraan käyttäjän koneella projektin omassa kansiossa keskitetyn palvelimen sijaan. Kullakin käyttäjällä on siis oma repository, jossa projektin tiedostojen versiot ovat tallessa. Tämän takia käyttäjä voi hyödyntää versiointia myös ilman verkkoyhteyttä. Hajautetun versionhallinnan kanssa käytössä voi toki olla myös projektiin osallistuvien yhteinen verkossa oleva repository, jonka kanssa paikalliset repositoryt synkronoidaan. Hajautetun toteutuksen avulla käyttäjä voi siis hyötyä versionhallinnan tuomista eduista myös ollessaan verkon tai keskitetyn repositoryn tavoittamattomissa esimerkiksi matkan aikana.

Muita Gitin ominaisuuksia ovat esimerkiksi helppo versiohaarojen (branch) luominen, versiohistorian eheys ja hyvä skaalautuvuus. Gitillä uusien versiohaarojen tekeminen, vertailu ja yhdistäminen on tehty tarkoituksella helpoksi, jotta käyttäjän on helppoa tehdä esimerkiksi erilaisia kokeilevia versioita häiritsemättä päähaaraa (master) tai muita mahdollisia haaroja. Kokeellisen versiohaaran onnistuessa ja valmistuessa se on helppo yhdistää (merge) takaisin päähaaraan. Monissa tilanteissa Git osaa limittää uuden version tiedostoihin tehdyt muutokset automaattisesti oikein päähaaran tiedostoihin. Vaikeammissa tapauksissa se pyytää käyttäjää ratkaisemaan ristiriidat käsin. Ristiriitojen ratkaisemiseen Git osaa ehdottaa käyttäjälle koneelta löytyviä ohjelmia, kuten Meld. Tarkoituksena onkin, että esimerkiksi ohjelmointiprojektissa uuden ominaisuuden toteuttamista varten voidaan luoda oma haaransa, jossa ominaisuus kehitetään valmiiksi häiritsemättä päähaaraa, minkä jälkeen testattu haara yhdistetään takaisin päähaaraan.

Versiohistorian eheydellä tarkoitetaan sitä, että aina kun uusi muutos viedään versionhallintaan (commit), kyseiselle muutokselle lasketaan tarkistussummana nimi, joka on käytännössä yksikäsitteinen koko maailmassa. Tarkistussumman laskemiseen käytetään muun muassa kyseistä muutosta edeltävän muutoksen (tai edeltävien muutosten, jos kyseessä haarojen yhdistäminen) nimiä, käyttäjän sähköpostiosoitetta, itse tiedostoja sekä muutamia muita tietoja. Näin kukin muutos on aina kytketty yksikäsitteisesti edeltäjiinsä eikä muutoshistoriaa voi jälkikäteen väärentää. Eräs tämän käytännön etu on, että jos saman niminen muutos löytyy kahden käyttäjän repositoryistä, voidaan olla varmoja, että kyse on silloin täysin samasta versiosta.

Git soveltuu erityisesti tekstimuotoisen datan versiointiin ja sitä voi hyvin käyttää ohjelmointiprojektien lisäksi myös esimerkiksi oppikirjojen kirjoittamiseen. Myös tieteellisessä tutkimustyössä on mahdollista käyttää versionhallintaa, kun tutkijat kirjoittavat yhdessä tieteellisiä artikkeleita. Tieteelliseen käyttöön onkin kehitetty myös erikoisversio SciGit, jossa on tarkoituksena yksinkertaistaa käyttöliittymää ja tuoda paremmin esille tieteellisessä työssä oleellisia ominaisuuksia ohjelmoinnissa tarvittavien sijaan.

Binäärimuotoisia tiedostoja, kuten kuvia, voi toki myös laittaa mukaan versionhallintaan, mutta niiden versioiden hallinta, esimerkiksi rinnakkaisia versioita yhdistäessä, ei ole yhtä suoraviivaista kuin tekstitiedostoilla. Pelkästään binäärisistä tiedostoista koostuvien projektien versionhallintaan saattaa löytyä parempiakin työkaluja.

Gitin perustyökalut ovat kokoelma komentoriviohjelmia, joista kukin tekee oman tehtävänsä. Git-versionhallinnan käyttöön löytyy kuitenkin myös useita graafisia käyttöliittymiä. Osassa on keskitytty erityisesti versiohistorian selailuun ja graafiseen havainnollistamiseen, kuten esimerkiksi Gitin mukana tuleva yksinkertainen gitk tai hieman "kauniimpi" qgit. Osa taas integroi versionhallinnan komentoja muuten käytössä oleviin tiedostonhallintaohjelmiin, kuten Windowsiin asentuva Tortoisegit tai KDE-ympäristön Dolphin-tiedostoselaimen lisäosana toimiva kdesdk-dolphin-plugins -paketti. GitX on puolestaan Mac OS X -ympäristössä käytettävä vapaa graafinen käyttöliittymä. Myös monet ohjelmointiin käytettävät tekstieditorit, kuten Eclipse, osaavat käyttää Git-versionhallintaa käyttöliittymänsä kautta joko suoraan tai lisäosan avulla. Muita graafisia käyttöliittymiä löytyy sivulta: http://git-scm.com/downloads/guis ja vielä pidempi lista muita käyttöliittymiä ja työkaluja sivulta: https://git.wiki.kernel.org/index.php/InterfacesFrontendsAndTools .

Git-versionhallinta osaa olla yhteydessä palvelimella olevaan repositoryyn useammallakin tavalla, muun muassa ssh-yhteyden tai http-yhteyden kautta. Palvelinkäyttöä varten on olemassa myös ohjelmistoja ja valmiita palveluita. Yksi suosituimmista Gitin kanssa käytetyistä palveluista on GitHub osoitteessa http://github.com . Vastaavia avoimella lähdekoodilla toimivia palveluita ja omallekin palvelimelle asennettavissa olevia ohjelmistoja ovat Gitorius ja Gitlab. Nämä kaikki tarjoavat mahdollisuuden repositoryjen, niiden tiedostojen, haarojen sekä historian selaamiseen www-selaimella sekä paljon muita kehitystyöhön hyödyllisiä toiminnallisuuksia.

Kotisivu
http://git-scm.com/
Lisenssi
GNU GPL v.2
Toimii seuraavilla alustoilla
Linux, Windows, Mac OS X, FreeBSD, OpenBSD, NetBSD, PC-BSD, Solaris
Asennus
Git löytyy Linux- ja BSD-järjestelmien paketinhallinnasta. Muille järjestelmille sen voi ladata ohjelmiston kotisivujen kautta.
Käyttöohjeet
Git Linux.fi:ssä
Git tutorial
Git by example (a little tutorial)
Git for ages 4 and up (Youtube) Elokuvan mittainen havainnollinen esitys Gitin toiminnasta

Teksti: Pesasa
Kuvakaappaukset: Pesasa