1 Joonas Ruotsalainen GIT PIKAOPAS Tutkielma 2011
2 SISÄLTÖ 1. JOHDANTO... 3 2. ASENTAMINEN... 4 3. KÄYTTÖ... 4 3.1 Perusasetukset... 4 3.2 Git:n ottaminen käyttöön projektissa... 5 3.3 Tiedostojen lisääminen versionhallintaan... 5 3.4 Git status... 5 3.5 Commitin tekeminen... 5 3.6 Login tarkastelu... 7 4. KEHITYSHAARAT... 8 4.1 Haaran luominen... 8 4.2 Kehityshaaran yhdistäminen... 8 5. PROJEKTIIN OSALLISTUMINEN... 10 5.1 Projektin kloonaaminen... 10 5.2 Muutosten hakeminen... 10 6. LÄHTEET... 11
3 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.
4 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
5 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
6 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.
7 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 Date: Fri Apr 22 10:52:07 2011 +0300 alkukommentit hello.cpp tiedostoon commit d36acbfe62ed01ca083e2da54efc2ff3652452df commit 00773b69e8df0965b54db8c680f0a2072bb25d36 Date: Fri Apr 22 10:52:07 2011 +0300 alkukommentit hello.cpp tiedostoon commit d36acbfe62ed01ca083e2da54efc2ff3652452df Date: Fri Apr 22 10:51:06 2011 +0300 lisätty tulostus pääohjelmaan commit 413b3b1d064eed2b10a1590d372ae9ddd8c00547 Date: Fri Apr 22 10:48:51 2011 +0300 tehty runko pääohjelmaan commit ff40463aea49c8dd7c6d961d78035369fd9dcf14 Date: Fri Apr 22 10:47:21 2011 +0300
8 readme kirjoitettu commit 2e214dc7960bf1e7bc45a6e01d9be7340dcd6d61 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
9 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
10 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 HelloWorldprojektin 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.
11 6. LÄHTEET http://git-scm.com/ http://book.git-scm.com/ http://fi.wikipedia.org/wiki/git