TWiki> KitWiki Web>LinuxTools>LinuxToolsGit (revision 5)EditAttach

Git-versiohallintaohjelmiston käytön alkeita ja käyttötilanteita

Mihin tarvitaan versiohallintaohjelmaa?

Kuvitellaan että opiskelija Uolevi on kehittämässä kunnianhimoista leksikkoprojektia. Kaksi ensimmäistä päivää sujuu hyvin ja projekti etenee mallikkaasti. Kolmantena päivänä hän huomaa että aiemmin toimineet säännöt eivät enää toimikaan muutosten jälkeen. Uolevi ei kuitenkaan muista enää mitä sääntötiedostossa on muuttunut. Ei hätää, Uolevilla on lokaali GIT-versioarkisto (repository), johon hän säännöllisin väliajoin puskee (git add & git commit) tehdyt muutokset. Uolevi vertaa nykyistä versiota aiemmin luotuun revisioon (git diff) ja huomaa nopeasti tekemänsä virheen.

Projekti etenee mallikkaasti ja se alkaa kiinnostamaan myös muita kollegoja. Kollega Antti on python-guru ja haluaisi auttaa omalta osaltaan kehitystyössä. Syntyy tarve hajautetulle kehitystyölle. Uolevilla on GitHub.comissa remote repository jonka Antti kloonaa (git clone) itselleen. Antti alkaa jo samana iltana kehittämään python-koodia ja saa sen kolmelta yöllä valmiiksi. Antti puskee (git add & git commit & git push) omat muutoksensa GitHub.comissa sijaitsevaan repositoryyn. Samana aamuna kun Uolevi herää, hän tarkistaa onko Antti tehnyt muutoksia projektiin. Uolevi hakee remote repositorysta uusimmat muutokset omalle koneelleen (git pull) ja jatkaa kehitystyötä.

Parempi kuvaus ohjelmistojen versioinnista: http://fi.wikipedia.org/wiki/Ohjelmiston_versiohallinta

Versiohallintaohjelmistojen perusteet ja peruskäsitteet (GIT):

Repository:

Repository eli versioarkisto sisältää tiedon kaikista eri versioista (revision) ja versiohaaroista (branches), mitä projektiin on tehty. Kun omaan uuteen projektiin halutaan ottaa versiointi käyttöön, luodaan aluksi uusi repository ja tämän jälkeen lisätään repositoryyn versio, joka pitää sisällään senhetkiset projektitiedostot. Mikäli taas haluamme alkaa kehittämään jo olemassaolevaa projektia josta versiointi löytyy, kloonaamme versioarkiston omalle koneelle.

Revision

Revisio eli versio pitää sisällään projektin senhetkisen tilan. Revisio luodaan kokoamalla ja tallentamalla paketti lokaalisti muuttuneista ja lisätyistä tiedostoista. Aktiivinen kehitysversio on nimeltään HEAD revision (head isolla).

Commit

Kun kehittäjä on saanut valmiiksi ominaisuuden tai joukon uusia ominaisuuksia, voidaan näistä luoda uusi versio. Tämä tapahtuu kommitoimalla muutokset ja lisätyt tiedostot. Commit pitää sisällään esimerkiksi 10 uutta riviä Lexc -tiedostossa ja yhden TWOLC-säännön. Commitin yhteydessä annetaan myös kommentti, joka kuvaa mitä uudessa versiossa on lisätty / muokattu. Esim. "Lexc-tiedostoon lisätty liitepartikkeleita varten uusi osaleksikko". On kehittäjän päätettävissä miten usein uusia versioita luodaan, mutta version olisi hyvä olla looginen ja toimiva kokonaisuus tai korjaus. Samalla versiohistorian muutoksia ja kommentteja selaamalla saa jonkinlaisen käsityksen miten projekti on aikojen saatossa kehittynyt. Jos kehitys tapahtuu hajautetusti, kommentteja lukemalla saadaan jonkinlainen käsitys mitä muutoksia on tehty ja miksi.

Käyttöohjeet ja komennot

Gitin käyttöön kannattaa perehtyä manuaalin kanssa: http://git-scm.com/documentation

Peruskäytöstä on ohjeet kakkoskappaleessa: http://git-scm.com/book/en/Git-Basics

Konseptuaalisesti olennaisimmat tiedot on lyhyesti käyty läpi seuraavassa tutoriaalissa: http://www.sbf5.com/~cduan/technical/git/

Kun GITin perustoiminnot alkavat sujua, kannattaa tutustua seuraavaan ohjesivustoon, joka kuvaa visuaalisesti mitä yleisimmät GIT-komennot tekevät. Tästä ehkä hahmottaa paremmin miten eri toiminnot linkittyvät toisiinsa. http://marklodato.github.io/visual-git-guide/index-en.html

Muistilista yleisistä komennoista: http://jonas.nitro.dk/git/quick-reference.html

Hajautettu kehitys

GIT-työskentely on aina lokaalia, mutta versiotietoja voidaan siirtää eri versioarkistojen välillä.

Uuden version luominen tapahtuu aina lokaalisti:

git status kertoo mitä muutoksia on mahdollista lisätä uuteen commitiin git add -komennolla halutut tiedostot voi lisätä commitiin. Nämä siirtyvät "staging area"-tilaan. git commit -komennolla tilan "staging area" tiedostoista luodaan uusi versio (revision).

Hajautetussa työskentelyssä omat versiomuutokset siirretään toiseen versioarkistoon (esim. toiselle palvelimelle) git push komennolla. Vastaavasti toisesta versioarkistosta haetaan uusimmat versiomuutokset git pull -komennolla. git pull on oikeastaan yhdistelmä git fetch ja git merge -toimintoja.

Monesti kehittäjät saattavat muokata yhtäaikaisesti samoja tiedostoja. GIT osaa git pull -toiminnon yhteydessä yleensä yhdistää muutokset automaattisesti, mikäli muutokset koskevat tiedoston eri osioita (esim. toinen on tehnyt riviin 2 muutoksia ja toinen riviin 2000). Joskus kuitenkin tulee konfliktitilanne, jolloin esim. molemmat ovat muokanneet tiedoston samaa riviä. Tällöin git merge ei onnistu ja konfliktitilanne tulee ratkaista. Tällaista tilannetta varten ohjeet löytyvät alta: http://genomewiki.ucsc.edu/index.php/Resolving_merge_conflicts_in_Git

GIT ja leksikkoprojektit (LEO)

Harjoitus

1. Hipulla on toimiva git-ohjelmisto asennettuna. Kokeile tutoriaalien perusteella luoda omasta harjoitustyöstä GIT-versioarkisto. Onnistuiko tämä ohjeiden mukaan ja tuliko vastaan ongelmia, mitä?

2. Luo tunnukset github.com-sivustolle, ja selvitä hieman minkä takia palvelun käyttö on räjähdysmäisessä lennossa open source -projektien osalta. Luo githubiin uusi versioarkisto. Kokeile hipulla tämän jälkeen kloonata versioarkisto lokaaliksi versioarkistoksi git clone -komennolla. Halutessasi pyydä kaveriakin kirjautumaan githubiin ja anna hänelle oikeudet versioarkistoon. Näin voi testata hajautettua kehitystä.

-- ErkkiIlmariRajakoski - 2013-05-14

Edit | Attach | Print version | History: r8 < r7 < r6 < r5 < r4 | Backlinks | Raw View | Raw edit | More topic actions...
Topic revision: r5 - 2013-05-15 - ljleppan
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback