Preskoči na vsebino
BeoHosting
BeoHosting
Tehnično

Kaj je Git in zakaj ga uporabljati

BeoHosting Ekipa··11 min branja branja
Kaj je Git in zakaj ga uporabljati

Kaj je Git

Git je porazdeljen sistem za nadzor različic, ki spremlja spremembe v datotekah in omogoča ekipam, da učinkovito sodelujejo na istem projektu. Leta 2005 ga je ustvaril Linus Torvalds za razvoj Linux jedra in od takrat je postal de facto standard v industriji programske opreme. Ne glede na to, ali delate sami na majhnem projektu ali v ekipi sto programerjev, vam Git omogoča, da spremljate vsako spremembo, se vračate na prejšnje različice in delate na več funkcionalnostih vzporedno brez konfliktov.

V nasprotju s starejšimi sistemi, kot je SVN, je Git porazdeljen, kar pomeni, da ima vsak programer popolno kopijo celotne zgodovine projekta na svojem računalniku. To omogoča delo brez internetne povezave, hitrejše operacije, saj se večina opravi lokalno, in večjo odpornost na izgubo podatkov, saj je vsak klon polna varnostna kopija. Razumevanje Gita je danes osnovna veščina vsakega programerja in spletnega razvijalca.

Zakaj uporabljati Git

Sledenje spremembam

Brez sistema za nadzor različic se programerji zanašajo na ročno kopiranje datotek. Za hrambo projektov razmislite o prostoru za varnostne kopije z imeni, kot je spletna-stran-v2-koncna-kopija-2.zip. Ta pristop je nevzdržen, saj hitro postane nemogoče vedeti, katera različica vsebuje katere spremembe. Git samodejno beleži vsako spremembo z informacijo, kdo jo je naredil, kdaj in zakaj. Lahko vidite popolno zgodovino projekta, primerjate katerikoli dve različici in natančno veste, katera vrstica kode je bila spremenjena v vsakem trenutku.

Vsak commit v Gitu je posnetek stanja projekta v določenem trenutku s sporočilom, ki opisuje, kaj je bilo spremenjeno in zakaj. To je neprecenljivo, ko je mesece kasneje treba razumeti, zakaj je bila neka sprememba narejena, ali ko je treba najti commit, ki je uvedel hrošča. Ukaz git blame prikaže, kdo je nazadnje spreminjal vsako vrstico kode, kar pospeši iskanje odgovornih oseb za določen del kode.

Razvejanje in vzporedno delo

Git veje ali branches so ena od najmočnejših funkcionalnosti. Veja je neodvisna razvojna linija, ki vam omogoča delo na novi funkcionalnosti brez vpliva na glavno kodo. Lahko ustvarite vejo za vsak bug fix ali novo funkcionalnost, delate na njej kolikor je treba in jo združite z glavno vejo šele, ko je vse stestirano in pripravljeno. Če se funkcionalnost izkaže kot slaba ideja, vejo enostavno izbrišete brez kakršnih koli posledic za preostanek projekta.

V ekipi lahko vsak programer dela na svoji veji brez skrbi, da bo prepisal tuje delo. Git samodejno združuje spremembe iz različnih vej in v večini primerov to počne brez posredovanja. Ko pride do konflikta, Git jasno označi problematične dele in od programerja zahteva, da konflikt razreši ročno. To je veliko boljše od alternativnega scenarija, kjer dva programerja spreminjata isto datoteko in eden prepiše delo drugega brez opozorila.

Varnostna kopija in obnova

Vsak Git repozitorij na oddaljenem strežniku, kot je GitHub, služi kot varnostna kopija celotnega projekta s popolno zgodovino. Tudi če se vam pokvari trdi disk, lahko repozitorij klonirate na nov računalnik v nekaj sekundah in nadaljujete z delom natančno tam, kjer ste prenehali. Git hrani vsako različico vsake kakor koli commitane datoteke, kar pomeni, da lahko poljubno datoteko vrnete v poljubno prejšnje stanje. To je življenjsko zavarovanje za vsak projekt.

Osnovni Git ukazi

Inicializacija in konfiguracija

Začetek dela z Gitom zahteva namestitev in osnovno konfiguracijo. Na večini Linux distribucij je Git že nameščen ali se namesti z ukazom apt install git ali dnf install git. Na macOS prihaja z Xcode Command Line Tools. Po namestitvi konfigurirajte ime in e-pošto, ki bosta uporabljena v commitih, z git config global user.name Vaše Ime in git config global user.email vas@email.com. Te informacije se zapišejo ob vsakem commitu.

Nov repozitorij ustvarite z git init v imeniku projekta. To ustvari skrito mapo .git, ki vsebuje popolno zgodovino in konfiguracijo repozitorija. Alternativno lahko klonirate obstoječi repozitorij z git clone URL, kar prenese projekt z vso zgodovino na vaš računalnik. Datoteka .gitignore določa, katere datoteke naj Git ignorira, kot so imenik node_modules, datoteke .env s skrivnostmi in prevedene binarne datoteke.

Vsakodnevni ukazi

Ukaz git status prikaže trenutno stanje repozitorija: katere datoteke so bile spremenjene, katere so dodane v staging area in katerih ne spremlja. Uporabljajte ga pogosto, da imate pregled nad tem, kaj se dogaja. Git add doda datoteke v staging area, kar je priprava za commit. Lahko dodate posamezne datoteke z git add ime-datoteke.js ali vse spremenjene datoteke z git add, vendar bodite previdni, da ne dodate neželjenih datotek.

Ukaz git commit ustvari posnetek trenutnega stanja staging area z opisnim sporočilom. Dobro commit sporočilo je kratko, vendar informativno, na primer Dodaj validacijo polja e-pošta v kontaktnem obrazcu. Konvencija je pisati sporočila v velelnem naklonu, kot da pripovedujete, kaj commit počne. Git log prikaže zgodovino commitov s hash identifikatorji, avtorji, datumi in sporočili. Uporabite git log oneline za kompakten pregled ali git log graph za vizualni prikaz vej.

Delo z vejami

Ustvarjanje nove veje: git branch ime-veje ustvari vejo, vendar ne preide nanjo. Git checkout ime-veje preide na obstoječo vejo. Kombinacija git checkout -b ime-veje ustvari novo vejo in takoj preide nanjo, kar je najpogostejši workflow. Sodobni Git ponuja tudi ukaz git switch, ki je intuitivnejša alternativa za checkout pri delu z vejami. Veje poimenujte opisno, kot je feature/spletna-narocila ali fix/login-bug.

Združevanje vej se izvaja z git merge ime-veje, ko ste na veji, v katero želite združiti spremembe. Tipičen workflow je: preidete na main vejo, nato izvedete merge svoje feature veje. Če ni konfliktov, Git samodejno združi kodo. Če so konflikti, Git označi problematične dele v datotekah s posebnimi markerji in vi ročno izberete, katere spremembe obdržati. Po razrešitvi konfliktov rezultat commitate.

GitHub in oddaljeni repozitoriji

GitHub je najpopularnejša platforma za gostovanje Git repozitorijev z več kot 100 milijoni uporabnikov. Poleg hranjenja kode GitHub ponuja sledenje issuom, pull request workflow, CI/CD z GitHub Actions, wiki strani in še veliko več. Alternativne platforme vključujejo GitLab, ki ponuja možnost lastnega gostovanja, in Bitbucket, ki se dobro integrira z Atlassian orodji, kot je Jira.

Ukaz git remote add origin URL poveže lokalni repozitorij z oddaljenim na GitHubu. Git push pošlje vaše commite na oddaljeni strežnik, kjer jih lahko vidijo in prenesejo drugi člani ekipe. Git pull prenese najnovejše spremembe z oddaljenega in jih združi z vašo lokalno kodo. Git fetch prenese spremembe, vendar jih ne združi samodejno, kar vam daje priložnost, da jih pregledate pred združitvijo.

Pull Request workflow

Pull request ali PR je mehanizem za pregled kode pred združitvijo z glavno vejo. Programer ustvari vejo, commita spremembe, jih potisne na GitHub in odpre PR z opisom sprememb. Drugi člani ekipe pregledajo kodo, puščajo komentarje in predloge. Šele po odobritvi enega ali več pregledovalcev se PR združi z main vejo. Ta workflow zagotavlja kakovost kode in deljenje znanja v ekipi, saj vsak programer vidi, kaj počnejo drugi.

Dober PR ima jasno sporočilo, ki opisuje, kaj je bilo spremenjeno in zakaj, razumno velikost, saj je pregledovanje PR-ja s tisočimi vrsticami kode nemogoče, in samodejna preverjanja, kot so testi in linting, ki se sprožijo prek CI/CD. GitHub Actions lahko samodejno zaženejo teste ob vsakem pushu in prikažejo rezultat na PR-ju, kar prepreči združitev kode, ki ruši teste.

Git v deployment workflowu

Git je osnova sodobnega deployment procesa, zlasti na VPS strežnikih. Najpreprostejši pristop je ročni deployment, kjer se na strežniku izvede git pull, da se prenesejo najnovejše spremembe. To je dovolj za majhne spletne strani, vendar se ne skalira dobro in je podvrženo človeškim napakam. Boljši pristop je avtomatiziran deployment, kjer push na določeno vejo, kot je main, samodejno sproži deployment prek CI/CD pipelina.

Tipičen avtomatiziran workflow izgleda tako: programer potisne kodo na GitHub, GitHub Actions zažene teste in build, če vse uspe, se koda samodejno razmesti na staging strežnik za testiranje, po odobritvi se razmesti na produkcijo. Ta pristop odpravi možnost, da bi se pozabilo zagnati teste ali bi se razmestila napačna različica. Pri BeoHostingu podpiramo Git deployment za vse hosting pakete z možnostjo avtomatizacije prek webhookov.

Git strategije za ekipe

Git Flow je priljubljena strategija razvejanja, ki določa vloge za različne veje: main za produkcijsko kodo, develop za razvoj, feature veje za nove funkcionalnosti, release veje za pripravo različic in hotfix veje za nujne popravke v produkciji. Ta strategija je temeljita, vendar je lahko prezapletena za majhne ekipe. Trunk-based development je preprostejša alternativa, kjer vsi programerji commitajo neposredno na main vejo s kratkimi feature vejami, ki trajajo en ali dva dni.

Ne glede na strategijo je nekaj pravil univerzalnih: nikoli ne commitajte neposredno na main vejo, vedno uporabljajte PR za pregled, pišite opisne commit sporočila, ohranjajte commite majhne in osredotočene na eno spremembo in nikoli ne commitajte skrivnosti, kot so gesla ali API ključi. Če ste pomotoma commitali skrivnost, jo nemudoma spremenite, saj je tudi po brisanju iz zgodovine mogoče, da jo je nekdo že prenesel.

Zaključek

Git je nenadomestljivo orodje za vsakogar, ki dela s kodo, naj bo solo razvijalec ali del velike ekipe. Naložba v učenje Gita se večkratno povrne z boljšo organizacijo, varnostjo kode in učinkovitejšim timskim delom. Začnite z osnovnimi ukazi, uporabite GitHub za gostovanje repozitorijev in postopoma uvajajte naprednejše workflowe. Pri BeoHostingu podpiramo Git deployment za vse hosting pakete, kar vam omogoča hitro in zanesljivo razmestitev neposredno iz vašega repozitorija.

BeoHosting Ekipa

10+ let izkušenj — Strokovnjaki za spletno gostovanje in infrastrukturo

  • Web Hosting
  • WordPress Hosting
  • VPS
  • Dedicated Serveri
  • Domeni
  • SSL
  • cPanel
  • LiteSpeed
  • Linux administracija
  • DNS

Zadnja posodobitev: