Preskoči na sadržaj
BeoHosting
BeoHosting
Tehničko

Šta je Git i zašto ga koristiti

BeoHosting Team··11 min čitanja
Šta je Git i zašto ga koristiti

Šta je Git

Git je distribuirani sistem za kontrolu verzija koji prati promjene 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 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ć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. Razumijevanje 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 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 promjene. Git automatski bilježi svaku promjenu sa informacijom ko ju je napravio, kada i zašto. Možete videti kompletnu istoriju projekta, uporediti bilo koje dvije 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 šta je promijenjeno i zašto. Ovo je neprocenjivo kada mesecima 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 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 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 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 cjelokupnog 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 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 vas@email.com. 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 izmijenjene 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 primjer 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 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 fajlovima 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 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 gdje ih drugi članovi tima mogu videti 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 pre spajanja.

Pull Request workflow

Pull request ili PR je mehanizam za pregled koda pre 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 obezbjeđuje kvalitet koda i dijeljenje znanja u timu jer svaki programer vidi šta drugi rade.

Dobar PR ima jasnu poruku koja opisuje šta je promijenjeno 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 automatizovan deployment gdje 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 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 promijenite 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 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žurirano: