Chci geek triko! Chci geek triko!
Extra 10 % bodů navíc a tričko zdarma při zadání kódu "TRIKO10"

Lekce 3 - Git - Základy

Software Git Git - Základy

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulém dílu našeho seriálu tutoriálu o Gitu jsme se věnovali instalaci a tvorbě repositáře. Dnes se podíváme na základní práci s Gitem. Projdeme práci se soubory a procházení historie. Máte se určitě na co těšit. Budeme pracovat s repositářem Gitu, který jste si stáhli v minulém díle.

Commity

Commit je základní stavební jednotka. Commitem označíme místo, které si chceme zapamatovat pro pozdější použití, například protože je klíčové. Obsahuje snapshot všech souborů, které jsou v repositáři nebo souborů, které jsme přidali. Kromě toho Commit obsahuje informaci o tom kdo a kdy jej vytvořil. Vedle toho Git pro každý commit generuje hash, který jednoznačně identifikuje každý commit. Pojďme se podívat na malou ukázku. Při otevření repositáře v Git GUI pod výběrem "Repository -> Visualize Master’s history" se nám zobrazí graf commitů Gitu.

Historie commitů v Gitu

Vlevo je graficky znázorněný postup commitů po sobě. Rozdvojení probíhá ve větvích (viz další kapitoly). Vpravo od grafu je napsána zpráva ke commitu, která popisuje změny od minula. V prostředním sloupečku je poté vypsáno jméno autora a jeho email. Právě proto jsme v minulém díle nastavovali uživatelské jméno a heslo. V posledním sloupečku je čas, kdy byl commit proveden. Všimněte si, že není nutné mít commity časově po sobě. Je commit 8.8.2014, poté 8.7.2014, poté 3.8.2014 a teprve po spojení je commit 10.8.2014. Samozřejmě, že spojení dvou větví musí proběhnout až po commitech v jednotlivých větvích, ale práce na jednotlivých větvích může probíhat naprosto nelineárně.

Detail commitu v Gitu

Po rozkliknutí commitu vidíme ve spodní části jeho hash (SHA1 ID). Tento hash jej konkrétně identifikuje. Chceme-li se dostat na tento commit, použijeme právě tento hash. Kromě toho také vidíme hash rodičovských commitů (protože jsem vzal commit, který spojoval dvě větve) a hash dalšího commitu v řadě. Na posledním řádku je uvedeno do které větve tento commit patří.

Přidání souborů

Abychom vytvořili nové nebo upravili stejné soubory a poté je dostali do commitu, potřebujeme je nejprve dostat do stage. Zapneme si Git Bash ve složce, kam jsme si stáhli Git. Poté zavoláme příkaz git status. Zaznamenáte následující výstup:

On branch master
Your branch is up-to-date with ‘origin/master’.
Nothing to commit, working direktory clean

Git nám hlásí, že nenalezl žádné změny v adresáři. Není divu, ještě jsme nic neprovedli. Co se tedy stane, když přidáme soubor myFile.txt? Opět použijeme git status.

On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)
    myFile.txt
nothing added to commit but untracked files present (use "git add" to track)

Git nám říká, že stále nemá co vložit do commitu, ale nalezl nesledované soubory. Zároveň nám tyto soubory vypsal a poradil nám, co máme udělat, abychom je dostali do commitu. Nesledované soubory jsou to proto, protože ještě nejsou v žádném commitu a Git nemá tedy vytvořený jejich snapshot. Použijeme nabízené git add myFile.txt a opět se podíváme na git status.

On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
    new file:   myFile.txt

Commit

Tentokrát nám Git oznámil, že tu jsou změny, které budou commitnuty. Jedná se o akci přidání nového souboru (new file) s názvem myFile.txt. Pojďme jej tedy dát do commitu. K tomu slouží příkaz git commit (překvapivě :-) ). Teď máme dvě možnosti, buď můžeme použít pouze git commit a zobrazí se nám editor, ve které máme editovat popis. Defaultně se popis otevírá v příkazové řádce, abychom to změnili, musíme změnit config. Jak jsme to již dělali, nastavíme si tentokrát core.editor na váš oblíbený editor. Více informací zde. Druhá možnost je použít atribut -m a za něj napsat zprávu. Takže náš příkaz bude vypadat git commit -m "Muj první commit".

[master 8948f77] Muj prvni commit
1 file changed, 0 insertions(0), 0 deletions(-)
Create mode 100644 myFile.txt

Tím jsme vytvořili commit. Teď jej naleznete v historii commitů. Gratuluji, právě jste přispěli na vývoj Gitu :-). Pokud se chcete podívat na poslední commit, používá se na to příkaz git show, který opět vypíše autora, čas, zprávu a změny, které byly v commitu provedeny.

Editace

Nyní si pojďme soubor editovat. Do souboru napíšeme například "Hello World" a podíváme se, co nám vypíše git status.

On branch master
Your branch is ahead of 'origin/master' by 1 commits.
  (use "git push" to publish your local commits)
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
    modified:   myFile.txt
no changes added to commit (use "git add" and/or "git commit -a")

