Uvod u Git

Uvod u Git

Ovaj blog post prati Postani IT plan učenja i objašnjava kako se koristi git.

Git je zvanično definisan kao sistem za kontrolu verzija sa distribuiranim skladištem (VCS).

Drugim rečima, to je sistem koji prati promene u datotekama našeg projekta tokom vremena. Omogućava nam da beležimo promene u projektu i vratimo se na određenu verziju praćenih datoteka u bilo kojem trenutku. Ovaj sistem može koristiti više ljudi da efikasno sarađuju na timskim projektima, gde svaki programer može imati svoju verziju projekta na svom računaru. Kasnije, ove pojedinačne verzije projekta mogu se spojiti i prilagoditi glavnoj verziji projekta.

Ovo je izuzetno popularan alat za sinhronizaciju paralelnog rada i upravljanje projektima među pojedincima i timovima.

Poznavanje rada s Gitom je jedna od najvažnijih veština za programera danas.

1. Instalacija

Git se uglavnom koristi putem korisničkog interfejsa komandne linije, kojem možemo pristupiti preko terminala našeg sistema.

Međutim, prvo moramo proveriti da li je Git instaliran na našem računaru.

Git možete preuzeti ovde: https://git-scm.com/downloads

Kliknite na link za preuzimanje za svoj operativni sistem, a zatim pratite instalacioni proces kako biste sve postavili na svom računaru.

Ako koristite Mac ili Linux možete koristiti defaultni terminal koji je već instaliran na sistemu

Ako koristite Windows, možete koristiti ugrađeni Powershell terminal, ili Git Bash terminal ili Git GUI (grafički interfejs) koji dolaze sa Git instalacijom

Nakon instalacije, pokrenite terminal i unesite sledeću komandu kako biste proverili da li je Git spreman za upotrebu na vašem računaru:

git --version

Ako je sve prošlo dobro, trebalo bi da vam vrati verziju Gita koja je instalirana na vašem računaru.

Konfigurisanje imena i emaila

U terminalu pokrenite sledeće komande kako biste se identifikovali sa Gitom:

git config --global user.name "Pera"
git config --global user.email "pera@gmail.com"

Zamenite vrednosti unutar navodnika sa svojim imenom i email adresom.

2. Repozitorijumi

Kada radimo s Gitom, važno je da budemo upoznati s pojmom repozitorijum. Git repozitorijum je folder projekta koji prati Git.

Možemo izdvojiti dva glavna tipa Git repozitorijuma:

  • Lokalni repozitorijum – izolovani repozitorijum smešten na vašem sopstvenom računaru, gde možete raditi na lokalnoj verziji svog projekta.
  • Udaljeni repozitorijum – obično smešten izvan izolovanog lokalnog sistema, obično na udaljenom serveru. Posebno je koristan prilikom rada u timovima – ovo je mesto gde možete deliti kod vašeg projekta, videti kod drugih ljudi, integrisati ga u svoju lokalnu verziju projekta i takođe poslati svoje promene na udaljeni repozitorijum.

U ovom tekstu, radimo samo s lokalnim repozitorijumima.

3. Inicijalizacija repozitorijuma

Da biste stvorili novi repozitorijum i počeli pratiti svoj projekat pomoću Gita, koristite terminal i navigirajte do glavnog foldera svog projekta, a zatim unesite sledeću komandu:

git init

Nemojte se začuditi ako vidite skriveni .git direktorijum posle ove komande. U tom folderu Git čuva sve interne podatke za praćenje trenutnog repozitorijuma.

4. Spajanje i komitovanje koda

Komitovanje je proces u kojem se promene primenjuju na Git repozitorijum.

U Gitu, komitove možemo zamisliti kao čuvanje vašeg projekta u njegovom trenutnom stanju. Praktično sačuvamo trenutnu verziju našeg koda u komitu. Možemo kreirati koliko god komitova želimo u istoriji komita, i možemo se kretati unazad i unapred između komitova kako bismo videli različite revizije koda našeg projekta. To nam omogućava efikasno praćenje napretka i praćenje projekta kako se razvija.

Komitovi se obično prave na logičkim tačkama tokom razvoja projekta, obično nakon dodavanja određenog sadržaja, funkcionalnosti ili modifikacija (poput novih funkcionalnosti ili ispravki grešaka, na primer).

4.1. Provera statusa

Dok se nalazimo unutar foldera projekta u našem terminalu, možemo uneti sledeću komandu da proverimo status našeg repozitorijuma:

git status

Ovo je komanda koja se vrlo često koristi prilikom rada s Gitom. Pokazuje nam koje datoteke su izmenjene, tj sta je ostalo ne komitovano.

Na osnovu informacija iz git status komande, možemo dodati datoteke projekta u staging područje što bi značilo da su datoteke spremne za komitovanje.

4.2. Dodavanje datoteka u staging područje

Iz foldera projekta možemo koristiti komandu git add da bismo dodali naše datoteke u staging područje.

Možemo dodati određenu datoteku u staging područje sledećom komandom:

git add file.js

Da bismo dodali više datoteka, to možemo uraditi ovako:

git add file.js file2.js file3.js

Umesto da dodajemo datoteke pojedinačno, možemo dodati sve datoteke unutar foldera projekta u staging područje:

git add .

Podrazumevano, ovo dodaje sve datoteke i foldere unutar foldera projekta u staging područje, odakle su spremne za komitovanje i praćenje.

4.3. Pravljenje komita

Komit predstavlja sadržaj našeg koda u određenom trenutku (snapshot), koji čuvamo u istoriji komita našeg repozitorijuma. Nakon što smo dodali sve datoteke koje želimo pratiti u staging područje pomoću git add komande, spremni smo za pravljenje komita. Samo one datotke koje su se dodale u staging područje će biti zabeležene u komitu.

Da biste komitovali datoteke iz staging područja, koristimo sledeću komandu:

git commit -m "Poruka komita (opis onoga što smo dodali u kodu ovim komitom)"

Poruku komita nam služi i kada želimo da se vratimo na prethodne verzije koda zato treba da opisuje izmene.

Nakon izvršavanja te komande, dobićete tehničke detalje o komitu odštampane u terminalu.

Sada možete izvršiti git status ponovo da biste videli trenutno stanje datoteka.

4.4. Istorija komita

Da biste videli sve komitove koji su napravljeni za naš projekat, možete koristiti sledeću komandu:

git log

Logovi će prikazati detalje za svaki komit, kao što su ime autora, generisani heš za komit, datum i vreme komita i poruka komita koju smo pružili.

Da biste se vratili na prethodno stanje koda vašeg projekta koje ste komitovali, možete koristiti sledeću komandu:

git checkout <heš-komita>

Zamenite <heš-komita> stvarnim hešom za određeni komit koji želite posetiti, a koji je naveden komandom git log.

Da biste se vratili na poslednji komit (najnoviju verziju koda vašeg projekta), možete uneti ovu komandu:

git checkout main

4.5. Ignorisanje datoteka

Da biste ignorisali datoteke koje ne želite pratiti ili dodati u staging područje, možete kreirati datoteku nazvanu .gitignore u glavnom folderu vašeg projekta.

Unutar te datoteke možete navesti sve nazive datoteka i foldera koje definitivno ne želite pratiti (svaka ignorisana datoteka i folder treba biti na novom redu unutar .gitignore datoteke).

Ovo je veoma korisno kada u toku rada na projektu dobijemo foldere i datoteke koji su vezani samo za naše izvršavanje projekta i ne želimo da ih komitujemo (build fajlovi, konfiguracije code editora, paketi za pokretanje projekta).

5. Rad sa udaljenim repozitorijumom

Git ne samo da vam omogućava praćenje promena na lokalnom računaru, već i saradnju sa udaljenim repozitorijumima. Ovaj segment će vas uputiti kroz osnove pull-a i push-a, ključne aktivnosti za sinhronizaciju vašeg lokalnog repozitorijuma sa udaljenim.

