2. Git veikimo principas, diegimas ir konfigūravimas

Git diegimas

Pradėkime nuo "neįdomių" dalykų - paruošimo darbų. Kol kas, nesigilinant į tai, kas ką reiškia - tiesiog reikia įdiegti Git į kompiuterį. Pačios platformos diegimas priklauso nuo jūsų operacinės sistemos. Kadangi Lietuvoje populiariausia yra Windows platforma, tai pavyzdžius rodysiu viso kurso metu būtent su ja (kaip tik ką tik įdiegiau šviežutėlę Windows 10 tai pačiam įdomu), bet pačios komandos nesiskirs, šiek tiek kitoks bus tik diegimas.

Windows sistemai viskas susiveda į vieną paketą, kurį galite parsisiųsti šiuo adresu:
https://git-scm.com/download/win

Pastaba. Kitoms operacinėms sistemoms diegimo informaciją rasite šiame puslapyje.
Pats diegimas vyksta įprastu "Next" -> "Next" -> "Finish" principu, palikite visus nustatymus kaip siūloma, esminis svarbus langas yra tik šitas:

Paaiškinsiu ką jis reiškia: Git komandas galima rašyti per specialią komandinę eilutę pavadinimu Git Bash, kuri bus įdiegta kartu su šiuo paketu, bet galima tą patį daryti ir su Windows sistemos komandine eilute Command Prompt. Tai šiuo atveju aš rekomenduoju jums rinktis antrąjį variantą, nes gal jums asmeniškai pažįstama komandinė eilutė bus patogesnė. Bet šiaip jei pasirinksite ir vien Git Bash - nieko tokio, realiai visas komandas šio kurso metu aš rodysiu būtent su ta programa.

Bus dar keletas tarpinių langų su klausimais, bet, kaip sakiau, palikite visus nustatymus kaip jums siūloma - jei norėsite, vėliau galėsite paanalizuoti, ką jie reiškia.

Ir viskas, galima naudotis Git. Iš principo, yra du įrankiai, kuriais galite naudotis - įrašę paieškoje git, pamatysite Git Bash (komandinė eilutė) ir Git GUI (vizualus įrankis):

Apie Git GUI dabar net nepasakosiu, nes viso kurso metu dirbsime ir rašysime komandas būtent per Git Bash komandinę eilutę, bet tiesiog turėkite omenyje kad yra ir GUI įrankis daugeliui komandų atlikti vizualiai.

Na, o Git Bash, jį paleidus, atrodo daugmaž taip:

Kaip ir paprasta komandinė eilutė, tik gal su šiek tiek daugiau spalvų. Tai tam kartui kaip ir viskas su diegimu, dabar prieš rašant komandas pats laikas apžvelgti apskritai Git veikimo principus.

Git veikimo principas ir pirmosios komandos

Visgi pradėkime iš karto nuo praktikos - neišsigąskite, taip bus ir paprasčiau suprasti teoriją, ir įdomiau jums patiems.
Sakykime, kad kuriame naują PHP projektą, visiškai nuo nulio, dėl paprastumo nenaudodami jokio frameworko. Tiesiog "Hello World".
Atidarome mėgstamą kodo redaktorių (pats naudosiu Sublime Text) ir įrašome:
<?php echo "hello world";

Išsaugome index.php ir jau turime "paruoštą" projektą - tiksliau jo pirmąją versiją. Nesvarbu, kad ji susideda iš vieno failo.

Ir sakykime, kad nuo šiol norime sekti visus jo tolimesnius pakeitimus su Git. Tai paleidžiame komandinę eilutę Git Bash, pereiname su komanda cd į mūsų projekto katalogą (mano atveju C:/Users/Povilas/Gitproject) ir inicializuojame Git šiame kataloge - štai pirmoji paprasta komanda.
git init

Ką ši komanda daro? Realiai sukuria viduje savo katalogą .git - kuriame ir bus saugomos projekto versijos ir visa reikalinga informacija.

Šioje vietoje susiduriame su pirmu svarbesniu Git terminu: repozitorija. Šį žodį minėsime dažnai ir keliomis reikšmėmis, bet iš principo repozitorija yra ta vieta, kur saugomi visi jūsų kodo pakeitimai ir jų duomenys: kada jie buvo atlikti, kas tai padarė, kokį komentarą prie to prirašė ir kt.

Repozitorija gali būti lokali (t.y. saugoma jūsų kompiuteryje) ir nutolusi (angl. remote, pvz saugoma GitHub sistemoje). Apie jų skirtumus dar kalbėsime kurso eigoje, dabar jums reikia žinoti tik tiek, kad, ūkiškai tariant ir supaprastinant, repozitorija yra katalogas, kuriame saugomi visi jūsų failų pakeitimai. Mūsų atveju tai yra ką tik mūsų sukurtas katalogas .git.

Jei šio katalogo nematote, nepamirškite įjungti Hidden failų/katalogų rodymo:

Patys rankiniu būdu to katalogo turinio keisti neturėtume, visi jo pakeitimai bus atliekami su Git komandomis iš komandinės eilutės.

Kalbant apie komandas, jų visų formatas yra toks:
git [komanda] [raktai] [parametrai]
Šiuo atveju buvome paleidę komandą init, be jokių papildomų raktų ar parametrų.