Tentokrát nám Git ohlásil, že soubor myFile.txt byl změněn. Opět tedy použijeme git add myFile.txt a přidáme soubor do stage. I když je soubor již v repositáři, změny nebudou uloženy dokud jej nepřidáte do stage.

Několik rad na závěr

Abychom nemuseli přidávat všechny soubory po jednom, existuje několik věcí, které nám pomohou zjednodušit práci.

Příkaz git add přijímá jako parametr hvězdičku, kterou známe z příkazové řádky. Je tedy možné například přidat všechny HTML soubory (git add *.html) nebo všechny PHP skripty končící slovem Presenter (git add *Presenter.php). Pro přidání všech souborů napíšeme jako parametr hvězdičku (git add *). Tím přidáme všechny soubory. Tomuto mezikroku se můžeme vyhnout a zavolat rovnou commit s atributem –a (git commit –a), který uloží aktuální složku jak je. Tedy odstraní smazané soubory a aktualizuje nové nebo editované.

O popisu commitů bylo sepsáno již hodně, proto vás pouze přesměruji na některé jiné zdroje.

Ještě by bylo dobré podotknout, že některé servery používají první řádek popisu jako nadpis emailu. Maily se posílají majitelům repositáře, který váš commit poté povolí nebo zakáže. Proto se snažte na první řádek uvést co nejstručněji akci, kterou jste provedli a teprve na dalších řádcích to trochu rozvést. Také se nedoporučuje mít zprávu delší jak 50 znaků.

To by pro dnešek bylo vše, příště se podíváme trochu do historie a budeme porovnávat jednotlivé verze mezi sebou.


 

 

Článek pro vás napsal patrik.valkovic
Avatar
Jak se ti líbí článek?
12 hlasů
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Miniatura
Všechny články v sekci
Git
Miniatura
Následující článek
Git - Zkoumání historie
Aktivity (2)

 

 

Komentáře
Zobrazit starší komentáře (12)

Avatar
jindrich.jokel:21. března 23:30

"Zapneme si Git Bash ve složce, kam jsme si stáhli Git"
to je tam kde jsem si nainstaloval ten program Git nebo ta slozka co se mi vytvorila tim klonovanim? V te klonovane slozce to neni a kdyz pustim bash normalne v te slozce Git tak mi to po prikazu git status napise toto: fatal: Not a git repository (or any of the parent directories): .git

tak nevim, co delam spatne

Editováno 21. března 23:31
 
Odpovědět 21. března 23:30
Avatar
Odpovídá na jindrich.jokel
Karel Labonek:23. července 15:41

Ahoj, zřejmě jsi to dávno vyřešil, ale pro ostatní. Také jsem chvilku přemýšlel kterou složku myslel. Teprve začínám tak doufám že nebudu mást ostatní špatnou radou, ale zřejmě bylo myšleno složku s klonem Gitu, tam vytvoříš new soubor (pozor ne složku, vytvoření prázdné složky není vidět) a tak dál.

 
Odpovědět 23. července 15:41
Avatar
Peter Večera:18. srpna 14:15

$ git commit -m „Muj první commit“

error: pathspec 'první' did not match any file(s) known to git.
error: pathspec 'commit“' did not match any file(s) known to git.

Keď Vás to bude hádzať chybu ako mne treba zmenit „“ za " ". takto :
git commit -m "Muj druhy commit"

 
Odpovědět 18. srpna 14:15
Avatar
Honza Bittner
Šupák
Avatar
Odpovídá na Peter Večera
Honza Bittner:18. srpna 14:33

Tak to je snad jasné, že musíš používat uvozovky tímto způsobem...

Odpovědět 18. srpna 14:33
Milovník Dartu. Student FIT ČVUT. Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/...
Avatar
Odpovídá na Honza Bittner
Peter Večera:18. srpna 14:36

ale keď to niekto (si myslím že každý ) kopíruje priamo z článku z ktorého sa to učí tak nechápe prečo to stále nefunguje aj keď tu tvrdia že to funguje :-) Viď koniec odstavca Commit.

 
Odpovědět 18. srpna 14:36
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovědět 18. srpna 14:44
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Honza Bittner
Šupák
Avatar
Odpovídá na Peter Večera
Honza Bittner:18. srpna 15:08

Aha, ono to bylo v článku. To jsem si nevšiml, promiň tedy za výtku. :-)

Odpovědět 18. srpna 15:08
Milovník Dartu. Student FIT ČVUT. Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/...
Avatar
Petr Spěvák:4. září 16:14

Apostrof ` a jednoduchá uvozovka ' jsou dva různé znaky.

 
Odpovědět 4. září 16:14
Avatar
Honza Bittner
Šupák
Avatar
Odpovědět 4. září 16:21
Milovník Dartu. Student FIT ČVUT. Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/...
Avatar
Odpovídá na Honza Bittner
Petr Spěvák:4. září 19:53

OK, uznávám, že znak, který jsem uvedl apostrof není (páč je to francouzský accent grave, v angličtině a MySQL známý také jako "backtick").
Ale vzhledem k rozdílu mezi znaky ’ a ' by možná bylo lepší poněkud mnohoznačné slovo apostrof nepoužívat. To už je samozřejmě čistě můj názor.

 
Odpovědět  +1 4. září 19:53
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 22. Zobrazit vše