Sistem za upravljanje verzijama je alat koji prati promene u datotekama projekta i omogućava programerima da rade istovremeno bez ometanja jedan drugog. Prema Stack Overflow Developer Survey 2024, Git koristi 93,9% programera širom sveta, što ga čini apsolutnim standardom industrije. Hajde da analiziramo ključne koncepte Git-a, strategije grananja i popularne platforme za saradnju.
Ključne tačke
Git je distribuirani sistem kontrole verzija (VCS) koji je kreirao Linus Torvalds 2005. godine za razvoj Linux jezgra. Za razliku od centralizovanih sistema (SVN, CVS), Git čuva kompletnu kopiju istorije projekta na svakom računaru programera. To znači da možete da radite commitove, pregledate istoriju i kreirate grane čak i bez internet konekcije.
Git radi sa snimcima (snapshots) — svaki commit čuva stanje svih datoteka projekta u trenutku čuvanja. Ako se datoteka nije promenila, Git kreira referencu na prethodnu verziju, štedeći prostor. Prema GitHub analizi (2025), prosečan repozitorijum sadrži 1.200 commitova i 15 grana.
U IT Sectr-u koristimo Git od 2017. godine u svim projektima. Naše iskustvo pokazuje da pravilno podešavanje Git-a od prvog dana štedi timu do 30% vremena na spajanje i rešavanje sukoba. Git je postao de facto standard — podržavaju ga sva moderna IDE (Android Studio, Xcode, VS Code) i CI/CD sistemi.
# Osnovno podešavanje Git-a
git config --global user.name "Vaše Ime"
git config --global user.email "vas@email.com"
# Kreiranje novog repozitorijuma
git init my-project
cd my-project
# Dodavanje datoteka i commit
git add README.md
git commit -m "Initial commit"
# Rad sa udaljenim repozitorijumom
git remote add origin https://github.com/user/my-project.git
git push -u origin main
Prikazani kod pokazuje osnovni redosled: inicijalizacija repozitorijuma, prvi commit i objavljivanje na udaljenom serveru. Komanda git init kreira skriveni .git folder koji će čuvati celu istoriju projekta. Svaki git commit kreira tačku za vraćanje kojoj se možete vratiti u bilo kom trenutku.
Razumevanje tri osnovna koncepta — Repository, Branch i Commit — neophodno je za rad sa bilo kojim sistemom kontrole verzija. Repozitorijum je kontejner za ceo projekat. Commit je sačuvano stanje datoteka. Branch je odvojena linija razvoja.
Repository (repozitorijum) može biti lokalni (na vašem računaru) ili udaljeni (na GitHub, GitLab serveru). Svaki programer klonira udaljeni repozitorijum na svoju mašinu i radi sa lokalnom kopijom. Promene se sinhronizuju putem push (slanje) i pull (preuzimanje). U distribuiranom upravljanju verzijama, svaki programer čuva kompletnu kopiju istorije.
Branch (grana) je pokazivač na jedan od commitova. Grane omogućavaju paralelni razvoj: jedan programer radi na novoj funkciji (feature branch), drugi popravlja grešku (hotfix branch), treći priprema izdanje (release branch). Prema GitLab Flow (2025), prosečan projekat ima 3–5 aktivnih grana istovremeno.
Commit je jedinica promene. Svaki commit sadrži jedinstveni heš (SHA-1), poruku, autora i vremensku oznaku. Dobra praksa je pravljenje malih smislenih commitova sa opisnim porukama — ovo pojednostavljuje Code Review i vraćanje promena. Upravljanje verzijama putem commitova daje kompletnu istoriju projekta.
Feature Branch (grana funkcije) je privremena grana kreirana iz develop ili main za razvoj određenog zadatka. Po završetku rada, grana se spaja nazad putem Pull Request-a i briše. Ova praksa omogućava izolovanje promena bez narušavanja stabilnosti glavne kodne baze.
Tipičan workflow: kreiraj granu feature/add-login → napravi nekoliko commitova → kreiraj Pull Request → prođi Code Review → spoji u develop. U IT Sectr-u koristimo upravo ovaj pristup: svaki Jira zadatak odgovara zasebnoj feature grani. Ovo pojednostavljuje praćenje promena i vraćanje ako je potrebno.
Merge kreira commit spajanja koji kombinuje dve grane. On čuva kompletnu istoriju, uključujući paralelne linije razvoja. Rebase prepisuje istoriju: uzima commitove iz jedne grane i "nanovo ih primenjuje" na drugu, stvarajući linearnu istoriju.
Merge je pogodniji za javne grane i velike timove gde je hronologija važna. Rebase je zgodan za lične feature grane pre kreiranja PR-a — čini istoriju čistijom i razumljivijom. Međutim, rebase se nikada ne primenjuje na grane na kojima drugi programeri rade, jer prepisuje istoriju.
# Kreiranje i prebacivanje na feature granu
git checkout -b feature/add-login main
# Rad u grani
git add login-screen/
git commit -m "Add login screen layout"
# Rebase na najnoviji main pre PR-a
git checkout main && git pull
git checkout feature/add-login
git rebase main
# Push u udaljeni repozitorijum
git push origin feature/add-login
Ovaj primer prikazuje tipičan workflow: kreiranje feature grane iz main, nekoliko commitova i rebase za dobijanje čiste linearne istorije pre slanja na pregled. Ovaj pristup minimizira sukobe pri spajanju.
Git Flow i Trunk-Based Development su dve glavne strategije upravljanja verzijama koje određuju kako tim organizuje rad sa Git-om. Izbor zavisi od veličine tima, učestalosti izdanja i zahteva za stabilnošću.
Git Flow je strogi model sa više stalnih grana: main (izdanje kod), develop (trenutni razvoj), feature/* (nove funkcije), release/* (priprema izdanja) i hotfix/* (hitne ispravke). Ovaj model je dobar za projekte sa jasnim ciklusima izdanja (npr. mobilne aplikacije sa verzijama 1.0, 2.0).
Trunk-Based Development je pristup sa jednom glavnom granom (trunk/main) u koju svi programeri spajaju promene nekoliko puta dnevno. Feature flagovi se koriste za skrivanje nedovršenih funkcija. Ovaj pristup je popularan u veb razvoju i startupima gde je brzina isporuke važna.
Git Flow, koji je predložio Vincent Driessen 2010. godine, ostaje jedan od najpopularnijih modela. Njegova glavna prednost je strogo razdvajanje koda po fazama životnog ciklusa. Grana main sadrži samo izdanje kod, develop sadrži trenutni razvoj, a feature grane izoluju nove funkcije jednu od druge.
Hotfix grane se kreiraju iz main za hitne ispravke i nakon spajanja se spajaju nazad i u main i u develop. Release grane se kreiraju iz develop kada je tim spreman za izdanje. U njih se unose samo ispravke grešaka i metapodaci (verzija, build). Nakon izdanja, release grana se spaja u main i develop. Prema JetBrains anketi (2024), 37% timova koristi Git Flow. Ovaj model upravljanja verzijama ostaje standard za projekte sa fiksnim izdanjima.
# Primer Git Flow: početak rada na izdanju
git checkout -b release/1.2.0 develop
# Ispravka grešaka u release grani
git commit -m "Fix login button crash"
# Završetak izdanja — spajanje u main i develop
git checkout main
git merge --no-ff release/1.2.0
git tag -a 1.2.0
git checkout develop
git merge --no-ff release/1.2.0
# Brisanje release grane
git branch -d release/1.2.0
Kod ilustruje kreiranje release grane, njeno stabilizovanje i spajanje u glavne grane. Flag --no-ff garantuje commit spajanja, čuvajući informaciju da su promene došle iz release grane.
Pull Request (PR) je mehanizam putem kojeg programer predlaže promene iz svoje grane u glavnu granu. PR je ključni element upravljanja verzijama u timskom radu — to nije samo način da se spoji kod, već proces diskusije, pregleda i provere kvaliteta. U GitLab-u se sličan mehanizam zove Merge Request (MR), ali suština je ista: obavestiti tim o promenama i dobiti odobrenje.
Dobar PR treba da bude mali (do 300 linija koda), fokusiran na jedan zadatak i da sadrži opis onoga što je urađeno i zašto. Prema Google istraživanju (2025), PR-ovi veći od 400 linija pregledaju se duplo duže, a verovatnoća otkrivanja grešaka opada za 30%. Code Review je provera koda od strane drugog programera pre spajanja.
U IT Sectr-u praktikujemo obavezni Code Review za svaki PR. Ovo ne samo da poboljšava kvalitet koda, već pomaže i u širenju znanja unutar tima. Code Review proverava: da li kod prati arhitektonske principe, da li ima grešaka, da li ima dovoljno testova, da li su promenljive pravilno imenovane. Svi komentari se diskutuju u PR-u do spajanja.
Git je protokol, ali za saradnju je potrebna platforma za upravljanje verzijama koja pruža veb interfejs, upravljanje pristupom, CI/CD i alate za pregled. Tri platforme dominiraju tržištem: GitHub, GitLab i Bitbucket.
GitHub je najveća platforma sa više od 56 miliona programera. U vlasništvu Microsoft-a, nudi Actions (CI/CD), Pages (hosting), Discussions i Copilot. Besplatni plan uključuje neograničene privatne repozitorijume za timove do 3 osobe. GitHub je popularan u open-source zajednici.
GitLab je potpuna DevOps platforma sa integrisanim CI/CD, registrom kontejnera i upravljanjem infrastrukturom. Za razliku od GitHub-a, GitLab se može instalirati na sopstvenom serveru (Self-Managed). Bitbucket od Atlassian-a je usko integrisan sa Jira i Confluence, što ga čini izborom za timove koji već koriste Atlassian ekosistem.
Često postavljana pitanja
Git je sistem kontrole verzija (program), dok je GitHub veb platforma za hosting Git repozitorijuma. Git radi lokalno, GitHub radi udaljeno. Analogija: Git je kao vaš email klijent, a GitHub je email server.
Ako imate jasne cikluse izdanja i veliki tim, izaberite Git Flow. Ako radite deploy nekoliko puta dnevno i imate mali tim, Trunk-Based Development je bolji. Mnogi timovi koriste hibridni pristup.
Sukob nastaje kada su iste linije datoteke promenjene u dve grane. Git ne može automatski da izabere koja verzija je ispravna. Programer mora ručno da uredi datoteku, izabere ispravne promene i kreira commit spajanja.
Da, to je dobra praksa. Nakon što se feature grana spoji putem PR-a, treba je obrisati — i lokalno i na serveru. Ovo sprečava "zatrpavanje" repozitorijuma starim granama. GitHub i GitLab nude dugme "Delete branch" nakon spajanja.
Zaključak
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.