20 Versioonihaldus Githubis

Versioonihaldus

Kui mõelda erinevatele tekstidele, siis osa neist kirjutatakse kohe lõpuni valmis ja lähevad käiku. Nii kipub olema näiteks lühikeste tekstisõnumite puhul, kui pahatihti isegi sissejäävatest kirjavigadest ei hoolita. Mitmete teiste tekstide puhul aga on teksti loomisel mitu etappi ja nende käigus tekivad tekstist erinevad variandid. Ka samalaadsete tekstide puhul võib esineda erinevaid lähenemisi. Näiteks kirjutas Eduard Vilde vähemalt osa on romaanidest nii, et vastvalminud peatükid läksid kohe trükki. Friedebert Tuglas aga kirjutas oma teoseid mitmeid kordi uuesti läbi. Kui ühe teksti kallal tegutsevad mitu inimest, siis on erinevate variantide tekkimine eriti loomulik.

Kui nüüd tuleme programmeerimise juurde, mis on ju samuti tekstide loomine, siis saame välja tuua mõned iseloomulikud aspektid. Reeglina ei valmi kogu programm lõplikult n-ö ühe hooga ning sageli on protsessi kaasatud mitu inimest. Juba siit nähtub, et mitmete variantide tekkimine on vähegi pikemate programmide puhul praktiliselt vältimatu. Ühe väga olulise nüansina tuleb märkida varasemate versioonide säilitamise vajadust. Paljude tarbe- ja ilukirjanduslike tekstide puhul ei pruugi varasemad variandid erilist tähendust omada — vead parandatud, sisu täiendatud —, mis neist vanadest mustandistest ikka hoida. Programmide puhul on aga üsna tavaline, et arenduse käigus on vaja tagasi minna vanemate versioonide juurde. Näiteks selgub, et nii midagi ikka ei toimi või peaks midagi hoopis teisiti tegema. Eriti kui tegijaid on mitu, siis on üsna tavaline, et toimub harunemine — erinevaid versioone hakatakse erinevalt edasi arendama — ja see võib anda päris keerulise versioonide struktuuri.

Kogu seda protsessi aitaks korraldada süsteem, milles oleks koht erinevate versioonide hoidmiseks, seejuures nii, et oleks näha nende areng ja erinevused. Versioone peaks olema mugav lisada ja hallata. Juurdepääs peaks olema tagatud erinevatele asjassepuutuvatele inimestele.

Ei ole vast eriti suur üllatus, et sellised versioonihaldussüsteemid (inlg version control system) on täiesti olemas. Enne, kui konkreetse süsteemi juurde läheme, tutvume mõnede mõistetega, mis edasise läbitöötamisel vajalikud on. Projekti kõiki versioone hoitakse repositooriumis ehk varamus (ingl repository). Isegi kui kõik muudatused automaatselt registreeritakse, on mõistlik teatud kohtades koos mitu muudatust registreerida (ingl commit). Päris sageli tuleb ette olukordi, kus tahetakse näiteks midagi katsetada ja selle jaoks on sobiv luua uus haru (ingl branch) nagu näidatud joonisel 1. Harud saab kokku viia mestimisega (ingl merging).

Joonis 1. Projekti uue versiooni kujunemise haru

Iga versioonihaldustarkvara keskne osa on andmebaas, kus hoitakse projektide kõiki versioone. Seda andmebaasi nimetatakse repositooriumiks ehk varamuks (ingl repository). Kui varamu asub keskses serveris, nimetatakse versioonihaldustarkvara tsentraliseerituks. Failidega töötamiseks tehakse nendest väljavõte, seejärel teeb kasutaja muudatused ning salvestab uue versioonina. Kogu tegevus eeldab ühendust keskse serveriga. Selleks, et mitu inimest ei muudaks korraga ühte ja sama faili, kasutatakse failide lukustamist või mestimist (ühendamist). Hajutatud versioonihaldustarkvara puhul aga on kõikidel kasutajatel võimalik kloonida projekti kõikidest versioonidest koopia. Seejärel saab teha muudatusi oma arvutis sõltumata võrguühendusest ning hiljem sünkroniseerida teiste kasutajate versioonidega.

Hajutatud versioonihaldus on väga levinud just avatud lähtekoodiga (koodile on avalik ja vaba juurdepääs) projektide arendamisel. Kõige populaarsem versioonihaldustarkvara on Git, mis on ka ise avatud lähtekoodiga. Aastal 2005 lõi selle Linus Torvalds, algne eesmärk oli lihtsustada koostööd Linuxi arendamisel (https://et.wikipedia.org/wiki/Git). Git talletab lisaks projekti erinevatele versioonidele ka erinevad arendusharud, mida saab omavahel liita. Seetõttu sobib tarkvara hästi ka suurematele projektidele. Samuti on see populaarne võimalus projekti lähtekoodi avalikustamiseks. Gitil toimiv suurim teenus on GitHub, millel on enam kui 33 miljonit kasutajat (https://github.com/search?q=type:user&type=Users). Sarnased teenused on ka näiteks GitLab, BitBucket ja SourceForge. Nende teenuste kaudu on võimalik koodi üles panna, nii et oma git-serverit ei ole vaja.

Versioonihaldus GitHubis

Giti paigaldamine ja konto loomine GitHubis

Versioonihalduseks on meil vaja kõigepealt aadressilt https://git-scm.com/ alla laadida ja paigaldada versioonihaldustarkvara Git ning seejärel luua GitHubi konto. Giti paigaldamisel üldjuhul vaikevalikud sobivad ja saab Next-nuppude abil järjest edasi liikuda.
Selleks, et teha GitHubi konto, tuleb minna aadressile https://github.com, sisestada kasutajanimi, meiliaadress ja salasõna, seejärel vajutada Sign Up for GitHub ja järgida edasisi juhiseid.

Repositooriumi loomine GitHubis

Pärast keskkonda sisenemist tuleb valida New repository, et luua uus repositoorium (vt joonis 2).

Joonis 2. Uue repositooriumi loomise valimine menüüst pärast GitHubi konto registreerimist
Seejärel avaneb leht, kus saab panna repositooriumile nime, samuti on võimalik määrata, kas see on avalik või mitte. Uue repositooriumi puhul tuleb märkida ka valik Initialize this repository with a README.

Joonis 3. Uue repositooriumi loomine

Repositooriumi aadress on kujul https://github.com/kasutajanimi/nimi, kus kasutajanimi on igaühe GitHubi kasutajanimi ja nimi repositooriumi nimi (kui GitHubis avada repositoorium, leiab selle aadressirealt). Kui näiteks GitHubi kasutajanimi on githubiprojektid ja repositooriumi nimi testGit, on aadress https://github.com/githubiprojektid/testGit.

Githubi projekti jagamine teiste kasutajatega

Videonäide Githubi projekti jagamisest:
https://www.youtube.com/watch?v=sOciDss1EEY

Failide üleslaadimine arvutist Githubi

Kui kasutajakonto on loodud, siis on aeg proovida failide üleslaadismist Githubi.
Järgnevalt tutvustatakse selleks nelja erinevat versiooni:

  1. Veebis (Github.com)
  2. Windowsis (Giti programmiga)
  3. Windowsis (CMD käsurealt)
  4. Mac / Linux (Unixi käsurealt)
  5. PyCharm ja Github

1) Veebis (Github.com)

Ingliskeelne juhis: https://guides.github.com/activities/hello-world/

2) Windowsis (GitHub desktopi programmiga)

Ingliskeelne video: https://www.youtube.com/watch?v=77W2JSL7-r8

3) Windowsis (CMD käsurealt)

Kaustade vahel liikumine

Järgmine samm on luua arvutisse kaust, kuhu hiljem repositoorium kloonida. Seejärel avame Git Bashi, kus saab käsurea käskudega tegutseda (Windowsi puhul on Gitiga kaasas Git Bash, teiste operatsioonisüsteemide puhul on teisiti).
Kui me tegime näiteks arvuti C-kettale kausta nimega git_test, siis saame sinna Git Bash’i kasutades liikuda järgnevalt:

cd c:/git_test

Samuti on võimalik liikuda kaustade kaupa, nt c:/ ja vajutada enterit, seejärel järgmise käsuna cd git_test. Kui käsureale kirjutada pwd, näeme, millises kaustas hetkel oleme. Kausta sisu vaatamiseks on käsk ls ja kataloogipuus ülespoole liikumiseks cd ..

Joonis 4. Kaustade vahel liikumine ja nende sisu vaatamine Git Bash’is

Giti seadistamine

Enne repositooriumi kloonimist ja failide lisamist on vaja Git seadistada. Selleks saab kasutada järgnevaid käske:

git config –global user.name “kasutajanimi” (siia tuleb koos jutumärkidega lisada GitHubi kasutajanimi, meie näite puhul oleks käsk git config –global user.name “githubiprojektid”)

git config –global user.email meiliaadress (siia tuleb lisada see meiliaadress, mida sai kasutatud GitHubi konto registreerimisel)

Repositooriumi kloonimine

Enne kloonimist on vaja liikuda sellesse alamkausta, mille me tegime arvutis repositooriumi jaoks. Kui näiteks tegime C-kettale kausta nimega git_test, saame sinna liikuda cd c:/git_test

Nüüd saame repositooriumi kloonida, lisades ka repositooriumi aadressi. Seda saab teha järgnevalt:

git clone aadress (kui GitHubis on repositoorium avatud, leiab selle aadressirealt)

Joonis 5. Liikumine alamkausta ja repositooriumi kloonimine

Kui kloonimine õnnestus, lisati arvutisse (meie näite puhul git_test-kausta) alamkaust, mille nimi ja sisu on samad kui GitHubi repositooriumil, mille kloonisime. Sellesse kausta saamegi hakata oma projektiga seotud faile looma.

Faili lisamine

Kui oleme loonud oma arvutis asuvasse repositooriumi kausta faile, saame neid add-käsuga lisada, et Git teaks neid jälgida. Failide ja muudatuste lisamiseks liigume Git Bash’is käskude abil repositooriumisse (meie näite puhul cd c:/git_test/testGit). Kui näiteks tegime testGit kausta faili nimega tere.py, tuleb toimida järgnevalt:

git add tere.py

Muudatuste registreerimine

git commit -m "Kommentaar" tere.py

Käsk commit registreerib faili arvutis ning juurde saab lisada kommentaari. Kommentaar peaks olema lühike ja võtma kokku muudatuste sisu.
Kui tahame teada, kas on faile, mis on vaja add-käsuga lisada või ei ole veel registreeritud, saame teha seda järgneva käsuga:

git status

Joonis 6. Faili lisamine ja muudatuste registreerimine

Muudatuste üleslaadimine GitHubi

Kui lisamine ja registreerimine oma arvutis on tehtud ja soovime faili panna GitHubi serverisse, saame teha seda järgnevalt:

git push -u origin master

Kui kõik õnnestus, ilmusid muudatused GitHubi (kui GitHubi repositoorium oli juba lahti, siis tuleb muudatuste nägemiseks vajutada brauseri aknas Refresh). Git Bush’is saame käsuga käsuga git status alati kontrollida, kas midagi on veel lisada, registreerida või üles laadida.

Joonis 7. Muudatuste üleslaadimine GitHubi

Muudatuste allalaadimine

Selleks, et muudatusi alla laadida, on järgnev käsk:

git pull

4) Macis ja Linuxis (Unixi käsurealt)

Ingliskeelne lühijuhend: https://gist.github.com/seankross/8830032

Uue repositooriumi loomine käsurealt

touch README.md

git init

git add README.md

git commit -m "esimene kommentaar"

git remote add origin https://github.com/seankross/womp.git

git push -u origin master

Olemasoleva repositooriumi üleslaadimine käsurealt

git remote add origin https://github.com/seankross/womp.gi

git push -u origin master

5) PyCharm ja Github

Ingliskeelne video: https://www.youtube.com/watch?v=UBLONzkmReE

Litsents

Versioonihaldus Githubis Copyright © by Eno Tõnisson, Tauno Palts, Kaarel Tõnisson, Heidi Meier, Merilin Säde, Ago Luberg, Birgy Lorenz, Einar Kivisalu, Meelis Antoi, ja Säde Mai Krusberg. All Rights Reserved.

Jaga seda raamatut