[TUT] Git - revolucija u razvoju softwarea

poruka: 6
|
čitano: 13.191
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
neaktivan
offline
[TUT] Git - revolucija u razvoju softwarea

NAPOMENA: Toliko od mene za sad. Ovaj guide nije dovršen, updateati ću ga kroz sljedećih par dana dok ću imati vremena. Još će neke teme biti obrađene te trenutne bolje objašnjene i uređene. Ako imate kakvih komentara/prijedloga dodajte komentar i potrudit ću se da uvažim iste. Hvala na strpljenju.

 

Ako ste aktivni u svijetu programiranja bilo koje vrste sigurno ste čuli za Git. To mistično stvorenje i sva njegova komplicirana terminologija koja uključuje, kojekakve grane, vilice, merge-eve, commit-eve, pull request-ove i sl. Gotovo svaki open source projekt nalazi se na GitHub-u ili BitBucket-u, razne priče o kompanijama koje pregledavaju vašu GitHub aktivnost kod traženja zaposlenja, no ipak ta njegova naizgled komplicirana vanjština me godinama spriječavala da se potrudim i pročitam što to mistično stvorenje i radi.

 

No jednog kišovitog dana, kad je ostatak normalnog društva bio u krevetu, inspiriran dosadom odlučio sam uloviti i tog mačka za rep.

Ovo je guide za ljude poput mene, koji žele naučiti što je i kako se koristi Git, skupa s primjerima i kvalitetnim (a i pokojom nekvalitetnom) slikama.

 

 

Što je Git?

Koliko puta vam se desilo da ste izvrnuli "sto i jednu" klasu i promjenili cijelu bazu aplikacije kako bi implementirali neku značajku i onda shatili da to neće raditi zbog XXX razloga, naravno bez da ste imali backup te potrošili još više vremena vračajući sve u prvobitno stanje? Jeli vam se ikad desilo da jedini disk na kojem je projekt bio pohranjen odjednom ode u vječna lovišta ili se formatira zajedno s svim tim satima rada i i litrama znoja? Jeste li ikad htjeli kolaborirati na jednom projektu, ali niste znali praktično riješenje kako uređivati istu datoteku istovremeno? Pogotovo ako osobe s kojima bi trebali surađivati žive na drugom kraju Hrvatske ili čak planeta.

Vašim problemima došao je kraj, pogledali se u daljinu i uzviknuli: "It's a bird, it's a plane, IT'S.......gitman??...".

Tada u vaš vidni krug doletjelo je ovo:

 Git je sustav koji pohranjuje svaku vašu promjenu, no za razliku od ručnog backupiranja on to radi tako da sprema samo razlike u datotekama, ne i cijeli projekt (više o tome u nastavku) što ne znači samo veliku uštedu prostora nego mu i donosi mnoge nove mogučnosti. On također omogućuje da više ljudi sudjeluje u jednom projektu istovremeno. Moguće je čak i otvoriti taj projekt javnosti i dozvoliti tisučama ljudi da dodaju značajke u vaš projekt, ili naprave od vašeg projekta neki drugi u drugačijem smjeru. Isto tako Git decentralizira backup, backup neće više biti pohranjen samo na jednom disku, nego će biti kod svakog tko je sudjelovao u projektu pa čak i na nekom udaljenom serveru kao centralna baza.

 

 

 

Instalacija

Prvo i osnovno, kako bi počeli koristiti Git, morate ga i skinuti. To možete učiniti na ovoj adresi, Git open source program dostupan za sve poznate platforme (Win, Linux, OS X) no ja ću se u ovom vodiču koristiti Gitom za Windows, no sve komande i principi ostaju isti na svim platformama.

Nakon što ste Git skinuli, instalirajte ga, instalacija je dosta jednostavna te mislim da tu nebi trebali biti problema.

 

 

Početak korištenja

Sad vas molim da rastegnete prstiće, popucate zglobovima i pripremite se za tipkanje u " good ol' " command promptu (Terminal na Linuxu i OS X). Ukoliko koristite Windows 7+ možete koristiti i PowerShell. Moram napomenuti da trebate neko osnovno znanje komandi za "šetanje" po file systemu kako bi koristili Git. 

