Git versionēšanas sistēmas pamati

Par autoru

Mg. Phys. Kristaps Bergfelds ir LU FMOF Skaitliskās modelēšanas institūta pētnieks, kura ikdienas darbs saistīts ar fizikālu datu iegūšanu, apstrādi un attēlošanu. Papildus darbam institūtā Kristaps pasniedz programmēšanas praktiskos darbus LU fizikas studentiem (programmēšanas un datu apstrādes pamatus, izmantojot programmēšanas valodu Python). Šī raksta tapšanas pamatā ir Kristapa gadu gaitā uzkrātā pieredze un novērojumi par savu un kolēģu vajadzībām kopdarboties dažādu programmēšanas projektu izstrādē.

Ikviens, kurš kopā ar saviem kolēģiem veidojis kādu apjomīgu teksta dokumentu, ir saskāries ar versiju kontroles problēmām. Nereti nākas pārlūkot un sakārtot tādus dokumentus kā: dokuments.docx, dokuments_gala.docx, dokuments_gala_labots.docx, dokuments_gala_labots_2_velreiz_tiesam_pabeigts.docx utt. Šis process var būt mulsinošs, radīt kļūdas un apgrūtināt visus iesaistītos dokumentu veidotājus.

Lai šo procesu atvieglotu, dokumentu iespējams izvietot visiem kolēģiem pieejamā vietā un labot to centralizēti: vai mākoņdokumenta formā (Google Drive, OneDrive, Dropbox) vai koplietotā lokālā tīkla mapē. Minētājās dokumentu koplietošanas platformās ir pieejama versiju saglabāšana, lai vajadzības gadījumā varētu atjaunot agrāku dokumentu versiju. Pieejama arī izmaiņu iekrāsošana, lai redzētu, kas tieši ir atšķirīgs vienam dokumentam no otra.

Ar ļoti līdzīgām problēmām saskaras programmētāji kopš programmatūras izstrādes pirmsākumiem – arī programmu koda veidošanas gaitā nepieciešams mijiedarboties vairākiem izstrādātājiem, sekot līdzi izmaiņām, testēt dažādus programmas koda elementus, vajadzības gadījumā iegūt agrākas programmas koda versijas. Līdzīgi kā teksta dokumentu gadījumā arī programmas koda versiju kontrolei ir izveidota virkne specializētu rīku, piedāvājot dažādas iespējas specifiskām koda izstrādes vajadzībām, piemēram, iespēju veidot paralēlus koda attīstības ceļus un sazarotu versiju struktūru.

Šobrīd de facto koda versionēšanas sistēmas standarts programmētāju vidū ir Git platforma. Papildu dažādām tehniskām priekšrocībām un plašai popularitātei, īpaši jāuzsver šīs platformas atbalsts dažādu interneta platformu veidā – GitHub, GitLab, BitBucket. Tādēļ šajā rakstā tiek iepazīstināts tieši ar Git platformas lietošanu. Raksta mērķauditorija ir Windows lietotāji, kas vēlas izmantot versionēšanas sistēmas priekšrocības grafiskas saskarnes veidā (nevis ar komandrindas palīdzību).

Rakstā tiek sniegts ieskats Git lietošanas pamatprincipos, parādīta nepieciešamā instalējamā programmatūra Windows vidē, sniegts ieskats Git koda izstrādes projektu koplietošanā ar GitLab portāla palīdzību. Plašākai informācijai un tālākai zināšanu apguvei ļoti ieteicams ir šis ārkārtīgi kvalitatīvais, brīvi pieejamais materiāls, kura izstrādi atbalstījusi Nordic e-Infrastructure Collaboration (NeIC).

Git uzstādīšana uz sava datora un lokāla repozitorija demonstrējums

Lai sāktu lietot Git versionēšanas sistēmu, nepieciešams instalēt Git for Windows (instalācijas laikā saglabāt visus noklusētos iestatījumus). Šīs programmas uzstādīšana padara iespējamu Git izmantošanu tikai komandrindas režīmā. Tālākajās šī raksta sadaļās tiks parādīts kā to darīt ar grafiskas saskarnes palīdzību, bet vispirms tiek īsi demonstrēts lietojums komandrindā, lai ilustrētu Git darbības pamatprincipus un dažus jēdzienus.

Atverot instalēto Git komandrindu (Git Bash), izpildām dažas komandas, lai izveidotu mapi, kuras saturs tiks pakļauts versionēšanas kontrolei – t.i., tiks izveidots repozitorijs. Pie katras rindiņas pierakstītie komentāri atklāj komandu būtību.

$ mkdir MyProject    # Izveido jaunu mapi
$ cd MyProject       # Pārvietojas uz jauno mapi
$ git init           # Norāda, ka šajā mape būs repozitorijs

Izmantojot savus ierastos rīkus, mapē var izvietot programmatūras koda failus. Sniegtajā piemērā mapē ir izvietots Python skripts (my_program.py), kurš veic dažu matemātisku funkciju attēlojumu grafikā (myplot.pdf).

Lai saglabātu esošo .py skripta izstrādes stadiju versionēšanas vēsturē, nepieciešams izpildīt komandas, kas (1) pievieno failu versijas kontrolei (staging) un (2) atzīmē izdarītās izmaiņas versiju vēsturē, pievienojot paskaidrojošu komentāru (commit).

git add my_program.py                    # Pievieno failu versijas kontrolei
git commit -m "Initial code development" # Saglabā izmaiņas

Pēc tam, kad tas izdarīts, var izpildīt komandu git status, lai redzētu, kāds ir patreizējais repozitorija stāvoklis no versionēšanas sistēmas skata punkta. Komanda parādīs, vai ir izdarītas izmaiņas no pēdējās reizes, kad iesniegta (commit) kāda satura versija un vai ir faili, kuriem netiek sekots līdzi. Šajā piemērā netiek sekots līdzi failam myplot.pdf, jo tas ir izstrādātās programmas grafika izvads, kura precīzs saturs nav nozīmīgs – svarīgi ir sekot līdzi tā izveides programmas kodam.

Pēc repozitorija failu izmainīšanas (piem., turpinot attīstīt programmas kodu), izmaiņas saglabā atkārtoti izpildot jau minētās komandas (git add, git commit). Izpildot komandu git log, tiek parādīta versiju attīstības vēsture. Šajā piemērā redzams, ka veikti divi iesniegumi (‘Initial code development’ un ‘Small edits’).

Ja repozitorija failos izdarītās izmaiņas ir nepieciešams atsaukt, var izpildīt komandu git restore. Ir vēl daudz un dažādu iespēju: var atgriezt repozitoriju agrākos stāvokļos, var veidot paralēlus attīstības zarus, var īslaicīgi aplūkot kādu senāku iesniegumu. Tomēr jāatzīst, ka lietot Git iespējas komandrindā var būt neērti, nepārskatāmi un neatbilstoši tam darba stilam, kādu raksta lasītāji piekopj Windows vidē. Tāpēc raksta turpinājumā apskatām veidus, kā lietot Git repozitorijus ar grafiskās saskarnes palīdzību.

Git Extensions grafisko rīku lietošana

Instalācija un uzstādīšana

Lai lietotu grafisko saskarni Git repozitoriju pārvaldīšanai Windows vidē, ieteicams instalēt Git Extensions. Lai pilnvērtīgi lietotu šīs programmas iespējas, nepieciešams instalēt vēl divas papildus programmas: (1) WinMerge, kas tiks izmantota failu izmaiņu vizualizēšanai un (2) PuTTY, kas padarīs ērtāku darbu ar attālinātiem repozitorijiem (piem., GitLab).

Pēc Git Extensions instalācijas ir ļoti nozīmīgi sakārtot visus programmas iestatījumus – šim nolūkam programmas iestatījumu (‘Settings’) logs piedāvā ērtus pārbaudes punktus, pēc kuriem vadīties. Jāpanāk, ka visi iestatījumi uzrādīti kā derīgi (zaļa krāsa).

Sadaļā ‘difftools’ jānorāda iepriekš pieminētais un uz datora instalētais WinMerge rīks. Pēc PuTTY instalācijas iestatījumu sadaļā ‘SSH’ jāatzīmē PuTTY.

Lietošana

Pēc programmu uzstādīšanas un iestatījumu sakārtošanas, iespējams pilnvērtīgi lietot Git repozitorijus bez komandrindas palīdzības. Jebkurā Windows mapē labais peles klikšķis atklāj Git Extensions piedāvātās iespējas: pārlūkot esošu vai izveidot jaunu repozitoriju, kopēt (clone) repozitoriju no citas vietas (piem., GitLab vietnes).

Mapē, kurā jau ir izvietots repozitorijs, būs iespēja izvēlēties komandu ‘GitExt open repository’. To izvēloties, atveras logs kurā var pārskatīt repozitorija izmaiņu vēsturi, redzēt to autorus un pievienotos komentārus.

Saskarnē var spiest pogu ‘Commit’, lai veiktu repozitorija satura versijas izveidi, līdzīgi kā iepriekš demonstrēts ar komandrindas palīdzību. Tikai šajā gadījumā tiek nodrošināta papildu vizualizācija un pārskatāmība, ko piedāvā Git Extensions vide.

Ļoti vērtīga un bieži izmantota iespēja ir labot .gitignore failu, (Repository / Edit .gitignore), kurā norāda tos failus un failu tipus, kuru izmaiņas ignorēt un nepakļaut versiju kontrolei. Sniegtajā piemērā tas ir izstrādātās programmas izvadītais PDF fails.

GitLab platformas lietošana ērtai projektu koplietošanai

Līdz šim rakstā tika aplūkots individuāls/lokāls Git repozitorijs. Taču būtiska priekšrocība versionēšanas sistēmas lietošanai ir iespēja ērti un pārskatāmi kopdarboties. Tieši tādēļ ir izveidoti vairāki uz Git bāzēti interneta servisi ar iespēju izvietot attālinātus repozitorijus un kopīgot tos. Šajā sadaļā demonstrēta viena šāda servisa lietošana: GitLab.com. Jāatzīmē, ka Latvijas Universitāte nodrošina uz GitLab bāzētu platformu git.lu.lv, kurā var iekļūt ar LUIS lietotājvārdu un paroli.

Reģistrēšanās un repozitorija izveide

GitLab platformā var reģistrēties gan ar e-pastu, gan ar Google kontu. Platforma piedāvā pilnvērtīgas bezmaksas lietošanas iespējas, bet to iegūšanai reģistrācijas gaitā ir jāpamana un jālieto poga ‘Skip Trial’.

Pēc veiksmīgas konta izveides ir iespēja izveidot savu attālinātos repozitorijus – piešķirt tiem nosaukumu, aprakstu, privātuma pakāpi (privāts, dalīts grupai, publisks) u.c. parametrus.

SSH atslēgas pievienošana

Lai varētu sava datora lokālos repozitorijus augšuplādēt (git push) attālinātajā GitLab vidē, kā arī lejupielādet (git clone) savus privātos repozitorijus, nepieciešams veids, kā autentificēt savu lokālo datoru darbam ar konkrēto GitLab kontu. Šim nolūkam tiek lietotas SSH atslēgas.

