1. Kas tos versijų kontrolės sistemos ir Git

Kiekvienas projektas turi savo kūrimo etapus ir versijas. Net jei tos versijos nenumeruojamos akivaizdžiai, vis tiek yra žinoma, kad tą ir tą mėnesį pristatyta viena funkcija, po to kita, tada reikėjo kažkiek pataisymų ir t.t. Ir visa tai realiai yra atskiri kodo "gabalai", kurie yra diegiami į gyvą versiją. Ir tada su laiku kyla tokių situacijų ir klausimų:
  • Prie projekto dirba keli žmonės - kaip organizuoti darbą, kad jie vienas kitam netrukdytų ir neredaguotų tų pačių failų?
  • Prieš mėnesį kode buvo padarytas pakeitimas X - ar galima sužinoti kas jį padarė? Ir su kokiu tikslu?
  • Gyvoje versijoje atsirado klaidų - reikia staigiai atšaukti paskutinį pakeitimą ir grąžinti kodą į prieš tai buvusį
Esmė - tikrai prireikia atrasti, peržiūrėti, o kartais ir panaudoti senesnes kodo versijas. Kaip tai daroma "ūkiškai"? Žmonės tiesiog kuria katalogus su datomis, neretai projektuose tekdavo matyti katalogus "backup20150601" ar failus "OrderController_20150601.php". Visa tai galima atlikti daug patogiau ir efektyviau - su versijų kontrolės sistemomis, angliškai VCS (version control systems) arba kartais dar "source control".

Tokių sistemų yra įvairių, bet neabejotinai populiariausios yra dvi Git ir Subversion (arba SVN). Jų principas kažkiek skiriasi, tai šiame kurse kalbėsime apie populiariausią sistemą Git, bet jei pagausite bendrus principus - be vargo, esant reikalui, galėsite naudotis ir kitais analogais.

Visas Git versijų kontrolės mechanizmas realiai susideda iš dviejų dalių: jūsų kompiuteryje lokaliai esančios Git sistemos, ir nutolusiame serveryje saugomų kodo kopijų saugyklos, populiariausios iš jų yra Github ir Bitbucket. Esmė tokia - dirbate savo kompiuteryje, kol ateina laikas įkelti kodą į kodo saugyklą, ir iš ten jau naujausią versiją ne tik gali pasiimti komandos draugai, bet ir paprasta kelių komandų pagalba įkelti kodą į gyvą arba testavimo serverį.

Dar vienas šalutinis tokių sistemų privalumas yra tai, kad nebereikia tikrinti, kas iš komandos narių kokį kodą kada įkėlė - galima nustatyti visokių integracijų su sistemomis, kurios automatiškai praneš, kad, sakykime, Povilas ką tik įkėlė į serverį kažkiek failų, kurių paskirtis - užbaigta funkcija X. Tokiu būdu išvengiama krūvos elektroninių laiškų ar kitokių komunikacijos priemonių su klausimu "kas ką šiandien nuveikė" - visiems komandos nariams (ir vadovams) viskas matoma.


Šiuolaikiniame programavimo pasaulyje versijų kontrolės sistemų išmanymas yra nebe privalumas, o būtinybė - darbo skelbimuose ir pokalbiuose to klausiama jau dažniausiai nebe prie papildomų "būtų gerai" punktų, o daroma prielaida, kad jei jau pretenduojate į poziciją dirbti komandoje, tai mokate naudotis Git ar panašiu įrankiu, be kurių šiais laikais komandinis darbas beveik neįsivaizduojamas.

Pamirškite FTP

Web-projektuose nuo senų laikų failų perkėlimui į serverį naudojamas FTP protokolas. Naudojant FTP klientą (FileZilla, CoreFTP ar dar kokį nors), failai tiesiog įkeliami į serverį kiekvieną kartą, kai reikia kažką paleisti į gyvą versiją. Atrodo lyg ir patogu, bet kas jeigu reikia įkelti 17 skirtingų failų iš skirtingų katalogų? Baksnoti ir kelti po vieną? Ar tiesiog perrašyti visus tuos katalogus "ant viršaus"? Ir kaip tada atsekti, kas būtent buvo pakeista? O kas jeigu viduryje siuntimo FTP ryšys pakimba ar dingsta?


Versijų kontrolės sistemos išgelbsti nuo visų šių problemų. Tiesą pasakius, kai pats ilgą laiką dirbau su FTP, net nežinojau kad turiu tą problemą - viskas daugmaž veikdavo o jei kažkur nulūždavo tai buvo nesunkiai sutvarkoma. Bet problemos prasidėjo kai teko dirbti prie projektų su komanda. Ir tada kai reikia sekti kas kokius pakeitimus padarė ir įkėlė į serverį - tragedija. Dėl to siūlau jums judėti nuo failų įkėlimo per FTP prie versijų kontrolės. Per FTP apsimoka kelti nebent kokius paveiksliukus ar kitus failus, nesusijusius su kodu.

Ką reikia mokėti, norint naudotis Git

Iš principo, jokių išankstinių reikalavimų nėra. Versijų kontrolė praktiškai nekeičia kodo rašymo proceso - tai, galima sakyti, atskiras papildomas veiksmas, siekiant užtikrinti efektyvesnį kodo saugojimą. Ir versijų kontrolė nepriklauso nuo programavimo kalbos ar operacinės sistemos (nors kiekviena OS turi savo Git įrankius). Realiai Git galima taikyti ne tik programiniam kodui - o jeigu, sakykime, norite saugoti skirtingas Word dokumento ar nuotraukų katalogo versijas.

Git turi tam tikrą komandų kalbą, kurią mes naudosime šio kurso eigoje, dirbdami per komandinę eilutę - tai gali būti Command Prompt ar Terminal, taip pat yra atskiras įrankis Git Bash, bet principas tas pats: komandos leidžiamos iš komandinės eilutės. Taip pat yra programų, padedančių atlikti Git komandas vizualiai (panašiai kaip FTP klientai), bet vis tiek reikia žinoti versijų kontrolės pagrindus, kad suprastumėte, kas kaip vyksta.