Definícia
Git nie jeGitHub!
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ý
ČojetoGit?
4.
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.
ČojetoGit?
The Git directoryis 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.
ČojetoGit?
Základy
3 ú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
NastavenieGit-u
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
Gitremotes
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ť.
Gitremotes
S čím gitpracuje
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
Resetovanie
32.
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.
Resetovanie
Working directory
Predchádzajúce dvastromy 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.
Resetovanie
Na čo slúži?
Slúžina 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
.gitignore
43.
Príklad #1
# ignorujsú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
.gitignore
44.
Príklad #2
# ignorujvč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/
.gitignore
45.
Príklad #3
# ignorujdoc/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
.gitignore
Vidim tam toto
<<<<<<<HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> iss53:index.html
Konflikty
64.
Čo urobím?
1. Vymažemčo nepotrebujem, upravim čo potrebujem
2. Uložim subor
3. git add index.html
4. …a commitnem!
Konflikty
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ú.
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
Stashing
git stash drop
Vymažeskrýšu s rozpracovanými zmenami
git stash drop stash@{0}
Stashing
76.
git stash pop
Skratkapre kombináciu dvoch príkazov nasledujúcich po sebe:
git stash apply
git stash drop
77.
git stash branch{name}
Vytvorí z odložených súborov v skrýši novú vetvu
git stash branch test
Stashing
78.
git stash --patch
Gitnepridá 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é.
Stashing
Všetci vieme čosú 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
Tagging
Lightweight
Lightweight tag sunieč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é.
Tagging
83.
git tag {name}
Vytvorílightweight tag s menom {name}
git show {name} = vypíše základné informácie o tagu
Tagging
84.
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).
Tagging
85.
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
Tagging
Aj v giteje 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.
Hooks