Šta je Git i zašto ga koristiti

Šta je Git
Git je distribuirani sistem za kontrolu verzija koji prati promjene u datotekama i omogućuje timovima da efikasno sarađuju na istom projektu. Kreirao ga je Linus Torvalds 2005. godine za razvoj Linux kernela i od tada je postao de facto standard u industriji softvera. Bez obzira da li radite sami na malom projektu ili u timu od stotinu programera, Git vam omogućuje pratite svaku promjenu, vraćate se na prethodne verzije i radite na više funkcionalnosti paralelno bez konflikata.
Za razliku od starijih sistema poput SVN-a, Git je distribuiran što znači da svaki programer ima kompletnu kopiju cijele istorije projekta na svom računaru. Ovo omogućuje rad bez internet konekcije, brže operacije jer se većina radi lokalno i veću otpornost na gubitak podataka jer svaki klon je potpuni bekap. Razumevanje Git-a je danas osnovna veština svakog programera i web developera.
Zašto koristiti Git
Praćenje promjena
Bez sistema za kontrolu verzija programeri se oslanjaju na ručno kopiranje datoteka. Za čuvanje projekata razmotrite prostor za rezervne kopije sa imenima poput sajt-v2-finalna-kopija-2.zip. Ovaj pristup je neodrživ jer brzo postaje nemoguće znati koja verzija sadrži koje promjene. Git automatski beleži svaku promjenu sa informacijom ko ju je napravio, kada i zašto. Možete vidjeti kompletnu istoriju projekta, uporediti bilo koje dve verzije i tačno znati koja linija koda je promijenjena u svakom trenutku.
Svaki commit u Git-u je snapshot stanja projekta u određenom trenutku sa porukom koja opisuje što je promenjeno i zašto. Ovo je neprocenjivo kada mjesecima kasnije treba razumjeti zašto je neka promjena napravljena ili kada treba pronaći commit koji je uveo bug. Git blame komanda pokazuje ko je posljednji mijenjao svaku liniju koda što ubrzava pronalaženje odgovornih osoba za određeni dio koda.
Grananje i paralelni rad
Git grane ili branches su jedna od najmoćnijih funkcionalnosti. Grana je neovisna linija razvoja koja vam omogućuje radite na novoj funkcionalnosti bez utjecaja na glavni kod. Možete kreirati granu za svaki bug fix ili novu funkcionalnost, raditi na njoj koliko god treba i spojiti je sa glavnom granom tek kada je sve testirano i spremno. Ako se funkcionalnost pokaže kao loša ideja jednostavno obrišete granu bez ikakvih posljedica na ostatak projekta.
U timu svaki programer može raditi na svojoj grani bez brige da će prepisati tuđi rad. Git automatski spaja promjene iz različitih grana i u većini slučajeva to radi bez intervencije. Kada dođe do konflikta Git jasno označava problematične dijelove i traži od programera da ručno razreši konflikt. Ovo je daleko bolje od alternativnog scenarija gdje dva programera menjaju isti datoteka i jedan prepiše rad drugog bez upozorenja.
Bekap i oporavak
Svaki Git repozitorijum na remote serveru poput GitHub-a služi kao bekap celokupnog projekta sa kompletnom istorijom. Čak i ako vam se pokvari hard disk, možete klonirati repozitorijum na novi računar za par sekundi i nastaviti rad tačno odatle gdje ste stali. Git čuva svaku verziju svakog datoteke ikada commitovanog što znači da možete vratiti bilo koji datoteka u bilo koje prethodno stanje. Ovo je životno osiguranje za svaki projekt.
Osnovne Git komande
Inicijalizacija i konfiguracija
Početak rada sa Git-om zahtijeva instalaciju i osnovnu konfiguraciju. Na većini Linux distribucija Git je već instaliran ili se instalira komandom apt install git ili dnf install git. Na macOS-u dolazi sa Xcode Command Line Tools. Nakon instalacije konfigurirajte ime i email koji će se koristiti u commitovima sa git config global user.name Vaše Ime i git config global user.email vas@email.com. Ove informacije se zapisuju uz svaki commit.
Novi repozitorijum kreirate sa git init u direktoriju projekta. Ovo kreira skriveni .git folder koji sadrži kompletnu istoriju i konfiguraciju repozitorijuma. Alternativno možete klonirati postojeći repozitorijum sa git clone URL što preuzima projekt sa svom istorijom na vaš računar. Fajl .gitignore definira koje datoteke Git treba ignorisati poput node_modules direktorija, .env datoteka sa tajnama i kompajliranih binarnih datoteka.
Svakodnevne komande
Komanda git status prikazuje trenutno stanje repozitorijuma: koji datoteke su modifikovani, koji su dodati u staging area i koji nisu praćeni. Koristite je često da imate pregled nad tim što se dešava. Git add dodaje datoteke u staging area što je priprema za commit. Možete dodati pojedinačne datoteke sa git add ime-datoteke.js ili sve izmenjene datoteke sa git add ali budite pažljivi da ne dodate neželjene datoteke.
Komanda git commit kreira snapshot trenutnog stanja staging area sa opisnom porukom. Dobra commit poruka je kratka ali informativna, na primjer Dodaj validaciju email polja u kontakt formi. Konvencija je pisati poruke u imperativu kao da govorite što commit radi. Git log prikazuje istoriju commitova sa hash identifikatorima, autorima, datumima i porukama. Koristite git log oneline za kompaktan pregled ili git log graph za vizualni prikaz grana.
Rad sa granama
Kreiranje nove grane: git branch ime-grane kreira granu ali ne prelazi na nju. Git checkout ime-grane prelazi na postojeću granu. Kombinacija git checkout -b ime-grane kreira novu granu i odmah prelazi na nju što je najčešći workflow. Savremeni Git nudi i git switch komandu koja je intuitivnija alternativa za checkout pri radu sa granama. Imenujte grane opisno poput feature/online-narudžbine ili fix/login-bug.
Spajanje grana se radi sa git merge ime-grane dok ste na grani u koju želite spojite promjene. Tipičan workflow je: prelazite na main granu, zatim radite merge vaše feature grane. Ako nema konflikata Git automatski spaja kod. Ako ima konflikata Git označava problematične dijelove u datotekama sa specijalnim markerima i vi ručno birate koje promjene zadržati. Nakon razrešavanja konflikata commitujete rezultat.
GitHub i remote repozitorijumi
GitHub je najpopularnija platforma za hosting Git repozitorijuma sa preko 100 miliona korisnika. Pored čuvanja koda GitHub nudi issue tracking, pull request workflow, CI/CD sa GitHub Actions, wiki stranice i mnogo više. Alternativne platforme uključuju GitLab koji nudi self-hosting opciju i Bitbucket koji se dobro integrira sa Atlassian alatima poput Jire.
Komanda git remote add origin URL povezuje lokalni repozitorijum sa remote-om na GitHub-u. Git push šalje vaše commitove na remote server gdje ih drugi članovi tima mogu vidjeti i preuzeti. Git pull preuzima najnovije promjene sa remote-a i spaja ih sa vašim lokalnim kodom. Git fetch preuzima promjene ali ih ne spaja automatski što vam daje priliku da ih pregledate prije spajanja.
Pull Request workflow
Pull request ili PR je mehanizam za pregled koda prije spajanja sa glavnom granom. Programer kreira granu, commituje promjene, pushuje na GitHub i otvara PR sa opisom promjena. Drugi članovi tima pregledaju kod, ostavljaju komentare i sugestije. Tek nakon odobrenja jednog ili više reviewera PR se spaja sa main granom. Ovaj workflow osigurava kvalitet koda i deljenje znanja u timu jer svaki programer vidi što drugi rade.
Dobar PR ima jasnu poruku koja opisuje što je promenjeno i zašto, razumnu veličinu jer pregledanje PR-a sa hiljadama linija koda je nemoguće, i automatske provjere poput testova i linting-a koje se pokreću kroz CI/CD. GitHub Actions može automatski pokrenuti testove pri svakom pushu i prikazati rezultat na PR-u što sprječava spajanje koda koji ruši testove.
Git u deployment workflow-u
Git je osnova modernog deployment procesa, posebno na VPS serverima. Najjednostavniji pristup je ručni deployment gdje se na serveru radi git pull da se preuzmu najnovije promjene. Ovo je dovoljno za male sajtove ali ne skalira dobro i podložno je ljudskim greškama. Bolji pristup je automatiziran deployment gdje push na određenu granu poput main automatski pokreće deployment kroz CI/CD pipeline.
Tipičan automatizirani workflow izgleda ovako: programer pushuje kod na GitHub, GitHub Actions pokreće testove i build, ako sve prođe kod se automatski deployuje na staging server za testiranje, nakon odobravanja deployuje se na produkciju. Ovaj pristup eliminira mogućnost da se zaboravi pokretanje testova ili da se deployuje pogrešna verzija. Na BeoHosting-u podržavamo Git deployment za sve hosting pakete sa mogućnošću automatizacije putem webhookova.
Git strategije za timove
Git Flow je popularna strategija grananja koja definira uloge za različite grane: main za produkcijski kod, develop za razvoj, feature grane za nove funkcionalnosti, release grane za pripremu verzija i hotfix grane za hitne popravke u produkciji. Ova strategija je temeljita ali može biti previše kompleksna za male timove. Trunk-based development je jednostavnija alternativa gdje svi programeri commituju direktno na main granu sa kratkim feature granama koje traju dan ili dva.
Bez obzira na strategiju, nekoliko pravila je univerzalno: nikada ne commitujte direktno na main granu, uvijek koristite PR za review, pišite opisne commit poruke, držite commitove male i fokusirane na jednu promjenu i nikada ne commitujte tajne poput lozinki ili API ključeva. Ako slučajno commitujete tajnu promenite je odmah jer je čak i nakon brisanja iz istorije moguće da je neko već preuzeo.
Zaključak
Git je nezamenjiv alat za svakog ko radi sa kodom bilo da ste solo developer ili dio velikog tima. Investicija u učenje Git-a se višestruko isplati kroz bolju organizaciju, sigurnost koda i efikasniji timski rad. Počnite sa osnovnim komandama, koristite GitHub za hosting repozitorijuma i postepeno uvodite naprednije workflow-ove. Na BeoHosting-u podržavamo Git deployment za sve hosting pakete što vam omogućuje brz i pouzdan deployment direktno iz vašeg repozitorijuma.
BeoHosting Team
10+ godina iskustva — Stručnjaci za web hosting i infrastrukturu
- Web Hosting
- WordPress Hosting
- VPS
- Dedicated Serveri
- Domeni
- SSL
- cPanel
- LiteSpeed
- Linux administracija
- DNS
Posljednje ažuriranje: