Osnove Gita

Što je Git?

Git je alat za detaljno bilježenje promjena u datotekama. Najkorisniji je za tekstualne datoteke, zato se uglavnom koristi za kodiranje, međutim može se koristiti i za ostale vrste datoteka.

Pomoću Gita možemo graditi povijest našeg projekta — svaka promjena, ili commit, može odgovoriti na pitanja kao:

  • koje su datoteke promijenjene i kako točno?
  • zašto je ta promjena napravljena?
  • kada je napravljena?
  • tko je autor?

Povijest projekta, ili repozitorija, sprema se u skriveni direktorij. To nam daje nebrojene mogućnosti, kao npr. da s lakoćom poništimo neku promjenu, da se privremeno ili trajno vratimo na prijašnje stanje našeg projekta, da započnemo niz promjena koji ne želimo odmah završiti, nego spremiti za kasnije, itd.

Usporedimo to npr. s Wordom, gdje je spremanje svake promjene konačno, ne možemo se vratiti na prijašnje stanje našeg dokumenta, ne možemo ni saznati što je promijenjeno i zašto itd. Kad na dokumentu radimo sami, to nije veliki problem, ali problem se može pojaviti u suradnji s drugima na istom dokumentu, gdje se promjene mogu izgubiti. Prednost i nužnost Gita postaje brzo očita tijekom suradnje s drugima.

Danas je Git standard u programiranju. Postoje alternative, npr. SVN, međutim Git je daleko najzastupljeniji, dosad u svom poslu nisam trebao (niti bih pristao 🤫) koristiti išta drugo.

Komandna linija ili grafičko sučelje?

Git se može koristiti putem komandne linije ili putem grafičkog sučelja. Neki od popularnih text editora kao Visual Studio Code imaju grafičko sučelje već ugrađeno, a postoje i aplikacije kao GitHub Desktop.

E sad, kako koristiti Git je stvar osobne preferencije, grafička sučelja su lakša za probaviti početnicima, ali su ponešto ograničena pa ćete ponekad trebati kombinirati. U ovom članku ćete se upoznati samo s osnovama Gita pa ćemo koristiti komandnu liniju, ali vi slobodno kombinirajte s grafičkim sučeljima ako želite.

Instalacija

Koristili grafičko sučelje ili ne, prije ili kasnije će vam dobro doći komandna linija, ako za ništa drugo onda barem za konfiguraciju Gita. Ako ste na Windowsima nećete imati onu koja će vam trebati, pa možete probati instalirati i Git i komandnu liniju jednim potezom pomoću Git for Windows. A ako to ne upali onda pokušajte zasebno instalirati komandnu liniju i instalirati Git.

Provjerimo radi li komandna linija unutar Visual Studio Codea, pa ga možete otvoriti, pritisnuti Ctrl+Shift+P, odabrati Select Default Profile, pa odabrati “bash” ako već nije bio označen, i pritisnuti Enter. Možemo provjeriti radi li tako da odemo na View → Terminal, i u komandnoj liniji koja se upravo otvorila upišemo git --version i pritisnemo Enter. Ako ste sve uspješno instalirali trebala bi se pojaviti verzija Gita. 🤞

Konfiguracija

Sada možemo konfigurirati naš identitet u Gitu, tako da commitove označavate svojim imenom, prezimenom i email adresom. Ja sam za sebe napisao ovako:

git config --global user.name 'Matija Marohnić'
git config --global user.email 'matija.marohnic@gmail.com'

Ovo trebamo napraviti samo jednom. Svaka linija predstavlja jednu komandu, dakle iza svake slijedi Enter.

Osnovne naredbe

Kod demonstracije Gita nećemo se zamarati kodiranjem, kao primjer koristit ćemo najobičnije tekstualne datoteke, .txt. Počet ćemo s inicijalizacijom repozitorija, pa kreirajmo novi direktorij koji će predstavljati naš projekt i nazovimo ga moj-prvi-repozitorij.

Sada možemo otvoriti taj direktorij u Visual Studio Codeu, otvoriti komandnu liniju i upisati:

git init

I inicijalizirali ste svoj prvi Git repozitorij!

Ako ste znatiželjni što se dogodilo, komanda ls -a će vam izlistati sav sadržaj direktorija, uključujući i onaj koji je skriven, pa možete vidjeti skriveni direktorij .git. Njega je kreirao Git kad ste napisali git init i tamo pohranjuje sve informacije vezane za vaš repozitorij.

Trenutno naš repozitorij ne sadrži ništa, pa kreirajmo tekstualnu datoteku moja-datoteka.txt, možete ju ostaviti praznu. Trenutno Git ne zna za ovu datoteku jer ju nismo commitali, a to možemo vidjeti tako da pokrenemo:

git status

Git će nam izlistati moja-datoteka.txt pod “untracked files”. Taj ćete žargon pohvatati s vremenom, bez brige. Hajmo onda commitati tu datoteku:

git add moja-datoteka.txt
git commit --message "Moj prvi commit"

Prvom naredbom označavamo promjene koje želimo commitati, a druga naredba radi commit uz kratki opis promjene. Umjesto --message možete skraćeno napisati -m.

Sada dodajmo sadržaj našoj datoteci:

Yay, učim Git!

i spremimo promjene. Ovaj put kada pokrenemo git status možemo vidjeti da ju je Git svrstao pod “modified” jer uspoređuje sadržaj s onim kada je zadnji put commitana. Commitajmo ove promjene na isti način kao i prošli put, a opis može biti “Dodan sadržaj”.

Sada dodajmo još malo teksta u novoj liniji tako da ukupno piše:

Yay, učim Git!
Čuvaj se, svijete! 💪

i spremimo datoteku. Recimo da sada želimo znati koji se točno sadržaj promijenio od zadnji put, to možemo pomoću sljedeće naredbe:

git diff

Git će nam pokazati da je linija “Yay, učim Git!” ostala ista, a da je ova linija koju smo sad dodali nova. Idealno bi ju trebao obojati zelenom bojom, ali ako to nije slučaj kod vas trebali biste barem vidjeti “+” ispred te linije. Iz ovog pregleda možemo izaći pritiskom na tipku Q (kao “quit”).

Sada commitajmo ove promjene s opisom “Dodana nova linija”.

E sad, što ako smo se predomislili u vezi te zadnje promjene? U ovom konkretnom slučaju možemo ručno obrisati tu liniju i commitati to, ali kad bi se radilo o velikom nizu promjena, bila bi stvarno gnjavaža to sve pješice vraćati natrag. S obzirom da smo commitali te promjene možemo mu reći da ih poništi naredbom:

git revert HEAD --no-edit

Ovo će kreirati novi commit koji učiniti suprotno od onog što je učinio prošli commit. HEAD se odnosi na zadnji commit, a --no-edit će preskočiti pisanje opisa.

Ako želimo vidjeti taj zadnji commit, uključujući i ostale, to možemo učiniti naredbom:

git log

Ono što vidimo je povijest našeg repozitorija, i primijetite da je svaki commit značen vašim imenom, prezimenom i email adresom! 😃 Iz ovog pregleda također izlazite pritiskom na tipku Q.

Grane

Povijest repozitorija obično nije ujedinjeni niz commitova, nego se grana na puno mjesta, ovisno o potrebi. Najčešće postoji jedna glavna grana (master ili main), s njom počinjemo, a druge grane se s vremenom stope s njom.

Npr. ako radimo na web aplikaciji, glavna grana predstavlja trenutno stanje aplikacije koju smo objavili online, a druge grane sadržavaju razne bugfixove i sl. na kojima se trenutno radi. Dakle grane predstavljaju različita stanja aplikacije, u jednoj grani popravljen je neki problem s loginom u aplikaciji, a u drugoj je popravljen kontrast između teksta i pozadine itd. Kada te promjene budu spremne, onda se stapaju s glavnom granom.

Pa hajmo kreirati novu granu u našem projektu:

git branch nova
git switch nova

Prva naredba će kreirati novu granu iz naše trenutne pozicije, tj. iz glavne grane, a pomoću druge naredbe prelazimo u novu granu.

Zasad sve izgleda isto. Možemo dodati novog sadržaja u našu datoteku, tako da sveukupno piše:

Yay, učim Git!
Bok iz nove grane!

I commitati to s opisom “Sadržaj iz nove grane”.

Sada prijeđimo natrag na granu iz koje smo počeli, pretpostavljam master:

git switch master

Ako pogledate našu datoteku, vidjet ćete da nema tog sadržaja. On nije izgubljen! Samo se nalazi na drugoj grani. Možemo ga dodati u master tako da stopimo granu nova:

git merge nova

I etogac!

Ima situacija kad ovakvo stapanje ne prođe toliko glatko, ali neću vam komplicirati život s time još. 😜

Kako dalje?

Sada znate osnove Gita, wow!

Ali što ako s vremenom zatrebate saznati detalje neke naredbe, ili možda naučiti neku novu? Gitova dokumentacija sadrži reference, videe i izvrsnu knjigu. A ako želite baš nešto nabrzaka provjeriti i već ste naviknuti na komandnu liniju, možete upisati npr.

git help add

što će vam pokazati sve što ste htjeli i niste htjeli znati o naredbi git add. Kretati se možete pomoću:

  • k (pomak za liniju prema dolje)
  • k (pomak za liniju prema gore)
  • f (skok za stranicu prema dolje)
  • b (skok za stranicu prema gore
  • G (skok na dno)
  • g (skok na vrh)
  • q (izlaz)
comments powered by Disqus