5.1 Kloniranje udaljenog repozitorijuma

Kada želite započeti rad na projektu, prvi korak je obično kloniranje udaljenog repozitorijuma na vaš lokalni računar. To se postiže pomoću git clone komande:

git clone <URL_repozitorijuma>

5.2 Dobavljanje promena sa udaljenog repozitorijuma

Kada drugi članovi tima naprave promene na udaljenom repozitorijumu, želećete da ažurirate svoj lokalni repozitorijum kako biste dobili te promene. Za to koristite git pull komandu:

git pull origin main

Ova komanda preuzima najnovije promene sa main grane udaljenog repozitorijuma (origin) i ažurira vaš lokalni repozitorijum. Ako radite na drugoj grani, zamenite main sa imenom vaše grane.

5.3 Slanje promena na udaljeni repozitorijum

Kada želite da delite svoje lokalne promene sa ostatkom tima i ažurirate udaljeni repozitorijum, koristite git push komandu:

git push origin main

Ova komanda šalje sve lokalne promene sa main grane na udaljeni repozitorijum. Ponovo, prilagodite main ako radite na drugoj grani.

Sada, kada znate kako koristiti clone, pull i push, vaš rad sa Git-om je još efikasniji i omogućava vam sinhronizaciju sa timom u stvarnom vremenu.

Pull Request (PR): Kada završite svoje promene u fork-ovanom repozitorijumu, možete predložiti da se vaše izmene integrišu u originalni repozitorijum putem Pull Request-a. Ovo je način za zajedničko pregledavanje, diskusiju i prihvatanje izmena.

6. Grane (Branches)

Grana u Git-u može se shvatiti kao individualna vremenska linija naših projektnih commit-ova.

Sa Git-om, možemo kreirati mnogo ovakvih alternativnih okruženja (tj. možemo kreirati različite grane) kako bi druge verzije našeg projektnog koda mogle postojati i pratiti se paralelno.

To nam omogućava da dodamo nove (eksperimentalne, nedovršene i potencijalno nepouzdane) funkcionalnosti u odvojenim granama, ne dirajući 'zvaničnu' stabilnu verziju našeg projektnog koda (koja se obično čuva na grani main).

Kada inicijalizujemo repozitorijum i počnemo sa commit-ovima, oni se podrazumevano čuvaju na grani main.

Grafički prikaz izgleda git stabla sa tri grane i 8 komitova
Grafički prikaz izgleda git stabla sa tri grane i 8 komitova

6.1. Kreiranje nove grane

Možete kreirati novu granu koristeći sledeću komandu:

git branch <ime-nove-grane>

Nova grana koja se kreira biće referenca na trenutno stanje vašeg repozitorijuma.

6.2. Menjanje grana

Da biste prešli na drugu granu, koristite komandu git checkout:

git checkout <ime-grane>

Na taj način, prelazite na drugu izolovanu vremensku liniju vašeg projekta menjajući grane.

Na primer, možete raditi na različitim funkcionalnostima u vašem kodu i imati posebnu granu za svaku funkcionalnost. Kada pređete na granu, možete commit-ovati promene u kodu koje utiču samo na tu određenu granu. Zatim, možete preći na drugu granu da radite na drugoj funkcionalnosti, koja neće biti pogođena promenama i commit-ovima napravljenim iz prethodne grane.

Da biste kreirali novu granu i odmah prešli na nju, možete koristiti -b flag:

git checkout -b <ime-nove-grane>

Da biste videli listu grana za vaš projekat, koristite ovu komandu: git branch

Da biste se vratili na granu main, koristite ovu komandu:

git checkout main

6.3. Spajanje grana

Možete spojiti grane u situacijama kada želite implementirati promene u kodu koje ste napravili u jednoj grani u drugu granu.