Lai iespējotu šo autentifikācijas veidu, nepieciešams izveidot privātās un publiskās SSH atslēgas pāri. Privātā SSH atslēga ir nekas vairāk kā ļoti gara un droša parole. Savukārt publiskā SSH atslēga ir šai parolei atbilstošs, publiski izpaužams autentifikācijas marķieris. Jāatzīst, ka būtu atbilstošāk publisko atslēgu nosaukt par ‘slēdzeni’, kuru lietotājs var ierīkot sev vēlamā vietā – šajā gadījumā GitLab portālā.

Windows vidē SSH atslēgu pāra izveidei lieti noderēs PuTTYgen rīks, kas pieejams uz datora, ja instalēta iepriekš pieminētā PuTTY programma. Sekojot norādēm programmas logā, iespējams iegūt gan privāto atslēgu (saglabājama .ppk failā), kā arī publisko atslēgu (jāveic copy/paste darbības GitLab portālā sadaļā User Settings / SSH Keys).

Attālināto repozitoriju iegūšana

Lai iegūtu GitLab portālā izvietotu repozitoriju (tai skaitā, lai uzsāktu darbu ar jaunizveidotu/tukšu repozitoriju), jānokopē tā SSH adrese.

Uz sava datora, nospiežot labo peles taustiņu kādā mapē, jāizvēlas komanda GitExt Clone. Jānorāda GitLab portālā iegūtā adrese, jānorāda privātā SSH atslēgta (Load SSH Key), jāspiež poga ‘Clone’.

Pēc repozitorija veiksmīgas kopēšanas (klonēšanas), varēs turpināt/uzsākt darbu ar tā saturu, kā demonstrēts iepriekš. Tomēr tagad, papildu jau iepriekš apskatītajai ‘Commit’ darbībai, ir pieejama arī ‘Push’ darbība, kas lokālajā repozitorijā izveidotās versijas augšuplādē attālinātajā repozitorijā. Analoģiski var veikt arī ‘Pull’ darbību, kas lejupielādēs citu izdarītās izmaiņas.

Publisku repozitoriju iegūšana

Ja repozitorijs ir iestatīts par publiski pieejamu, jebkurš to var lejupielādēt (git clone), izmantojot GitLab platformā piedāvāto repozitorija HTTPS adresi. Zemāk demonstrēts, kā šajā rakstā demonstrētais publiskais repozitorijs tiek lejupielādēts uz SMI augstas veiktspējas skaitļošanas klastera ar komandrindas palīdzību.

Noslēgumā

Rakstā sniegts ieskats darbam ar lokāliem Git repozitorijiem Windows vidē, izmantojot grafiskās saskarnes programmu Git Extensions. Demonstrēti pamati GitLab vides lietošanā, attālinātu repozitoriju izveidē, clone/push/pull darbību veikšanā. Tajā pašā laikā rakstā netiek apskatīta virkne ar Git sistēmas, kā arī GitLab portāla priekšrocībām. Noslēgumā īpaši jāuzsver viena no tām: projektu dokumentācijas veidošana.

GitLab attālināto repozitoriju pārlūkošanas saskarnē var attēlot repozitorija dokumentāciju ar README.md faila palīdzību, t.i., ja repozitorijā atrodas teksta fails ar nosaukumu README.md, tas tiks priekšskatīts GitLab vietnē. Šos dokumentācijas failus iespējams noformēt ar dažādām tekstveides komandām.

* Nulla vel sem volutpat, volutpat sapien sed, egestas ligula.
* _Vestibulum fermentum lectus et finibus volutpat._
* __Vestibulum tristique turpis quis enim porta vestibulum.__
* `Nam facilisis sapien vitae gravida ultricies.`
* [Nam commodo purus in faucibus fermentum.](https://modinst.lv)

Augstāk parādītās tekstveides komandas, ievietotas README.md failā, tiks attēlotas GitLab portālā sekojošā veidā:

Cerams, ka šis raksts palīdzēs Git lietošanas uzsākšanā un ļaus efektīvāk un ātrāk kopdarboties dažādu programmēšanas uzdevumu veikšanā.