Paaiškinimas. Raktai ir parametrai veikia labai panašiai kaip ir kituose komandinės eilutės įrankiuose. Raktas yra raidės su brūkšneliu, o parametrai gali būti laisvos formos tekstas.
Pavyzdys:
git commit -m "Pakeitimo žinutė"
-m šiuo atveju yra komandos raktas, o "Pakeitimo žinutė" - komandos parametras (komandą commit detaliau aptarinėsime kitoje pamokoje)


Kita ir, turbūt, svarbiausia Git komanda, yra status - ji tiesiog parodo mums dabartinę katalogo būseną: ar turime naujų neapdorotų failų, ar yra kokių konfliktų (apie juos vėliau) ir pan.

Iš pirmo žvilgsnio atrodo, kad daug neaiškaus teksto. Bet pabandykime tiesiog įsiskaityti - viskas parašyta juodu ant balto (na kitom spalvom iš tikro, bet ne esmė): šiuo metu dabartinė mūsų repozitorijos būsena yra tokia, kad yra vienas naujas failas index.php, kuris dar nėra įkeltas į pakeitimus.

Kaip matote, Git ne tik parodo būseną, bet ir sufleruoja, kokią komandą mums toliau naudoti, norint pridėti failą (šiuo atveju git add - apie šios komandos veikimą kalbėsime kitoje pamokoje).

Taigi, išmokome inicializuoti Git konkrečiame kataloge ir pažiūrėti būseną. Judame toliau - prie konkrečių failų valdymo.

Versijų kontrolės principai

Prieš kalbant apie tolimesnes komandas, reikia paaiškinti kaip apskritai veikia versijų saugojimas.

Pastaba. Iš karto atsiprašau kad naudoju angliškus terminus, bet normalių lietuviškų vertimų jiems nelabai yra, o ir visame pasaulyje priimti žodžiai bei jų junginiai bus vartojami nuolat kur sutiksite straipsniuose ar pokalbiuose su kitais kolegomis, tad su laiku priprasite ir išmoksite.
Taip pat svarbu žinoti, kad tas pats dalykas gali būti vadinamas keliais skirtingais būdais, tai visa tai pasiaiškinsime eigoje, nagrinėdami kiekvieną proceso dalį.
Realiai yra keturi "etapai", kaip saugoma konkreti pakeitimų būsena:
  • "Working copy" - kai tiesiog keičiate failus lokaliai, neleisdami jokių Git komandų;
  • "Staging area" arba "staging index" - čia kraunate visus savo mažus pakeitimus (su add komanda), bet jie dar nepatenka į Git repozitoriją;
  • "Local repository" - tai yra aktyvus Git katalogas, kuriame saugomi paskutiniai jūsų įkelti ir patvirtinti (su commit komanda) pakeitimai;
  • "Remote repository" - pirmųjų trijų etapų metu viskas vis dar vyksta jūsų kompiuteryje lokaliai, o jei norime kad pakeitimus matytų kiti žmonės - turime juos įkelti į nutolusį Git katalogą (dažniau vadinama "repozitorija" arba "repo"), kuris dažniausiai saugomas kokioje nors duomenų bazėje kaip Github ar Bitbucket.
Hm, turbūt vis dar atrodo gan painu. Bet nebijokite - kiekvieną žingsnį detaliai išnagrinėsime kurso metu. Pabandysiu dar paaiškinti su kitokiu gyvenimišku pavyzdžiu.

Įsivaizduokite, kad dirbate fabrike, kuris gamina kažką - sakykime, žaislus. Jūs per valandą pagaminate X žaislų, tada kraunate juos į sunkvežimį, kuris pamainos pabaigoje nuveža sukrautą produkciją į parduotuves. Tai principas toks:
  • Vieno žaislo gaminimo procesas - tai yra jūsų "working copy", kuri dar niekam nerodoma
  • Pagaminote vieną žaislą - įdedate jį prie savęs prie tam skirtos pagamintų žaislų krūvos, kuri vėlgi prieinama tik jums: tai jūsų asmeninė "staging area"
  • Kai ta krūva prisipildo - nunešate į sunkvežimį (juk po vieną žaislą neapsimoka nešioti), ir tada jau savo fabriko viduje patvirtinate, kad tie žaislai pagaminti: tai "local repository"
  • Pamainos pabaigoje sunkvežimis nuveža žaislus į parduotuvę, kur jie prieinami visiems - "remote repository"
Tikiuosi, kad taip aiškiau - vėlgi tuos visus etapus nagrinėsime atskirai po vieną, taip pat pakalbėsime ir apie visokius tarpinius variantus - pvz kaip "atsiimti žaislus iš sunkvežimio", kaip "pataisyti žaislus", kaip "išspręsti konfliktą, jei kolega sulaužė jūsų pagamintą žaislą" ir t.t.

Pamokos apibendrinimas

Šioje pamokoje išmokome:
  • Įdiegėme Git ir pradėjome naudotis Git Bash komandine eilute
  • Sužinojome, kas yra Git komandos ir kaip jos veikia
  • Panaudojome dvi iš jų - inicializavimo komandą init ir būsenos komandą status
  • Apžvelgėme, koks yra darbo su Git bendras principas
Dabar laikas eiti prie konkrečių pakeitimų valdymo komandų - svarbiausios iš jų add ir commit. Susitiksime kitoje pamokoje!
Dvi pamokos pateikiamos nemokamai.
Jei patiko - pirmyn toliau!

Pirkti visą kursą (23 EUR)