Navigirajte se do direktorija u kojem želite spremiti mapu s vašim novim projektom te izradite mapu s simboličnim imenom, ja ću za svrhu ovog vodiča kreirati folder imena "GitTest".

Uđite u novo-kreiranu mapu te utipkajte komandu:

git init

Ova komanda kreira sve datoteke koje Git koristi kako bi funkcionirao, ona će kreirati par skrivenih datoteka u tom folderu te se s njima nemojte zamarati.

Sada ste uspješno kreirali vaš git "repository". Tu mapu možete koristiti kao i svaku drugu normalnu mapu. Sve povezano s projektom koji radite stavljajte u tu mapu.

 

 

Git add i commit

Commit je neka točka u povijesti projekta koja je promjenila neku značajku u odnosu na zadnju točku.

Kako bi ilustrirao bit add-a i commit-a kreirao sam tekstualnu datoteku "tekst.txt" u našoj mapi. Ona je prvobitno prazna:

No git trenutno tu datoteku ne prati, kako bi Git dodao promjene u toj datoteci u sljedeći commit koristimo ovu komandu

git add tekst.txt

No naše promjene sada nisu spremljene, da bi napravili tu točku, u koju ćemo se kasnije moći vraćati moramo tu promjenu i commit-ati. To čemo učiniti komandom:

git commit -m "Dodana datoteka tekst.txt."

Primjetite da komanda commit prima parametar -m. Taj parametar dodaje tom commit-u neki komentar, tako da kasnije kad ćemo trebati naći spornu promjenu možemo lako prolistati kroz sve commiteve. U njima se opisuje radnja koju ste učinili, na primjer: "Popravlja MySql injection exploit u polju naziv kod dodavanja novog artikla.". Pokušajte biti čim precizniji i točniji, ali isto tako koristiti čim manje riječi.

Git nas sada obaviješta o svim promjenama koje su učinjene u tom commitu. Pokušajte sada izvršiti istu komandu ponovo.

Git će izbaciti "nothing to commit, working directory clean", on nas time obavještava da nije našao nikakve promjene u našem direktoriju. Što znači jednu od dvije stvari, da smo zaboravili dodati u sljedeći commit (git add) datoteku koju smo promjenili ili jednostavno nismo napravili nikakve nove promjene.

Sad ćemo promjeniti našu datoteku i ponoviti ovo. Ja sam u svom primjeru dodao 3 vica u datoteku i to spremio.

Sada opet dodamo datoteku u sljedeći commit (git add) te taj commit spremiti (git commit) sljedećim komandama:

git add tekst.txt

git commit -m "Dodana 3 vica."

Git nas opet obavještava o promjenama (promjenjena 1 datotka, dodano 10 redova).

No ja sam nakon sata premišljanja odlučio da mi se vic o kupusu ne sviđa pa ga želim izbaciti. Izbrišem isti u datoteci, spremim je te ponovim postupak committ-a:

git add tekst.txt

git commit -m "Uklonjen vic s kupusom."

Git nam sada javlja poruku da je promjenjena 1 datoteka te izbrisano 4 reda (3 reda s vicem i jedan prazan). Ovo je bilo bitno da pokažem kako Git razmišlja o podatcima:

Naime Git nije ponovo spremao cijelu datoteku jer se dogodila promjena u njoj. On je samo zapamtio da su ta 3 reda oduzeta, što zauzima puno manje prostora nego da se išla spremati cijela datoteka nanovo. To bilježenje promjena omogućuje sve ono što sam gore naveo bez ogromne potrošnje podatkovnih kapaciteta.

 

 

Djeljenje Git repository-a na GitHub-u

Kako bi podjelili naš Git repository s cijelim svijetom ili s grupom ljudi s kojom radimo možemo koristiti mnoge online Git hosting usluge, od kojih su mnoge besplatne. Najpopularnije su BitBucket i GitHub. Ja ću kreirati novi javni repository na GitHub-u. Proces je vrlo jednostavan, registrirate se te pritiskom na gumb napravite novi repository te ga imenujete, odredite dali je javan ili privatan, te dodate neki opis.

Kada ste ga kreirali dobit ćete link, pomoću tog linka možete uploadati vaš lokalni repository u vaš online repository na GitHub-u pomoću ovih komandi:

git remote add origin https://github.com/Username/Ime-repoa.git

Sada ste u svoj git repository dodali centralni server. Kako bi uploadali sve svoje promjene na njega koristite komandu:

git push origin master

Svaki put kad želite promjene na svom lokalnom serveru uploadati na centralni koristite komandu iznad.

Sad su naše promjene vidljive svima.

Ovdje naprimjer možete provjeriti svaku promjenu koja je ikad napravljena na datoteci tekst.txt.

U našoj datoteci smo dodali 3 vica s 10 linija, i kasnije izbrisali jedan s 4. Što bi značilo da povijest naše datoteke izgleda ovako:

 

 

Kloniranje repository-a - sudjelovanje u tuđem projektu

Kako biste klonirali repository prvo trebate pronaći URL tog repository-a.

URL mog repository-a je https://github.com/TheWildHorse/GItTest-BugGuide.git

Kako bi kopirali sve podatke s tog repository-a na naše računalo koristimo sljedeću komandu:

git clone https://github.com/TheWildHorse/GItTest-BugGuide.git

Git će kreirati folder s tim projektom na našem računalu i skinuti sve podatke s online repository-a. Kako bi sudjelovali u projektu koristimo isti princip kao i iznad. Dodamo neku značajku u program, popravimo neki bug ili slično te metodom opisanom u sekciji "Git add i commit" dodamo tu točku promjene. Kako bi podjelili naše promjene s ostalim ljudima i vlasnikom projekta opet koristimo komandu kako bismo uploadali naše promjene na internet:

git push origin master

 

 

 

Grananje i spajanje grana

Svaki Git repository dolazi s glavnom granom, ona se naziva master. No Git dopušta dodavanje više grana odnosno branch-eva. Ako bi vi htjeli na svojem projektu otvoriti eksperimentalnu granu u kojoj bi htjeli pokušati implementirati neku funkciju za koju niste sigurni dali će raditi ili vam treba mnogo vremena za testiranje i ispravake prije nego ste spremni je izdati u javnost to baš i nebi bilo zgodno raditi u glavnoj grani jer bi time zaustavili njezin razvoj, i donjeli probleme kod korisnika koji koriste vašu aplikaciju.

Kako bi kreirali novu granu koristimo skup komandi:

git branch ime_nove_grane //Kreiramo novu granu na našem računalu
git push origin ime_nove grane //Uploadamo novu granu na naš Git host (GitHub, GitBucket..)
git checkout ime_nove_grane //Prebacujemo se na novu granu

Sad svaku promjenu koju učinimo više ne činimo na master grani nego na novoj grani. Opet koristimo isti sistem dodavanja i commit-anja no da bi poslali novu granu da naš Git host sada više ne koristimo:

git push origin master

Nego zamjenimo master s imenom naše grane koju uređujemo:

git push origin nova_grana

Kada smo zadovoljni s našim radom u grani i sve je detaljno iztestirano možemo je pripojiti našoj glavnoj (master grani). Bitno je napomenuti da kad ovo činimo sav napredak koji se dešavao u glavnoj grani dok smo mi radili u našoj odvojenoj grani NEĆE biti izgubljen iako neke značajke nisu pristupne u našoj grani. Git će svojim algoritmom pripojiti sve promjene u obje grane iako su se paralelno odvijale. Koristimo sljedeću komande:

git checkout master //Vračamo se u našu glavnu granu, ili u neku drugu granu kojoj želimo pripojiti našu novu granu
git merge nova_grana //Spaja trenutnu granu s nova_grana 

Sada su sve promjene u master grani i nova_grana pripojene.

 

 

Poruka je uređivana zadnji put pon 11.11.2013 16:44 (LordShgi).
Moj PC  
7 0 hvala 5
16 godina
neaktivan
offline
[TUT] Git - revolucija u razvoju softwarea

Pohvale za trud.

 

Tomo Krajina je napisao jednu odličnu knjigu na domaćem jeziku i objavio ju ni manje ni više nego na githubu: https://github.com/tkrajina/uvod-u-git

Ova knjiga mi je odgovorila na gotovo svako pitanje o gitu koje sam imao.

 

PDF izdanje se može skinuti ovdje http://tkrajina.github.io/uvod-u-git/git.pdf

 
3 0 hvala 2
14 godina
neaktivan
offline
Re: [TUT] Git - revolucija u razvoju softwarea

Malo smo impresionirani GIT-om? {#}

 

Nije baš svaki open source projekt na githubu i bitbucketu, a što je sa source forgeom!? Google code? A i naslov je pretenciozan, GIT nije jedini a ni prvi source control sustav, pa čak ni jedini distributed source control sustav.

 

Bojim se da nećeš ni izbliza moći dovoljno pokriti rad u nekom source control sustavu običnim tutorialom. Tu treba malo više od nabrajanja i objašnjavanja komandi. Ali hajde da vidimo dokle ćeš dogurati s time...

 

btw. nisi spomenuo grafičke frontendove za windows. Postoji TortoiseGit (što nastavlja tradiciju tortoiseSVN-a i tortoiseHG-a). Oni se integriraju u shell i drastično smanjuju potrebu za tipkanjem. Također bilo bi zgodno i pokriti integraciju u razne IDE-e. Recimo u Code::Blocksu se bez problema može složiti podrška za bilo koji source control sustav, a čini mi se i da je u razvoju plugin baš za GIT. Dok Eclipse i NetBeans garant imaju još i bolju podršku.

What Andy giveth, Bill taketh away.
Poruka je uređivana zadnji put pon 11.11.2013 17:45 (rustweaver).
15 godina
neaktivan
offline
Re: [TUT] Git - revolucija u razvoju softwarea
rustweaver kaže...

Malo smo impresionirani GIT-om? {#}

 

Nije baš svaki open source projekt na githubu i bitbucketu, a što je sa source forgeom!? Google code? A i naslov je pretenciozan, GIT nije jedini a ni prvi source control sustav, pa čak ni jedini distributed source control sustav.

 

Bojim se da nećeš ni izbliza moći dovoljno pokriti rad u nekom source control sustavu običnim tutorialom. Tu treba malo više od nabrajanja i objašnjavanja komandi. Ali hajde da vidimo dokle ćeš dogurati s time...

Nije mi cilj pokriti svaki kutak Git-a jer to nebi imalo smisla, svatko koga zanima nešto više ima hrpu dokumentacije na netu. Moj je cilj napraviti uvid u Git, i gurnuti ljude u pravome smjeru. Sad kolko ću u tome biti uspješan teško je reći, tema je dosta teška za objasniti i dosta apstraktna, a da ne spominjem i opširna.

 

Priznajem da je naslov malo senzaciolistički, al je**ga, naše novinarstvo me to naučilo, nisam ja kriv. :D

 

 

Poruka je uređivana zadnji put pon 11.11.2013 17:45 (LordShgi).
14 godina
neaktivan
offline
Re: [TUT] Git - revolucija u razvoju softwarea
LordShgi kaže...

Sad kolko ću u tome biti uspješan teško je reći, tema je dosta teška za objasniti i dosta apstraktna, a da ne spominjem i opširna.

U tom slučaju mislim da bi se više trebao orijentirati na demonstraciju svrhe source control sustava. Objasniti zašto ga koristiti, a potom i kako točno source control pomaže u razvoju softvera (primjerice, nisi se ni dotakao patcheva niti spajanja grana), te tek na kraju uhvatiti se dijelova specifičnih za GIT (komande i njihova sintaksa te još neke specifičnosti).

 

Tvoj je tutorijal trenutno napisan tako da objašnjava osnove GIT-a nekome tko je već koristio source control (npr. meni je razumljiv jer već koristim mercurial). A koliko sam skužio želiš ga približiti publici koja praktički nije ni čula za source control sustave. Pogledaj ovaj uvod u mercurial i pokradi sve koncepte koji su primjenjivi i na GIT.

What Andy giveth, Bill taketh away.
Poruka je uređivana zadnji put pon 11.11.2013 18:15 (rustweaver).
15 godina
offline
Re: [TUT] Git - revolucija u razvoju softwarea
rustweaver kaže...

 Dok Eclipse i NetBeans garant imaju još i bolju podršku.

 

Fino je u Eclipse-u, niš tipkanja sve preko ugodnih prozorčića. :)

Poruka je uređivana zadnji put pon 11.11.2013 20:42 (Dr. Zoidberg).
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice