git: distribuirana kontrola verzije softvera

29
git: distribuirana kontrola verzije sovera Nikola Jovanović Matematička gimnazija N 3 12. decembar 2016. git: distribuirana kontrola verzije sovera Nikola Jovanović

Transcript of git: distribuirana kontrola verzije softvera

Page 1: git: distribuirana kontrola verzije softvera

git: distribuirana kontrola verzije so�vera

Nikola Jovanović

Matematička gimnazija

Nedelja informatike3

12. decembar 2016.

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 2: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Šta je kontrola verzije so�vera?

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 3: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Zašto je korisna?

Dodaje na sigurnosti čuvanjem prethodnih verzija

Pomaže da pratimo sopstvene promene (i eventualno ih

poništimo)

Olakšava eksperimentisanje

Omogućava kolaborativni razvoj

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 4: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Pristupi

Centralizovani

CVS, SVN, Perforce

Distribuirani

Mercurial, Bazaar, Git

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 5: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

git

Autor: Linus Torvalds (2005)

Nastao za potrebe razvoja Linux kernela

Danas najpopularniji alat u svojoj kategoriji

Open-source projekti

Velike kompanije

Integracija sa razvojnim okruženjima

Web source-code hosting sajtovi (GitHub 6= Git)

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 6: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Rad sa git-om

Rad iz komandne linije

h�ps://git-scm.com/

GUI okruženja

git-gui, gitk

Github Desktop, Tower

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 7: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Osnovni koncepti

Repozitorijum - struktura koja čuva istoriju projekta

Čuvaju se snimci (snapshots) umesto svake zasebne edit

operacije

Aciklični usmereni graf commit-ova

Commit - „snimak”, odgovara stanju projekta u jednom

trenutku vremena

Sadrži pokazivače ka roditeljskim commit-ovima, datum

stvaranja, podatke o autoru i opis

Svaki commit ima svoj globalno jedinstveni ID - 160-bitni SHA

heš

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 8: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Grananja

Branch - jedna od imenovanih linija razvoja

Glave grana se kreću zajedno sa novim commit-ovima

Default grana: master

Kreiranje nove grane =⇒ commit sa više dece

Merge - stapanje dve ili više grana u jednu

Strategije, fast-forward, konflikti

Merge grana =⇒ „merge commit” sa više očeva

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 9: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Još neki objekti

HEAD - simbolička veza, pokazuje na trenutno aktivnu granu

Checkout - promena aktivne grane, pomera HEAD

Tag - opisno ime za određeni commit

Primer: release-2.4.7

Tagovi uglavnom ne menjaju commit na koji pokazuju

Moguć je checkout na tag tj. na konkretan commit pri čemu se

ulazi u detached head mod: novi commit-ovi pomeraju HEAD,

ali na tom mestu nema grane

Ako se HEAD pomeri commit-ovi ostaju da „vise”

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 10: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Storage oblasti

repozitorijum - opisana baza podataka koja čuva graf

commit-ova, glave grana, tagove, HEAD

radni direktorijum - mesto gde modifikujemo fajlove našeg

projekta

index (staging area) - oblast za manevrisanje, odvojena od

radnog direktorijuma, gde se prenose fajlovi koje pripremamo

za dodavanje novog commita

stash - storage oblast u koju možemo privremeno smeštati

work-in-progress objekte iz radnog direktorijuma (štek)

index, repo i stash se čuvaju u skrivenom folderu .git/

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 11: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Kolaboracija

Repozitorijumi su dostupni preko URL (lokalno/web)

remote - udaljeni repozitorijum koji pratimo (jedan ili više)

remote grane imaju specijalna imena oblika remote1/grana1

origin - specijalno ime za repozitorijum koji smo klonirali pri

kreiranju trenutnog

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 12: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Kreiranje repozitorijuma, staging

git init - kreira prazan repozitorijum (/.git direktorijum)

git add putanja/fajl.txt - dodaje fajl iz radnog

direktorijuma u indeks

git add . - dodaje sve modifikovane fajlove u indeks

git status - izlistava fajlove u indeksu i modifikovane fajlove

u radnom direktorijumu

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 13: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Commit

git commit - čuva trenutnu sadržinu indeksa u vidu novog

commit-a na trenutnoj grani, po default-u otvara podešeni

editor za upisivanje commit poruke

git commit -m „poruka” - dozvoljava upis commit poruke iz

konzole

Postavljanje detalja o autoru:

git config –global user.name „Nikola Jovanovic”git config –global user.email„[email protected]

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 14: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Grananje

git branch - izlistava sve lokalne grane (markira HEAD sa *)

git branch -a - izlistava sve lokalne i remote grane

git branch bugfix1 - započinje novu granu pod imenom

bugfix1 (počinje od HEAD)

