Git ja versioonihaldus

Kui otsid kiiret juhendit giti kasutamiseks TTÜ's, leiad selle siit: Giti kasutamine TTÜs

Ülevaatlik video Git ja versioonihalduse kasutamise kohta:

Mis, kuidas ja miks?

Git on versioonihaldustarkvara, mis võimaldab koodis tehtud muudatusi säilitada ning neile ligi pääseda erinevatest arvutitest. Selleks tuleb luua enda projekti kausta git'i repositoorium ehk salv. Salv sisaldab lisaks projekti failidele ka .git kausta, mis hoiab versioonihalduseks vajalikku infot. (vt Uue repositooriumi loomine)

Võib juhtuda, et vajalik salv on juba olemas - näiteks juhul kui soovid edasi arendada mõnd olemasolevat projekti või esitad kodutöid ttü ainetes. Sel juhul pole uut salve vaja luua. Kui sul on olemas salve aadress, saad sellest endale sobiva koopia teha. (vt Git repositooriumi kloonimine)

Kui repositoorium on loodud või kloonitud, võib hakata faile muutma või lisama. Kui lood uusi faile, tuleb need lisada add käsuga - nii teab git, et neid faile on vaja jälgida. Serveris või teistes arvutites olevaid projektifaile automaatselt ei muudeta. Kui soovid viimati tehtud muudatused salvestada ühe versioonina, tuleb selleks teha commit. Ka see ei vii muudatusi edasi serverisse, kuid enda arvutis saad vajadusel alati selle versiooni taastada.

Kui soovid oma muudatused serverisse üles panna, tuleb teha push. Selle tagajärjel kopeeritakse viimati tehtud commit'id serverisse ning need on kättesaadavad kõikidele, kes on salve klooninud. Selleks, et serverist muudatusi kätte saada, tuleb teha pull.

Kui sinu push satub konflikti serveri viimase seisuga (näiteks keegi on vahepeal samu faile muutnud), siis proovib git neid kokku põimida ehk merge'ida. Kui see ei õnnestu, siis tuleb merge teha käsitsi, valides välja muudatused, mida soovid alles jätta. Kõige lihtsam on seda teha mõne graafilise kasutajaliidese või IDE abil, mis näitab mõlemat versiooni kõrvuti.

Git'i kasutatakse tihti suurte projektide puhul, kus teevad korraga tööd mitu inimest. Git võimaldab neil teha tööd iseseisvalt ning panna muudatused üles alles siis, kui nende poolt lisatud osa töötab korrektselt. Kui mõni muudatus teeb midagi katki, on alati võimalik eelmise versiooni juurde tagasi pöörduda ning samuti on väga ebatõenäoline, et keegi kustutab kogemata kaaslase tehtud töö jäädavalt ära.

Paigaldamine ja seadistus

Git'i allalaadimise ja paigalduse kohta saab infot git'i kodulehelt: https://git-scm.com/downloads.

Üldjuhul võib paigaldamisel "next"-nuppude abil lihtsalt edasi minna, kuna vaikimisi valikud sobivad.

Windows'is on käskude jooksutamiseks CMD, Git Bash või WSL. Linux'is ja Mac OS X'is Terminal.

Esmakordsel Git'i käivitamisel tuleb kindlasti seadistada e-posti aadress ja nimi, mis lisatakse tehtud committidele juurde kui autorina. Vastasel juhul ei ole võimalik kõiki vajalikke toiminguid teha. Lihtsaim moodus on kirjutada käsureale järgnev käsk:

git config --global user.email john@example.com
git config --global user.name "John Smith"

Ülaltoodud käsus tuleks asendada "john@example.com" enda reaalse kasutatava e-posti aadressiga. Kontrollimaks, kas e-posti aadress on õigesti omistatud Git'ile, tuleks käsureale kirjutada käsk:

git config --global user.email

Peale käsu andmist kuvatakse e-posti aadress, kuhu hakatakse teateid saatma.

Uue repositooriumi loomine

Esmalt tuleks navigeerida kausta, kuhu tahetakse Git'i repositooriumi luua. Seejärel tuleks käsureal sisestada käsk:

git init

