Site Loader

Git je prostim rečima jedan od vaših najboljih prijatelja ako ste u ITu. On vas spasava lavirinta i mreža direktorijuma kroz koji smo svi nekada prošli. Kopije i kopije projekta a u svakome razvijen neki deo koji nije u drugom. Pa za finalni jurimo i nemamo pojma gde je šta. Kao na slici ispod.

Git vam tu uvodi red. Uvodi vam vremensku liniju. Možete u svakom trenutku pogledati izmene koje ste uneli na samom početku promena a da vam to ne utiče na aktuelne izmene. Možete kopirati projekat u drugi branch a da se ništa sem komande nije promenilo. I da tamo razvijete kompletnu novu funkcionalnost.

GIT vam uvodi verzije jednog te istog fajla bez da je kopiran milion puta.

Šta trebate znati pre nego što krenemo dalje?

GIT je decentralizovani repozitorijum izvornog koda, napravio ga je Linus Torvalds(kao i sve ostalo što radi na ovom svtu 😀 ). Sastoji se iz minimum dve komponente, prva je server gde je git repozitorijum smešten, druga je radna stanica ili radne stanice. U zavisnsoti koliko contirbutora radi na nekom projektu. Hajde da prođemo par osnovnih komandi od kojih će vam zavisiti život 😀

git init

Ovim inicijalizujete git projekat. U direkrotijumu projekta napraviće se skriveni direktorijum sa nazivom .git. Tu će se čuvati sva podešavanja koja vi kasnije definišete na meni još uvek nepoznati način 😀 . Upotrebljava se na isiti način kako je i zapisano.

Ako ste na ovaj način inicijalizovali projekat, morate dodati i remote repo. Kako bi skladištili negde sve promene. To se radi setovanjem remote origina.

Primer upotrebe:

git remote add origin https://gitlab.com/user/repo/blabla.git 

git clone

Ako ne incijalizujemo sami git projekat, već trebamo raditi na nekom koji već postoji negde. Onda moramo koristiti ovu funkciju. Kao što piše, ovim kloniramo kompletan repozitorijum sa istorijom svih promena, sa svakim njihovim commitom. Postoje dva načina za kloniranje. ssh i https, svaki zahteva drugačiji nivo autentifikacije dok neki i ne zahtevaju(public repo)

primer korišćenja:

git clone https://gitlab.com/gitlab-org/gitlab-foss.git

git status

Git status neka vam bude urezana u pamćenje kao naj osnovnija komanda. Odatele kreće sve. Ona vam ispiše stagovane promene, fajlove koje ne pratite, obrisane fajlove ili jednostavno sve ono što će se desiti ako uradite neku akciju.

Primer upotrebe:

git status

git add

Kako bi git pratio vaše fajlove, morate ih dodati na listu za praćenje. To se radi ovom komandom i unutar direktorijuma projekta.

Primer upotrebe:

git add ./baza/dump.sql

git commit

Kada komitujete trenutno sačuvano stanje direktorijuma, pravite snapshoot. Tačku u vremenu koju će pratiti commit hash koji se automatski generisao. Za commitovane a ne pushovane promene kažemo da su Stageovane. Dobro je uvek ostaviti deskrpitivni komentar svakog commita, kako bi znali šta smo radili u tom trenutku.

primer upotrebe:

git comit -m "Ovo je stageovani commit"

git branch

Rekli smo da je namena gita prvenstveno za verzionisanje vašeg koda. Brancheve možete posmatrati kao odvojene vremenske linije istog projekta. Svaki commit na jednom branchu se vidi ekskluzivno na njemu, ne i na drugim. Postoji funkcija i za to. Ali o tome kasnije.

primer upotrebe:

git checkout testna_grana

git push

Sve ono što ste dodali u commit(stageovane promene) sada treba gurnuti na server. I tako završiti kompletan ciklus jednog commita.

Primer:

git push origin testna_grana

Flow primer

Verovatno da vam je zanimljivo sve ovo gore što sam napisao ali bez radog primera džabe sve 😀 . Pa da krenemo.

Prvo sam se ulgoovao na svoj nalog na github.com. Zatim inicijlaizovao nov repozitorijum.

Strelicama je označeno šta sve treba klknuti.

Sada kada je napravljen repo, trebam ga isklonirati. Najlakši način je sledeći.

I kopiraje https link. Zatim predjite u terminal. I otkucajte

git clone https://github.com/LudiSistemas/primer.git

Ovde vidimo da se repozitorijum uspešno klonirao. Sada trebamo reći gitu ko smo mi. To možemo uraditi sa ove dve komande.

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

Malo je zezancija ali se ovo radi samo jednom.

Hajde sada da udjemo u naš “primer” repozitorijum i da vidimo šta sve tamo ima.

Sećate se šta smo pričali gore, da se pravi jedan skriveni direkotrijum .git tako da sem README.md imamo sada i njega.

Otvorićemo jedan direktorijum i u njemu napraviti jedan fajl. Čisto da stekne utisak kako sve to radi.

Napravio sam direktorijum test i u njemu fajl koji se zove fajl.1 .

Komandom git status utvrdio sam da git ne prati direktorijum unutar projekta koji se zove test.

Sada bi trebalo dodati sve na praćenje i commitovati.

Sada smo ispunili sve uslove da možemo pushovati kod na remote repozitorijum.

Pošto se u prethodnim koracima nisam autorizovao na repozitorijum, morao sam da unesem svoje korisničko ime ili email. Pošto se nisam setio koji mi je username 😀 , pa sam uneo email.

Nakon ovog korak, proverio sam status gita. I možemo videti da su sve moje promene iz lokala dostavljene na repozitorijum. Dobra prakasa je da čim završite neku bitnu promenu to commitujete, jer ako se u nekom trenutku to pokaže kao nešto što ste zeznuli, možete se vratiti nazad.

Baratanje branchevima

Komandom git checkout -b nova_grana napravio sam novi branch(granu) sa trenutnim stanjem master grane. I tu sada mogu nastaviti modifikaciju bez uticaja na master.

Napraviću unutar toga jedan novi direktorijum, sa jednim fajlom. Kako bih efektivno demonstrirao prebacivanje sa grane na granu.

Isto kao i prethodnog puta, sada trebamo dodati izmene i posalti ih na remote repozitorijum.

Nakon što sam dodao fajlove, pokušao sam push isto kao i na master grani. Ali za razliku od nje, ova grana ne postoji na remote repozitorijumu. I potrebno je pushovati je na isti način kako nam je git predložio, što sam ja i uradio. U sledećem koraku me je pitao za korisničko ime i lozinku pa taj deo nisam slikao.

Sada imamo dva brancha master i nova_grana. Svaki ima nezavisnu vremensku liniju u odnosu na prethodni. Ali s obzirom da je svrha postojanja brancehva da se vremenom pripoje master branchu, hajde da prodjemo i taj deo i da završimo polako ovaj tekst.

git merge

Komadnom git checkout master vratio sam se nazad na master granu, i kao što vidite, nema onog direktorijuam koji smo stvorili u branchu nova_grana.

Ali iz nekog razloga, hajde da kažemo da je unutra neka naša nova funckionalnost, mi sada to treba da mergujemo(spojimo) u master granu.

Prvi uslov je da bude u grani u koju spajate neku drugu. Znači u našem primeru moramo biti u master grani.

Izlistao sam sadržaj projektnog direktorijuma pre merga. Nakon toga otkucao git merge nova_grana . Git je odradio svoju magiju i te dve grane spojio.

Git status nam je rekao da smo ispred grane origin master za jedan commit. Što znači da bi trebalo uraditi push na master sa novim izemanma prateći istu semantiku kao i gore.

Pročitali ste apsolutni početnički crash course za git. Vaše znanje je sada na nešto manjem nivou od potrebnog za početnički rad. Sada je na vama da dalje istražujete. Ako vam treba nešto, uvek možete da me cimnete porukom.

Srećno.

Ludi Sitemaš

Sarkastičan, skoro pismen Sistem Administrator koji svoje radno vreme provodi kao DevOps.