git branch bugfix1 commit - započinje novu granu pod

imenom bugfix1 koja počinje od navedenog commit-a

git branch -d bugfix1 - briše granu bugfix1

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 15: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Manipulacije stablom

git merge bugfix1 - stapa granu bugfix1 sa trenutno

aktivnom granom

moguće je stapanje više grana odjednom

git tag 1.0.0 commit - kreira novi tag koji pokazuje na

navedeni commit

git checkout bugfix1 - grana bugfix1 postaje aktivna

(prebacuje se HEAD na nju) i ažurira se sadržaj radnog

direktorijuma i indeksa prema sadržaju te grane

priprema za rad na toj grani, novi commit-ovi će se dodavati na

nju

git checkout -b bugfix1 - kreira granu bugfix1 i radi

checkout na nju

git checkout fajl.txt - vraća filename u radnom

direktorijumu na verziju koja je u HEAD

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 16: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Ispravljanje grešaka

git reset--soft HEAD∼ - uklanja poslednji commit

--mixed HEAD∼ - so� + ažurira index

--hard HEAD∼ - mixed + ažurira radni direktorijum

git rebase commit - menja istoriju trenutne grane tako da je

odabrani commit nova početna tačka

Obratimo pažnju na glavne razlike između merge i rebase...

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 17: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Primer repozitorijuma

A B C

D E

v0.1 origin/master

master

HEAD

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 18: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Repozitorijum nakon merge

A B C F

D E

v0.1 origin/master master

HEAD

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 19: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Primer repozitorijuma

A B C

D E

v0.1 origin/master

master

HEAD

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 20: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Repozitorijum nakon rebase

A B C D’ E’

D E

v0.1 origin/master master

HEAD

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 21: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Budite pažljivi!

You have been warned

Ukoliko su naše kolege već pokupile pogrešni commit koji smo

napravili, uglavnom je bolje da grešku popravimo u novom commitu

umesto da menjamo istoriju. U suprotnom, svi kolaboratori koji su

pokupili našu grešku će morati da rade git rebase svojih grana na

naš popravljen commit!

Menjanje istorije nije preporučljivo upravo iz ovih razloga!

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 22: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Kolaboracija

git clone username@host:/url/repo - kopira udaljeni

repozitorijum i pravi radni direktorijum oko njega; izvorni

repozitorijum biva zapamćen u kloniranom pod imenom

remote

git fetch - preuzima promene iz udaljenog repozitorijuma

(default: origin) ali ih ne stapa u radni direktorijum

git pull - preuzima promene iz udaljenog repozitorijuma

(default: origin) i stapa ih u radni direktorijum

pull = fetch + merge

git push - prosleđuje lokalne promene u udaljeni

repozitorijum

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 23: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Još neke komande

git diff - prikazuje razlike između radnog direktorijuma i

indeksa

git diff HEAD - poredi radni direktorijum i HEAD

git diff --staged - poredi indeks i HEAD

git diff grana1 grana2 - prikazuje razlike između dve

grane

git stash - prebacuje sadržaj radnog direktorijuma u stash

git stash pop - vraća fajlove iz stash-a u radni direktorijum

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 24: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Još neke komande (2)

git log - prikazuje informacije o prethodnim commit-ovima

moguće je prikazati promene za svaki commit, kao i filtrirati

commit-ove po datumu, autoru, promenjenim fajlovima,

poruci...

postoji veliki broj flag-ova koji olakšavaju tumačenje log poruke

primer: git log --graph --oneline --decorate --all -

prikazuje istoriju celog repozitorijuma u obliku ASCII grafa pri

čemu svaki commit zauzima jednu liniju i prikazuju se odnosi sa

granama i tagovima

i još mnoooogo njih...

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 25: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

git – protok informacija između storage oblasti

stash working directory repository

git commit

git checkout

git reset

git diff --staged

git diff HEAD

git rebase

git merge

index

git add/rm

git stash save

git checkout

git stash pop

git stash apply

git diff

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 26: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

git – protok informacija između storage oblasti

git init

./gitrepozitorijum

git clone

./gitrepozitorijum

radni direktorijum

i index korisnika 1

radni direktorijum

i index korisnika 2

git pull

git push

git pull git commit git pull git commit

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 27: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Demo

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 28: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Linkovi

Zanimljiv uvod u git: h�p://gitolite.com/gcs.html

Interaktivni tutorijal: h�p://learngitbranching.js.org/

Pregledan cheat sheet:

h�ps://education.github.com/git-cheat-sheet-education.pdf

git: distribuirana kontrola verzije so�vera Nikola Jovanović

Page 29: git: distribuirana kontrola verzije softvera

Uvod Git koncepti Komande Zaključak

Hvala na pažnji!

git: distribuirana kontrola verzije so�vera Nikola Jovanović