Šta je Git i zašto ga koristiti

Šta je Git
Git je distribuirani sistem za kontrolu verzija koji prati promene u fajlovima i omogućava 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ćava da pratite svaku promenu, 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 cele istorije projekta na svom računaru. Ovo omogućava 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 promena
Bez sistema za kontrolu verzija programeri se oslanjaju na ručno kopiranje fajlova. 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 promene. Git automatski beleži svaku promenu sa informacijom ko ju je napravio, kada i zašto. Možete videti kompletnu istoriju projekta, uporediti bilo koje dve verzije i tačno znati koja linija koda je promenjena u svakom trenutku.
Svaki commit u Git-u je snapshot stanja projekta u određenom trenutku sa porukom koja opisuje šta je promenjeno i zašto. Ovo je neprocenjivo kada mesecima kasnije treba razumeti zašto je neka promena napravljena ili kada treba pronaći commit koji je uveo bug. Git blame komanda pokazuje ko je poslednji menjao svaku liniju koda što ubrzava pronalaženje odgovornih osoba za određeni deo koda.
Grananje i paralelni rad
Git grane ili branches su jedna od najmoćnijih funkcionalnosti. Grana je nezavisna linija razvoja koja vam omogućava da radite na novoj funkcionalnosti bez uticaja 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 posledica na ostatak projekta.
U timu svaki programer može raditi na svojoj grani bez brige da će prepisati tuđi rad. Git automatski spaja promene 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 delove i traži od programera da ručno razreši konflikt. Ovo je daleko bolje od alternativnog scenarija gde dva programera menjaju isti fajl 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 gde ste stali. Git čuva svaku verziju svakog fajla ikada commitovanog što znači da možete vratiti bilo koji fajl u bilo koje prethodno stanje. Ovo je životno osiguranje za svaki projekat.
Osnovne Git komande
Inicijalizacija i konfiguracija
Početak rada sa Git-om zahteva 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 [email protected]. Ove informacije se zapisuju uz svaki commit.
Novi repozitorijum kreirate sa git init u direktorijumu 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 projekat sa svom istorijom na vaš računar. Fajl .gitignore definiše koje fajlove Git treba ignorisati poput node_modules direktorijuma, .env fajlova sa tajnama i kompajliranih binarnih fajlova.
Svakodnevne komande
Komanda git status prikazuje trenutno stanje repozitorijuma: koji fajlovi su modifikovani, koji su dodati u staging area i koji nisu praćeni. Koristite je često da imate pregled nad tim šta se dešava. Git add dodaje fajlove u staging area što je priprema za commit. Možete dodati pojedinačne fajlove sa git add ime-fajla.js ili sve izmenjene fajlove sa git add ali budite pažljivi da ne dodate neželjene fajlove.
Komanda git commit kreira snapshot trenutnog stanja staging area sa opisnom porukom. Dobra commit poruka je kratka ali informativna, na primer Dodaj validaciju email polja u kontakt formi. Konvencija je pisati poruke u imperativu kao da govorite šta 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 vizuelni 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 da spojite promene. 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 delove u fajlovima sa specijalnim markerima i vi ručno birate koje promene 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 integriše 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 gde ih drugi članovi tima mogu videti i preuzeti. Git pull preuzima najnovije promene sa remote-a i spaja ih sa vašim lokalnim kodom. Git fetch preuzima promene ali ih ne spaja automatski što vam daje priliku da ih pregledate pre spajanja.
Pull Request workflow
Pull request ili PR je mehanizam za pregled koda pre spajanja sa glavnom granom. Programer kreira granu, commituje promene, pushuje na GitHub i otvara PR sa opisom promena. 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 obezbeđuje kvalitet koda i deljenje znanja u timu jer svaki programer vidi šta drugi rade.
Dobar PR ima jasnu poruku koja opisuje šta je promenjeno i zašto, razumnu veličinu jer pregledanje PR-a sa hiljadama linija koda je nemoguće, i automatske provere 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 spreč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 gde se na serveru radi git pull da se preuzmu najnovije promene. Ovo je dovoljno za male sajtove ali ne skalira dobro i podložno je ljudskim greškama. Bolji pristup je automatizovan deployment gde push na određenu granu poput main automatski pokreće deployment kroz CI/CD pipeline.
Tipičan automatizovani 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 eliminiše 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 definiše 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 gde 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, uvek koristite PR za review, pišite opisne commit poruke, držite commitove male i fokusirane na jednu promenu 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 deo 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ćava brz i pouzdan deployment direktno iz vašeg repozitorijuma.
BeoHosting Tim
10+ godina iskustva — Stručnjaci za web hosting i infrastrukturu
- Web Hosting
- WordPress Hosting
- VPS
- Dedicated Serveri
- Domeni
- SSL
- cPanel
- LiteSpeed
- Linux administracija
- DNS
Poslednje ažurirano: