git: distribuirana kontrola verzije softvera
Transcript of git: distribuirana kontrola verzije softvera
![Page 1: git: distribuirana kontrola verzije softvera](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/1.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/2.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/3.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/4.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/5.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/6.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/7.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/8.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/9.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/10.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/11.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/12.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/13.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/14.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/15.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/16.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/17.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/18.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/19.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/20.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/21.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/22.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/23.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/24.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/25.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/26.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/27.jpg)
Uvod Git koncepti Komande Zaključak
Demo
git: distribuirana kontrola verzije so�vera Nikola Jovanović
![Page 28: git: distribuirana kontrola verzije softvera](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/28.jpg)
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](https://reader031.fdocuments.net/reader031/viewer/2022012517/6191a571004ac95d2a03f564/html5/thumbnails/29.jpg)
Uvod Git koncepti Komande Zaključak
Hvala na pažnji!
git: distribuirana kontrola verzije so�vera Nikola Jovanović