Na primer, nakon potpune implementacije i testiranja nove funkcionalnosti u vašem kodu, želeli biste spojiti te promene sa stabilnom granom vašeg projekta (koja je obično podrazumevana main grana).

Da biste spojili promene iz druge grane u trenutnu granu, koristite ovu komandu:

git merge <ime-grane>

Zamenite <ime-grane> sa granom koju želite integrisati u trenutnu granu.

6.4. Brisanje grane

Da biste obrisali granu, možete koristiti komandu git branch sa -d flag:

git branch -d <ime-grane>

7. Konflikti

Pri radu sa Git-om, konflikti se mogu pojaviti kada pokušavate da integrišete svoje lokalne izmene sa promenama koje su se desile na udaljenom repozitorijumu. Ovi konflikti mogu nastati kada se dva seta promena dotaknu iste linije koda ili kada Git nije u mogućnosti automatski spojiti izmene. Najčešće se ovo dešava kada vaš kolega menja isti deo fajla koji ste i vi promenili pa je potrebno odlučiti čiji će deo koda završiti na repozitorijumu.

Evo kako možete rešiti konflikte:

7.1. Pull sa Konfliktima

Kada izvršite git pull i dođe do konflikta, Git će obavestiti da je došlo do konflikta i označiti datoteke sa konfliktima. Prva stvar koju treba uraditi je pregledati ove datoteke i razumeti gde se nalaze konflikti.

7.2. Uređivanje konfliktnih datoteka

Otvorite konfliktnu datoteku u vašem omiljenom tekstualnom editoru. Unutar datoteke, Git će označiti delove koji su u konfliktu. Na primer:

<<<<<<< HEAD
// Izmene koje su bile u lokalnom repozitorijumu
=======
// Izmene koje su bile u udaljenom repozitorijumu
>>>>>>> udaljeni/branch

Ovde morate ručno izabrati koje izmene želite zadržati. To može značiti da je potrebno kombinovati ova dva seta izmena ili potpuno odbaciti jedan u korist drugog.

7.3. Označavanje konflikta kao rešenog

Kada rešite konflikt u datoteci, morate označiti datoteku kao rešenu. To možete postići koristeći:

git add naziv_datoteke

7.4. Završavanje spajanja

Nakon što ste rešili sve konflikte i dodali datoteke u staging, napravite komit koji zatvara spajanje:

git commit -m "Resolve merge conflicts"

Ako je Git u toku spajanja, umesto komita možete koristiti i git merge --continue.

7.5. Push sa rešenim konfliktima

Kada završite sve korake i rešite konflikte, možete poslati svoje izmene na udaljeni repozitorijum:

git push origin main

7.6. Upotreba Alata za rešavanje konflikata

Popularni kod editori kao što su VSCode i IntelliJ alati imaju sjajan vizuelni editor za rešavanje konflikata.

Rešavanje konflikata u VS Code
Rešavanje konflikata u VS Code

Git takođe dolazi sa alatima za rešavanje konflikata. Na primer, možete koristiti komandu:

git mergetool

Ova komanda pokreće vizuelni alat koji vam pomaže da rešite konflikte. Možete konfigurisati Git da koristi određeni mergetool po vašem izboru.

Rešavanje konflikata može biti izazovno, ali je važan deo efikasnog rada sa Git-om, pogotovo kada sarađujete sa drugim programerima na projektima. S vremenom, postaćete veštiji u rešavanju konflikata i bolje razumeti kako Git upravlja promenama.

8. Dodatni materijal

Ako želite dublje da istražite Git možete pogledati neke od sledećih linkova:

GitHub je veb sajt gde možemo čuvati naše repozitorijume onlajn. Drugim rečima, GitHub funkcioniše sa Git-om kao usluga za smeštanje repozitorijuma.

← Nazad na blog

Hoćeš da naučiš i JavaScript?

Git je jedan korak iz plana učenja. Ako tek krećeš, počni od besplatnog kursa Frontend početnik, a kad savladaš osnove, nastavak je JavaScript obuka sa projektima.