Tämä opas on harjoitustyöni Saimaan ammattikorkeakoulun Testaus ja laadunvalvonta -kurssille.
1. JOHDANTO
Git on ilmainen ja avoimen lähdekoodin versionhallintajärjestelmä, joka soveltuu niin pieniin kuin suuriinkin projekteihin. Git tukee nopeaa ja tehokasta hajautettua työskentelyä. Git on alunperin suunniteltu Linux-kernelin kehitykseen, jonka vuoksi se on suunniteltu mahdollisimman nopeaksi, johtuen linux-kerneliin tulevien päivitysten suuresta määrästä.
Git toimii Linux, Mac OS X ja Windows käyttöjärjestelmissä. Se on julkaistu GPL2 lisenssillä. Git-versionhallintaa käyttää muun muassa linux-ydin, android, Qt ja eclipse.
2. ASENTAMINEN
Git:n voi helposti asentaa Ubuntuun komennolla sudo apt-get install git git-core tai pakettienhallinnan kautta valitsemalla paketit git ja git-core.

Kuva 1, pakettienhallinta
Tämä asentaa kaiken tarvittavan git:n käyttöön. Tarvittaessa voi myös asentaa jonkin graafisen käyttöliittymän, mutta niitä ei käsitellä tässä tutkielmassa.
3. KÄYTTÖ
Tässä tutkielmassa käsitellään git:n käyttöä komentoriviltä. Esimerkkinä käytetään yksinkertaista HelloWorld-ohjelmaa.
3.1 Perusasetukset
Aluksi on säädettävä perusasetukset kuntoon. Niistä tärkeimmät ovat nimi ja sähköpostiosoite. Voit asettaa ne seuraavilla komennoilla:
git config --global user.name "Etunimi Sukunimi"
git config --global user.email osoite@example.com
3.2 Git:n ottaminen käyttöön projektissa
Git:n voi ottaa helposti käyttöön projektissa siirtymällä projektikansioon ja antamalla komennon: git init
Tämä luo piilohakemiston .git projektikansioon. Piilohakemisto sisältää kaikki git:n tarvitsemat projektikohtaiset tiedot.
3.3 Tiedostojen lisääminen versionhallintaan
HelloWorld-projektiin lisätään hello.cpp ja readme tiedostot. Kun tiedostojen ediotointi on tehty, ne täytyy lisätä versionhallintaan. Versionhallintaan lisääminen onnistuu helposti komennolla:
git add readme hello.cpp
Tiedosto siis lisätään git:n seuraavasti: git add tiedostonnimi
Voit myös lisätä kaikki tiedostot kerralla käskyllä git add .
3.4 Git status
Voit tarkastella mitä muutoksia olet tekemässä käskyllä: git status. Git status antaa HelloWorld-projektissa seuraavanlaisen tulosteen:
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: hello.cpp
# new file: readme
#
Ensimmäisellä rivillä näkyy kehityshaara eli branch. Tässä tapauksessa haaran nimi on master. Kehityshaarasta kerrotaan lisää myöhemmin. Alempana näkyvät tiedostot, jotka ollaan lisäämässä.
3.5 Commitin tekeminen
Muutoksia projektiin ei olla vielä lisätty. Muutokset lisätään seuraavalla komennolla: git commit. Tämä komento avaa järjestelmän oletus tekstieditorin. Committin kirjataan kaikki tehdyt muutokset lyhyesti, selkeästi ja mahdollisimman tarkasti. Tämän jälkeen tallennetaan ja suljetaan editori, jonka jälkeen muutokset ovat lisätty projektiin. Tulosteena käsky antaa seuraavan:
[master (root-commit) 2e214dc] lisättiin readme ja hello.cpp tiedostot projektiin
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 hello.cpp
create mode 100644 readme
Tulosteessa näkyy kuinka montaa eri tiedostoa muokattiin, montako riviä lisättiin ja montako poistettiin. Lisäksi tulosteessa näkyy lisätyt tiedostot.

Kuva 2, komennot.
Kuvassa 2 näkyy git:n perus workflow:
git init
git add tiedosto
git commit
Tästä eteenpäin muokatut ja uudet tiedostot lisätään git add komennolla, jonka jälkeen lisätään git commit komennolla.
3.6 Login tarkastelu
Voit tarkastella tehtyjä muutoksi projektissa komennolla git log. Käsky antaa tulosteena login tehdyistä commiteista.
joonas@terminator:~/ohjelmoinnit/c++/HelloWorld$ git log
commit 00773b69e8df0965b54db8c680f0a2072bb25d36
Author: Joonas <email@mail.com>
Date: Fri Apr 22 10:52:07 2011 +0300
alkukommentit hello.cpp tiedostoon
commit d36acbfe62ed01ca083e2da54efc2ff3652452df
Author: Joonas <email@mail.com>
Date: Fri Apr 22 10:51:06 2011 +0300
lisätty tulostus pääohjelmaan
commit 413b3b1d064eed2b10a1590d372ae9ddd8c00547
Author: Joonas <email@mail.com>
Date: Fri Apr 22 10:48:51 2011 +0300
tehty runko pääohjelmaan
commit ff40463aea49c8dd7c6d961d78035369fd9dcf14
Author: Joonas <email@mail.com>
Date: Fri Apr 22 10:47:21 2011 +0300
readme kirjoitettu
commit 2e214dc7960bf1e7bc45a6e01d9be7340dcd6d61
Author: Joonas <email@mail.com>
Date: Fri Apr 22 10:16:49 2011 +0300
lisättiin readme ja hello.cpp tiedostot projektiin
Tulosteessa näkyy commitin tunnus, tekijä, päiväys ja kirjoitettu kuvaus.
4. KEHITYSHAARAT
Git tukee projekteissa eri kehityshaarjoja. Kehityshaarat ovat kätevä tapa kehittää sovellusta.
4.1 Haaran luominen
Kehityshaaran voi luoda komennolla git branch testaus. Tämä luo uuden kehityshaaran nimeltä testaus. Käskyllä git branch näkee versionhallinnan kehityshaarat ja tähdellä merkitty haara on aktiivinen.
joonas@terminator:~/ohjelmoinnit/c++/HelloWorld$ git branch
* master
testaus
Yläpuolisessa tulosteessa näkyy master ja testaus haarat, joista master on aktiivinen. Master haara on myös oletuksena ja se on pääkehityshaara. Kehityshaarasta voi siirtyä toiseen komennolla git checkout haarannimi.
4.2 Kehityshaaran yhdistäminen
Testaus haaraan tehdyt muutokset eivät näy master haarassa. Jos teemme testaus haarassa muutoksia ohjelmaan ja commitoimme muutokset, niin ne eivät näy master haarassa. Tämä on hyvä tapa kehittää ohjelmaa. Voidaan esimerkiksi tehdä haara nimeltä versio2, johon tehdää kaikki seuraavan version muutokset. Kun muutokset ovat valmiit voidaan versio2-haara yhdistää master haaraan. Yhdistäminen tapahtuu ensiksi asettamalla se haara aktiiviseksi johon yhdistäminen halutaan tehdä, jonka jälkeen annetaan käsky git merge haarannimi.
HelloWorld-projektissa on lisätty testaus-kehityshaaraan muutamia muutoksia. Samalla on tehty muutoksia master-haaraan. Koodari on saanut valmiiksi testaus-haaran ja haluaa yhdistää sen master-haaraan. Hän tekee sen siirtymällä aluksi master-haaraan: git checkout master. Tämän jälkeen hän yhdistää testaus-haaran: git merge testaus. Käsky antaa seuraavanlaisen tulostuksen:
joonas@terminator:~/ohjelmoinnit/c++/HelloWorld$ git merge testaus
Auto-merging hello.cpp
CONFLICT (content): Merge conflict in hello.cpp
Automatic merge failed; fix conflicts and then commit the result.
Tuloste kertoo, että yhdistämisessä on tullut ristiriita eli conflict. Ristiriita on tiedostossa hello.cpp ja sen sisällöksi on tullut:

Kuva 3, merge conflict
Kuvassa 3 näkyy hello.cpp:n sisältö. <<<<<< HEAD tarkoittaa master-haarassa olevaa riviä ja sen alapuolella ovat testaus-haaran rivit. Koodarin täytyy nyt käsinein korjata ristiriidat. Tämän jälkeen hän tekee commitin. Nyt haarat ovat yhdistetty.
5. PROJEKTIIN OSALLISTUMINEN
Yleensä ohjelmistoprojekteissa on mukana enemmäin kuin yksi koodari. Git mahdollistaa helpon monen koodarin yhteistyön.
5.1 Projektin kloonaaminen
Kun projektiin liittyy mukaan uusi koodari, hänen täytyy kloonata eli kopioidan ohjelmiston koodit itselleen. Git:llä se onnistuu seuraavalla käskyllä: git clone polku/projektin/hakemistoon. Esimerkiksi seuraava käsky kopioi HelloWorld-projektin lähdekoodit: git clone /home/joonas/ohjelmoinnit/c++/HelloWorld/
Tämän jälkeen uusi koodari voi ohjelmoida ja commitoida muutoksia kopioituun projektiin.
5.2 Muutosten hakeminen
Kun koodarit tekevät muutoksia ne eivät kuitenkaan päivity toisille koodareille. Muutokset täytyy hakea pull-käskyllä. Pull-käsky on seuraavanlainen: git pull polku/projektin/hakemistoon/ kehityshaarannimi
Esimerkiksi HelloWorld-projektissa voisin hakea toisen koodarin muutokset seuraavasti: git pull /home/koodari/HelloWorld/ master
Koodari, joka taas kloonasi projektini, voisi hakea tekemäni muutokset käskyllä git pull.
Voit ladata tulostettavan version.
| Attachment | Size |
|---|---|
| git-Joonas-Ruotsalainen.pdf | 419.14 Kt |