See käsk loob alamkausta nimega .git, mis sisaldab kõiki vajalikke repositooriumi faile.

Git repositooriumi kloonimine

Esmakordseks salve kopeerimiseks, arvutisse alla laadimiseks. Kloonimise puhul on oluline, et sama nimega projekt juba ei eksisteeri.

git clone username@host:/path/to/repository
git clone https://gitlab.com/path/to/repository.git

Failide lisamine

Ühe faili lisamine:

git add <faili_nimi>

Kõikide failide lisamine:

git add *

Failide kustutamine:

git rm <faili_nimi>

Muudatuste registreerimine kohalikus arvutis

git commit -m "lühike kommentaar tehtud muudatuste kohta"

Kommentaar on vajalik selleks, et suudaksid hiljem erinevaid versioone eristada. Kommentaar ei tohiks olla liiga pikk, aga peaks kokku võtma kõik muudatused, mida antud commit hõlmab.

Commit käsk registreerib muudatused kohalikus arvutis, aga alles push käsk laeb need serverisse üles.

Muudatuste üles laadimine serverisse

git push origin master

master'i võib asendada mõne teise haru nimega, kuhu tahetakse muudatusi lükata. Harudest on pikemalt räägitud allpool.

Kui on vaja vaadata, milliseid faile on muudetud, ning mida on vaja Git'i lisada või muudatusi registreerida, siis selleks on käsk:

git status

Muudatuste allalaadimine serverist ja kohalike muudatuste integreerimine

git pull

Kui oled vahepeal mõnest teisest arvutist muudatusi üles laadinud või jagad haru kellegi teisega, on soovitatav enne töö alustamist pull ära teha. Nii on sul kõige värskem versioon oma koodist ning tõenäosus, et uued muudatused satuvad konflikti serveri versiooniga, on väiksem.

Harud

Harusid kasutatakse, et viia paraleelselt sisse muudatusi, mis on teineteisest isoleeritud. master haru on vaikimisi haru repositooriumi loomisel. Teisi harusid on mõistlik kasutada arendamiseks ja seejärel master haruga ühendamiseks (merge), kui arendus on lõpetatud.

../_images/git_branches.png

Allikas: https://stackoverflow.com/questions/20755434/what-is-the-master-branch-and-release-branch-for

Kõikide repositooriumis olevate harude loetelu saamine:

git branch

Loo uus haru (asenda <haru_nimi> uue haru nimetusega):

git branch <haru_nimi>

Kustuta haru (Git ei lase kustutada haru, kui selles on salvestamata muudatusi):

git branch -d <haru_nimi>

Loo uus haru <haru_nimi> ja vahetu sellele:

git checkout -b <haru_nimi>

Vahetu tagasi master harule:

git checkout master

Ühenda teine haru oma aktiivse haruga (näiteks master):

git merge <haru_nimi>

Graafiline kasutajaliides

Graafiline kasutajaliides näitab mugavalt ja graafiliselt välja ajaloo: muudatuste üleslaadimised serverisse koos aja ja kommentaariga, tehtud muudatused failis, harud jpm. Sisseehitatud kasutajaliidese saab käivitada käsurealt:

gitk

Lisaks sisseehitatud kasutajaliidesele on olemas ka teisi sarnaseid, mis teevad giti kasutamise mugavamaks: https://git-scm.com/downloads/guis/

Probleemid

Käsurea git'i kasutades võib ette tulla erinevaid veaolukordi, mida on algajana raske mõista. Kui olukorda ei õnnestu iseseisvalt lahendada ja oleks vaja kiiresti edasi minna, siis aitab vahel ka värske koopia tegemine git clone abil. Sel juhul tuleb tehtud muudatused uude kausta ümber tõsta ning edaspidi seal tegutseda.

Kui ühtegi veateadet ei tulnud, aga kood ei jõudnud serverisse, tasub kontrollida, et push läheb õigesse kohta. Vahel juhtub, et mitme õppeaine jaoks klooniti juhendit järgides sama aadress ning uued failid on teise aine repositooriumis.

git remote show origin

Kasulikke linke:

http://rogerdudler.github.io/git-guide/

https://www.atlassian.com/git/tutorials/what-is-git

https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control