Versionhallinta

Olet ehkä joskus tallentanut versioita kouluesitelmistä, piirroksista, omista biiseistä tms. jotta voit tarvittaessa palata takaisin johonkin aiempaan versioon, jos teit jonkin muutoksen johon et ollut tyytyväinen. Olet ehkä joskus lähettänyt tiedostoja kaverille, joka on tehnyt niihin omat muutoksensa ja lähettänyt tulokset sinulle takaisin.

Google drive, Office 365 ja kumppanit tarjoavat mahdollisuuden editoida joitakin dokumentteja yhdessä ja palata tarvittaessa historiassa taaksepäin. Ne eivät kuitenkaan sovellu ohjelmistokehitykseen, koska ne eivät käsittele monia tiedostoja kerralla, eivät tarjoa mahdollisuutta kehittää eri ominaisuuksia rinnakkain eikä projektista ole mahdollista saada jatkuvasti viimeisintä ehjää versiota silloinkin kun joku tekee töitä dokumentin parissa.

Käsittelemme tässä tutoriaalissa Git:iä, mutta on syytä mainita, että git ei suinkaan ole ainoa käytössä oleva ratkaisu versionhallintaan. (SVN, Mercurial, darcs, etc.)

Ohjelmistokehitys ja Git

Karkeasti ajatellen ohjelmistokehityksessä tapahtuu seuraavanlaisia asioita, jotka liittyvät versionhallintaan:

  • Aloitetaan uusi projekti tai liitytään mukaan jonkun toisen aloittamaan projektiin
  • Luodaan uusia tiedostoja (luokkia, tekstitiedostoja, kuvia, jne)
  • Muokataan yhtä tai useampaa toisiinsa liittyvää asiaa jotta voidaan lisätä uusi ominaisuus tai korjata bugi.
  • Koodin muokkaukset voivat olla sarja vähän pidempää osuutta. Uuden ominaisuuden kehittäminen harvoin tapahtuu yhdellä pikku muutoksella.
  • Joskus tiedostoja voidaan myös poistaa tai siirrellä / nimetä uudelleen
  • Yhdistellään useampien ihmisten tekemät muuttamat versiot yhdeksi kokonaisuudeksi.

Tyypillisiä versionhallinnallisia toimia lyhyesti

Seuraavassa kuvataan lyhyesti, kuinka jotkin projektin koodin hallinnointiin tehtävät asiat tehtäisiin git:illä. Kerromme tässä tarvittavien komentojen nimet, mutta tarkempi syntaksi on selitetty eri ohjesivulla.

Uuden projektin aloittaminen hakemalla olemassaoleva projekti omalle koneelle

Olemassaolevan projektin kloonaaminen omalle koneelle tapahtuu komennolla git clone. Se luo koneesi levylle uuden hakemiston (kansio), jossa on sekä kaikki projektin tiedostot, sekä niiden historia. Gitin avulla voit nyt pitää kirjaa tiedostojen muutoksista tässä hakemistossa.

Uuden tiedoston lisääminen projektiin

Luotu hakemisto ei ole millään tavalla erilainen kuin mikään muukaan hakemisto koneellasi. Voit luoda sinne tiedostoja aivan samalla tavoin kuin muuallekin levylle. Tiedostot eivät kuitenkaan siirry itsestään versionhallintaan, vaan niistä täytyy vinkata gitille. Tiedoston lisääminen tapahtuu samalla tavoin kuin kertominen muutoksesta tiedoston sisältöön, josta puhumme seuraavaksi.

Yhden tai useamman tiedoston (hallittu) muutos

Lähestytään tätä esimerkin kautta: Olet juuri joutunut nimeämään jossain luokassa olevan metodin ja korjaamaan muita luokkia jotka käyttivät tätä metodia. Versionhallinnan näkökulmasta olisi hienoa että tiedostoihin tehdyt muutokset tapahtuvat yhdessä, yhtenä muutoksena versiosta toiseen.

Komennolla git add voidaan lisätä jokainen muuttunut (tai kokonaan uusi) tiedosto niiden tiedostojen joukkoon joiden muutokset kirjataan yhdessä versionhallintaan. Kun kaikki halutut tiedostot on valittu, voidaan komennolla git commit viedä muutos versionhallintaan, kirjaten samalla kuka muutoksen teki, milloin, ja ennen kaikkea, mistä muutoksessa oli kyse.

Hieman pidemmät kehityspolut

Useammasta commitista koostuvat kehityspolut on mahdollista luoda git:issä omina kehityshaaroinaan (branch). Tämä on hyvä idea esimerkiksi silloin kun kehitetään jotakin uutta ominaisuutta. Upouudessa projektissa on aluksi yksi branch nimeltään master.

Muiden tekemien muutosten noutaminen omalle koneelle

Muiden toimijoiden projektissasi tekemät muutokset voi hakea omalle koneelleen komennolla git pull. Ideaalitilanteessa mikään muutoksista ei kohdistu samaan osaan koodia kuin muutokset joita olet itse tehnyt. Tällöin kaikki toimii automaattisesti ja muiden tekemä työ ilmestyy projektisi tiedostoihin.

Jos olet muokannut samoja alueita tiedostoista kuin muut, tiedostojen yhdistely ei tapahdu automaattisesti. Tällöin git merkitsee tiedostoihin muuttuneet kohdat, näyttäen tekstin kummassakin versiossa. Sinun tehtäväsi on valita versioista parempi tai yhdistellä ne yhteen uudeksi toimivaksi versioksi.

Omien muutosten vieminen palvelimelle (Gitlab/Github jne.)

Komento git push lähettää tekemäsi muutokset palvelimelle (etärepositoryyn, remote repository). Tämä onnistuu vain ja ainoastaan silloin kun olet ensin hakenut palvelimelta muiden tekemän työn ja yhdistänyt sen osaksi omaa repository:asi.

Lyhyesti

Kun olet saanut luotua git repositoryn omalle koneellesi, on tavallinen toimintamalli usein seuraava.

1) Aluksi git pull Jos mitään ei ole kesken, voit aloittaa noutamalla muiden ryhmäläisten työn omalle koneellesi. Yhdistele muutokset tarvittaessa. 2) Kirjoita uutta koodia, korjaile virheitä jne. 3) Kun kaikki on valmista, valitse muuttamasi tiedostot komennolla git add ja tee lopuksi commit git commit 4) Jos haluat lähettää työsi hedelmät muille, tee aluksi git pull saadaksesi muiden uden työn koneellesi. Yhdistele tarvittaessa. ja suorita tämän jälkeen git push

Ylläoleva on äärimmäisen yksinkertainen tapa toimia (workflow). Siinä kaikki kehittäjät tekevät muutoksensa master-haaraan. Tämä on hyvä tapa tutustua versionhallintaan, josta voi myöhemmin siirtyä mm. käyttämään ns. feature branch:eja. Emme käsitelleet tässä myöskään toimintatapoja, joissa kehittäjillä on omia etärepositoryja.

Last modified: Monday, 21 September 2020, 3:24 AM