academy vol.13

90
Git Sv ätý Grál kolektívnej práce

Upload: bluewebsk

Post on 12-Apr-2017

277 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: Academy vol.13

GitSvätý Grál kolektívnej práce

Page 2: Academy vol.13

Čo je to Git?

https://git-scm.com

Page 3: Academy vol.13

Definícia

Git nie je GitHub!

Git je DVCS - Distributed Version Control System

Klienti si nesťahujú iba posledné zmeny, ale lokálne disponujú kompletnou verziou repozitára - klonom.

Je decentralizovaný

Čo

je to

Git?

Page 4: Academy vol.13

3 hlavné stavy

committed, modified, staged

Committed znamená, že data sú bezpečne uložené v tvojej lokálnej databáze.

Modified znamená, že si zmenil súbor, ale recommittal si ho do svojej databázy.

Staged znamená, že si označil zmenený subor v jeho aktuálnej verzii, aby bol zahrnutý v najbližšom commite.

Čo

je to

Git?

Page 5: Academy vol.13

Čo

je to

Git?

Page 6: Academy vol.13

The Git directory is where Git stores the metadata and object database for your project. This is the most important part of Git, and it is what is copied when you clone a repository from another computer.

The working directory is a single checkout of one version of the project. These files are pulled out of the compressed database in the Git directory and placed on disk for you to use or modify.

The staging area is a file, generally contained in your Git directory, that stores information about what will go into your next commit. It’s sometimes referred to as the “index”, but it’s also common to refer to

it as the staging area.

Čo

je to

Git?

Page 7: Academy vol.13

Nastavenie Git-u

Page 8: Academy vol.13

Základy3 úrovne nastavení:

1. systémová

2. globálna

3. lokálna

Pre zmenu nastavenia sa používa nástroj “gitconfig”

systémová konfigurácia - /etc/gitconfig

globálna konfigurácia - ~/.gitconfig

lokálna konfigurácia - .git/config

Nas

tave

nie

Git-

u

Page 9: Academy vol.13

git config

git config --global user.name “Moje Meno”

git config --global user.email [email protected]

git config --global core.editor nano

git config --list

git config user.email

Nas

tave

nie

Git-

u

Page 10: Academy vol.13

Nas

tave

nie

Git-

u

Page 11: Academy vol.13

Práca s Git-om

Page 12: Academy vol.13

Získanie repozitára

Využívame 2 základné prístupy

1. Založenie nového repozitára v existujúcom priečinku

2. Naklonovanie vzdialeného repozitára

Prác

a s G

it-om

Page 13: Academy vol.13

git init

cd ~/project_directory

git init

Založenie nového repozitára v existujúcom priečinku

Prác

a s G

it-om

Page 14: Academy vol.13

git clone

git clone https://bitbucket.org/semisedlak/test

git clone https://bitbucket.org/semisedlak/test project_dir

Naklonovanie vzdialeného repozitára

Prác

a s G

it-om

Page 15: Academy vol.13

Získavanie informácií

git status

git log -2

git diff

git diff --staged

git diff --cached

Prác

a s G

it-om

Page 16: Academy vol.13

git diff --cachedPr

áca

s Git-

om

Page 17: Academy vol.13

Git remotes

Page 18: Academy vol.13

Remotes?

Remotes - vzdialené repozitáre sú verzie projektu hosťované niekde v sieti alebo na internete.

Je možné ich mať priradených k projektu viac.

Pri naklonovaní repozitára sa automaticky priradí zdroju remote s menom origin - pôvod/počiatok

Git

rem

otes

Page 19: Academy vol.13

git remote

git remote

git remote add {shortname} {url}

git remote rename {old_shortname} {new_shortname}

git remote rm {shortname}

Git

rem

otes

Page 20: Academy vol.13

git fetch

git fetch {remote-name}

Príkaz stiahne všetky dáta zo vzdialeného repozitára, ktoré ešte nie sú stiahnuté. Po tomto príkaze má programátor referencie na všetky

vetvy z daného repozitára, s ktorými môže ďalej pracovať.

Git

rem

otes

Page 21: Academy vol.13

Práca so súbormi

Page 22: Academy vol.13

Životný cyklus súborov repozitára

Prác

a so

súbo

rmi

Page 23: Academy vol.13

git add

git add {file}

git add .Prác

a so

súbo

rmi

Page 24: Academy vol.13

git commit

git commit

git commit -m “…”

git commit -a -m “…”

git commit --ammend

Prác

a so

súbo

rmi

Page 25: Academy vol.13

git mv

git mv {old_file} {new_file}

Prác

a so

súbo

rmi

Page 26: Academy vol.13

git rm

git rm {file}

git rm --cached {file}Prác

a so

súbo

rmi

Page 27: Academy vol.13

git checkout

git checkout -- {file}

git checkout {branch}Prác

a so

súbo

rmi

Page 28: Academy vol.13

git push

git push {remote} {branch}

Prác

a so

súbo

rmi

Page 29: Academy vol.13

git pull

git pull

git pull {remote}

git pull {remote} {branch}

Prác

a so

súbo

rmi

Page 30: Academy vol.13

Resetovanie

Page 31: Academy vol.13

S čím git pracuje

Pre mentálne poňatie si predstavte Git ako content manager pre tri rôzne stromy. Pod pojmom “strom” si treba v skutočnosti predstaviť “kolekciu súborov”.

1. HEAD

2. Index

3. Working directory

Rese

tova

nie

Page 32: Academy vol.13

HEAD

HEAD je ukazovateľ na referenciu aktuálnej vetvy, čo je vlastne ukazovateľ na posledný commit vytvorený v tejto vetve. To znamená, že HEAD bude rodič ďalšieho commitu, ktorý bude vytvorený. Najjednoduchšie je rozmýšľať nad HEAD-om, ako nad snapshotom posledného commitu.

Rese

tova

nie

Page 33: Academy vol.13

Index

Index návrh tvojho budúceho commitu - teda “Staging Area”.Rese

tova

nie

Page 34: Academy vol.13

Working directory

Predchádzajúce dva stromy ukladajú svoj obsah vo vnútri .git priečinka efektívym spôsobom. Working Directory ich “rozbaľuje” do normálnych súborov (tie, s ktorými pracuješ). Working Directory je pieskovisko, kde si môžeš vyskúšať zmeny predtým, ako ich commitneš do “staging area” a následne do histórie.

Rese

tova

nie

Page 35: Academy vol.13

WorkflowRe

seto

vani

e

Page 36: Academy vol.13

Predstavte si, že……sme súbor zmenili 3x.Re

seto

vani

e

Page 37: Academy vol.13

Rese

tova

nie

Page 38: Academy vol.13

Rese

tova

nie

Page 39: Academy vol.13

Rese

tova

nie

Page 40: Academy vol.13

Rese

tova

nie

Page 41: Academy vol.13

.gitignore

Page 42: Academy vol.13

Na čo slúži?

Slúži na definovanie množiny súborov, ktoré nebudú verzované

Väčšinou pre generované temp a log súbory (napr. editorom či OS)

Súbory sa definujú regulárnymi výrazmi

https://github.com/github/gitignore

.giti

gnor

e

Page 43: Academy vol.13

Príklad #1

# ignoruj súbory s názvom Thumbs.db

Thumbs.db

# ignoruj .jpg súbory

*.jpg

# ale sleduj logo.jpg, aj keď .jpg sú ignorované patternom vyššie

!logo.jpg

.giti

gnor

e

Page 44: Academy vol.13

Príklad #2

# ignoruj včetky priečinky a súbory TEST (aj v podpriečinkoch)

TEST

# ignoruj priečinok IMAGES iba v aktuálnom priečinku

/IMAGES

# ignoruj všetky súbory v priečinku MEDIA

MEDIA/

.giti

gnor

e

Page 45: Academy vol.13

Príklad #3

# ignoruj doc/notes.txt, ale nie doc/server/arch.txt

doc/*.txt

# ignoruj všetky .pdf súbory v priečinku doc/

doc/**/*.pdf

# ale sleduj všetky readme.pdf súbory v priečinku doc/

!doc/**/readme.pdf

.giti

gnor

e

Page 46: Academy vol.13

Vetvy

Page 47: Academy vol.13

ZákladVe

tvy

Page 48: Academy vol.13

git branch

git branch

git branch -v

git branch --merged

git branch --no-merged

Vetv

y

Page 49: Academy vol.13

git branch {name}Ve

tvy

Page 50: Academy vol.13

git branch {name}Ve

tvy

Page 51: Academy vol.13

git checkout {name}Ve

tvy

Page 52: Academy vol.13

git checkout {name}Ve

tvy

Page 53: Academy vol.13

A keď teraz urobím commit?Ve

tvy

Page 54: Academy vol.13

Po dalšom commiteVe

tvy

Page 55: Academy vol.13

git checkout masterVe

tvy

Page 56: Academy vol.13

…a ďalší commit.Ve

tvy

Page 57: Academy vol.13

…a keď ich chcem spojiť?Ve

tvy

Page 58: Academy vol.13

git merge {branch}Ve

tvy

Page 59: Academy vol.13

…a môžem zrušiť túto vetvu.Ve

tvy

Page 60: Academy vol.13

git branch -d {branch}Ve

tvy

Page 61: Academy vol.13
Page 62: Academy vol.13

CONFLICT!!!

Kon

flikt

y

Page 63: Academy vol.13

Vidim tam toto<<<<<<< HEAD:index.html

<div id="footer">contact : [email protected]</div>

=======

<div id="footer">

please contact us at [email protected]

</div>

>>>>>>> iss53:index.html

Kon

flikt

y

Page 64: Academy vol.13

Čo urobím?

1. Vymažem čo nepotrebujem, upravim čo potrebujem

2. Uložim subor

3. git add index.html

4. …a commitnem!

Kon

flikt

y

Page 65: Academy vol.13

Kon

flikt

y

Page 66: Academy vol.13

Rebase

Page 67: Academy vol.13

Rebase?

Môžeš vziať “záplatu” zo zmien, ktoré boli vytvorené v commite C3 a znova ich aplikovať na commit C4.

Vezmeš zmeny robené na jednej vetve a aplikuješ ich na druhú.

Page 68: Academy vol.13

Rebasing

Page 69: Academy vol.13

Rebasing

Page 70: Academy vol.13

git rebase

git checkout iss53

git rebase master

git checkout master

git merge iss53

Page 71: Academy vol.13

Stashing

Page 72: Academy vol.13

Stash = skrýša

Keď si počas práce na projekte potrebuješ dočasne odložiť rozpracované veci “bokom”, aby si urobil a commitol niečo prioritnejšie

Ako veverička, ktorá si dočasne skryje oriešky, ktoré neskôr zje

Stas

hing

Page 73: Academy vol.13

git stash

Uloží všetky rozpracované veci do skrýše.

git stash list

Stas

hing

Page 74: Academy vol.13

git stash apply

Aplikuje zmeny uložené v skrýši

git stash apply stash@{2}

Stas

hing

Page 75: Academy vol.13

git stash drop

Vymaže skrýšu s rozpracovanými zmenami

git stash drop stash@{0}

Stas

hing

Page 76: Academy vol.13

git stash pop

Skratka pre kombináciu dvoch príkazov nasledujúcich po sebe:

git stash apply

git stash drop

Page 77: Academy vol.13

git stash branch {name}

Vytvorí z odložených súborov v skrýši novú vetvu

git stash branch test

Stas

hing

Page 78: Academy vol.13

git stash --patch

Git nepridá všetky rozpracované súbor do skrýše, ale interaktívne sa opýta, ktoré zmeny sa majú odložiť a ktoré majú ostať rozpracované.

Stas

hing

Page 79: Academy vol.13

Tagging#git #is #awesome #yolo

Page 80: Academy vol.13

Všetci vieme čo sú tagy

Git disponuje možnosťou otagovať špecifický bod v histórii zmien, ktorý je dôležitý.

Najčastejšie sa používajú na označovanie verzií a “releases” (napr. v0.2.1 etc.)

Git používa 2 druhy tagov:

1. lightweight

2. annotated

Tagg

ing

Page 81: Academy vol.13

git tag

Vypíše zoznam tagov

Je možné v nich aj filtrovať

Tagg

ing

Page 82: Academy vol.13

Lightweight

Lightweight tag su niečo ako vetva, ktorá sa ďalej nemení.

V podstate je to checksum konkrétneho commitu uloženého v súbore – žiadne ďalšie informácie nie sú uložené.

Tagg

ing

Page 83: Academy vol.13

git tag {name}

Vytvorí lightweight tag s menom {name}

git show {name} = vypíše základné informácie o tagu

Tagg

ing

Page 84: Academy vol.13

Annotated

Anotované tagy sú ukladané ako úplné objekty v databáze.

Sú checksumované, obsahujú informáciu o taggerovom mene, emaile, a dátume. Obsahujú taktiež tagujúcu správu (obdoba commit message).

Perlička: Môžu byť podpísané a overené pomocou GNU Privacy Guard (GPG).

Tagg

ing

Page 85: Academy vol.13

git tag -a {name}

Vytvorí anotovaný tag s menom {name}

git tag -a {name} -m “…”

git show {name} = vypíše všetky informácie o tagu

git tag -a {name} {commit} = priradí tag commitu aj neskôr

Tagg

ing

Page 86: Academy vol.13

Zdieľanie tagov

git push origin {tagname}

git push origin --tags

Tagg

ing

Page 87: Academy vol.13

Hooks

Page 88: Academy vol.13

Aj v gite je háčik

Git má spôsob, ako spustiť špeciálne skripty, keď nastane nejaká dôležitá udalosť.

Existujú dve skupiny hookov: client-side a server-side.

Client-side hooky sú spustené operáciami ako commit, či merge.

Server-side hooky bežia v pre sieťové operácia, ako napríklad prijatie pushnutých commitov.

Hoo

ks

Page 89: Academy vol.13

Inštalácia

Skript pod špecifickým názvom sa uloží go priečinka:

.git/hooks

Treba pozrieť do docky na názvy hookov

Hoo

ks

Page 90: Academy vol.13

Thats all folks!Diky Broňa…

© 2015 by Miňo