Git

Ať už programuješ nebo píšeš dokumenty, stává se, že vytvoříš několik verzí. Tuhle chceš archivovat část, která už není potřeba, tamhle chceš svoji práci poslat k ohodnocení, nebo dokonce kolegům, kteří na ni spolupracují. A když se verze začnou kupit, může být problém se v nich vyznat.

Část těchto problémů řeší nástroje jako Dropbox či Google Drive, se kterými ses možná již setkala. Tam můžeš například sdílet svůj dokument s dalšími lidmi nebo se můžeš vrátit k dřívější verzi dokumentu, když něco pokazíš a nemůžeš si vzpomenout, jak to bylo předtím. Příklad toho, jak to může vypadat, je zde:

Verzovací Rozhraní služby Dropbox

V tomto rozhraní ale vidíš pouze verze jednoho dokumentu a navíc nemůžeš tušit, ke které verzi se to vlastně chceš vrátit. Nevidíš ani čím se jednotlivé verze liší. Pro větší projekt by byl takový způsob práce neefektivní.

Programátoři proto používají mocnější nástroje na správu verzí (angl. version control system. VCS). Asi nejpopulárnější z nich je Git, se kterým se teď seznámíme.

Budeme hodně pracovat s příkazovou řádkou. Jestli se s ní ještě nekamarádíš, koukni se na úvod.

Nezapomeň: $ na začátku se nepíše; je tu proto, aby šlo poznat že jde o příkaz.

Instalace

Popis instalace Gitu najdeš zde. Jestli jsi instalaci přeskočila, projdi si ji teď.

Repozitář

Každý projekt, který budeš verzovat, musí mít pro sebe vyhrazený adresář. Vytvoř si tedy nový adresář a přepni se do něj (pomocí cd). Pak vytvoř gitový repozitář (angl. repository) pomocí příkazu git init:

$ git init
Initialized empty Git repository in ./.git/

Na první pohled to vypadá, že se nic nestalo. Tenhle příkaz totiž vytvořil skrytý adresář .git, do kterého uložil nějaké informace. Přesvědč se příkazem ls -a (Linux) nebo dir /a (Windows). Adresář .git je schovaný proto, že ho spravuje Git a ty bys v něm neměla nic měnit.

V repozitáři zatím nic není. Zkus to ověřit příkazem git status, který vypisuje informace o stavu repozitáře:

$ git status
On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)

„On branch master” říká něco o větvích, k tomu se vrátíme později. „Initial commit” říká, že zatím nemáš uloženou žádnou revizi. A „nothing to commit” říká, že je adresář prázdný – nejsou tu žádné soubory k verzování.

První revize

Teď si zkus do Gitu něco přidat!

Vytvoř soubor basnicka.txt a napiš do něj nějakou básničku. Měla by mít aspoň pět řádků, ať pak máme s čím pracovat. Pak zkus znovu git status: Git oznámí, že v adresáři je soubor, o kterém ještě „neví“.

$ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        basnicka.txt

nothing added to commit but untracked files present (use "git add" to track)

U každého nového souboru musíme Gitu říct, že chceme jeho obsah sledovat. Proveď to se svojí básničkou:

$ git add basnicka.txt

a znovu zkontroluj stav repozitáře:

$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   basnicka.txt

To, co je zelené („changes to be committed“), se přidá do další revize (angl. commit), kterou vytvoříš. Pojď tedy vytvořit revizi:

$ git commit
[master (root-commit) 1a009f4] První revize
 1 file changed, 6 insertions(+)
 create mode 100644 basnicka.txt

Po zadání tohoto příkazu se otevře editor, do kterého musíš napsat nějaký popisek, abys věděla, co tahle revize obsahuje za změny. Pro začátek napiš jen První revize. Předvyplněné řádky začínající # nech být (nebo vymaž, podle chuti – Git je ignoruje). Pak soubor ulož a zavři editor.

Jak na editory?

Na Windows, máš-li správně nastavený Git, se použije Poznámkový blok (Notepad) – stačí něco napsat, uložit (Ctrl+S) a zavřít (Alt+F4).

Na Linuxu a macOS se objeví editor v příkazové řádce, který se jmenuje Nano. Pozná se tak, že v dolních dvou řádcích má malou nápovědu. Něco napiš, pomocí Ctrl+O soubor ulož, potvrď jméno souboru (Enter) a pomocí Ctrl+X editor zavři.

Nemáš-li Git nastavený podle instrukcí, objeví se přímo v příkazové řádce Vim – poměrně složitý editor, který se teď učit nebudeme. Pozná se tak, že úplně spodní řádek je prázdný. V takovém případě stiskni Esc, napiš :q! (dvojtečka, Q, vykřičník) a potvrď pomocí Enter. Pak si nastav Git a zkus git commit znovu.

Znovu zkus vypsat stav repozitáře:

$ git status
On branch master
nothing to commit, working tree clean

Tenhle krátký výstup znamená, že od poslední revize se nic nezměnilo. Což dává smysl – poslední revizi jsi právě vytvořila!

A co všechno je v téhle první/poslední revizi? To ti poví příkaz git show:

$ git show
commit 1a009f4267d5a6ab7ece87cb7514f5b803692e39
Author: Adéla Novotná <adela.novotna@example.cz>
Date:   Mon Mar 20 14:51:34 2017 +0100

    První revize

diff --git a/basnicka.txt b/basnicka.txt
new file mode 100644
index 0000000..558d133
--- /dev/null
+++ b/basnicka.txt
@@ -0,0 +1,6 @@
+Holka modrooká, nesedávej u potoka
+Holka modrooká, nesedávej tam
+
+V potoce je hastrmánek
+Zatahá tě za copánek
+Holka modrooká, nesedávej tam

Vidíš unikátní označení revize, pomocí kterého se vždy bude dát dostat k této konkrétní verzi projektu. Pak je tam jméno autorky a datum vytvoření, popisek a nakonec shrnutí změn: byl přidán soubor basnicka.txt s nějakým obsahem.

Když je výpis moc dlouhý, můžeš se v něm pohybovat (, , PgUp, PgDn) a zpět se dostaneš klávesou Q jako Quit.

Kódování ve Windows

Pokud výpis nezvládá znaky s diakritikou, zadej před git show příkaz

> set LC_ALL=C.UTF-8

Tento příkaz nastaví aktuální terminál: když si ovevřeš nové okno s příkazovou řádkou, bude ho potřeba zadat znovu.

Druhá revize

Udělej v básničce nějakou malou změnu – změň slovo, uprav interpunkci nebo přidej sloku. Pak se opět zeptej Gitu na stav repozitáře.

$ git status
On branch master
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:   basnicka.txt

no changes added to commit (use "git add" and/or "git commit -a")

Soubor je opět červený! Něco se v něm změnilo! Ale co? Na to nám odpoví příkaz git diff.

$ git diff
diff --git a/basnicka.txt b/basnicka.txt
index 558d133..24e2384 100644
--- a/basnicka.txt
+++ b/basnicka.txt
@@ -1,6 +1,9 @@
-Holka modrooká, nesedávej u potoka
-Holka modrooká, nesedávej tam
+Holka modrooká
+Nesedávej u potoka
+Holka modrooká
+Nesedávej tam
 
 V potoce je hastrmánek
 Zatahá tě za copánek
-Holka modrooká, nesedávej tam
+Holka modrooká
+Nesedávej tam

Změny se ukazují po řádcích. Červeně, s -, jsou ukázány odebrané řádky; zeleně s + řádky přidané.

Změnilo-li se na řádku jen jedno slovo nebo i písmeno, celý řádek se ukáže jako smazaný a zase přidaný. Dá se to nastavit i jinak, když je potřeba, ale je dobré si na tento standard zvyknout.

Takhle se dá jednoduše zjistit, co se dělo od poslední verze. Když ti program přestane fungovat (a v poslední uložené revizi fungoval), použij git diff – v jedné ze změn musí být chyba!

Řádek začínající @@ říká, kde v souboru změna je (u mě začínal vypsaný kousek souboru řádkem 1 a měl 6 řádků; v nové verzi je opět od 1. řádku, ale narostl na 9).

Jsi-li se změnami spokojena, řekni Gitu, ať je použije v další revizi:

$ git add basnicka.txt

A pro úplnost se znovu koukni, co říká status – co je zelené, přidá se do další revize.

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   basnicka.txt

Než uděláš druhou revizi, ještě řeknu něco o tom, jak správně psát k revizím popisky. Na to je totiž úzus, který téměř všichni programátoři respektují: na prvním řádku je krátké shrnutí změn, následuje prázdný řádek a pak detailnější popis důvodů ke změně a případně změny samotné. Snaž se délku řádků držet do zhruba 70 znaků; vodítkem můžou být předvyplněné řádky začínající #. Nemá cenu popisovat, co je jasné ze změn samotných, zajímavé jsou hlavně širší souvislosti a důvody ke změnám. Cokoli, co může přijít vhod, až se změny bude snažit někdo pochopit. (Ten někdo můžeš být klidně ty, za pár měsíců.)

Můj popisek bude znít takhle:

Rozdělení dlouhých řádků

Verše básně se většinou píšou na jednotlivé řádky. Myslím, že
takhle se to líp čte. (Ale co si budeme povídat, hlavní 
důvod je ukázat, co dělá git diff.)

Nebude-li se ti někdy dařit shrnout změnu v 70 znacích, zamysli se, jestli neděláš moc velkou změnu najednou – např. "změna řetězce X a dopsání nového cyklu Y" by bylo lepší uložit jako dvě různé revize.

Pomocí git commit vytvoř druhou revizi. Pak ji zkontroluj:

$ git show
commit 81cbabb3bd3cd2f3896dd41b20012c44dbd69031
Author: Adéla Novotná <adela.novotna@example.cz>
Date:   Mon Mar 20 14:51:34 2017 +0100

    Rozdělení dlouhých řádků

    Verše básně se většinou píšou na jednotlivé řádky. Myslím, že
    takhle se to líp čte. (Ale co si budeme povídat, hlavní
    důvod je ukázat, co dělá git diff.)

diff --git a/basnicka.txt b/basnicka.txt
index 558d133..24e2384 100644
--- a/basnicka.txt
+++ b/basnicka.txt
@@ -1,6 +1,9 @@
-Holka modrooká, nesedávej u potoka
-Holka modrooká, nesedávej tam
+Holka modrooká
+Nesedávej u potoka
+Holka modrooká
+Nesedávej tam
 
 V potoce je hastrmánek
 Zatahá tě za copánek
-Holka modrooká, nesedávej tam
+Holka modrooká
+Nesedávej tam

Diagram

Pro lepší pochopení, co dělají jednotlivé příkazy a v jakém stavu můžou být soubory/změny, přikládám tento diagram:

Diagram revizí

Log

Teď, když máme za sebou první(ch) pár revizí, si ukážeme několik příkazů, které nám umožní se v nich orientovat. První z nich je git log.

$ git log
commit 81cbabb3bd3cd2f3896dd41b20012c44dbd69031
Author: Adéla Novotná <adela.novotna@example.cz>
Date:   Mon Mar 20 14:51:34 2017 +0100

    Rozdělení dlouhých řádků

    Verše básně se většinou píšou na jednotlivé řádky. Myslím, že
    takhle se to líp čte. (Ale co si budeme povídat, hlavní
    důvod je ukázat, co dělá git diff.)

commit 1a009f4267d5a6ab7ece87cb7514f5b803692e39
Author: Adéla Novotná <adela.novotna@example.cz>
Date:   Mon Mar 20 14:51:34 2017 +0100

    První revize

Git log vypíše všechny revize od té nejnovější až po úplný začátek projektu.

Až budeš mít verzí tolik, že se nevejdou najednou na obrazovku, můžeš se v logu pohybovat pomocí šipek a PgUp/PgDn. „Ven“ se dostaneš klávesou q.

Je spousta možností jak vypisovat historii pomocí git log. Všechno je podrobně – možná až moc podrobně – popsáno v dokumentaci; stačí zadat git help log. „Ven“ z dokumentace se opět dostaneš klávesou q.

Já často používám git log --oneline --graph --decorate --cherry-mark --boundary. Chceš-li tyhle možnosti studovat, začni v tomto pořadí a dej si pauzu vždycky, když přestaneš rozumět. :)

Když se na nějakou verzi budeš chtít podívat podrobněji, napiš git show 5ff0b, kde místo 5ff0b uveď prvních několik čísel z označení revize.

gitk

Z příkazové řádky se dá vyčíst všechno potřebné, ale chce to trochu praxe. Někdy je přehlednější použít grafické „klikátko“ jménem gitk, které se dá spustit příkazem gitk --all:

$ gitk --all

Tenhle program vypadá celkem šeredně (skoro jako by ho psali programátoři, které místo designu zajímá, co je „vevnitř“), ale pro naše účely postačí. Zkus se v něm trochu zorientovat, pak ho zavři, udělej dalších pár revizí a koukni se na ně přes git log a gitk --all.

Závěr

A to je všechno, co z Gitu zatím budeš potřebovat. Vždycky, když uděláš git add soubor a git commit, aktuální verze souborů se uloží a už nejde (jednoduše) smazat – pokud nesmažeš celý adresář .git. Jednotlivé verze a změny od posledního uložení, si umíš i prohlížet.

Možná to všechno zní jako zbytečně moc práce. Máš tak trochu pravdu – naše projekty jsou zatím dost malé na to, aby se jen pro ně vyplatilo učit Git. Ale je dobré ho používat už od začátku. Až bude správa verzí opravdu potřeba, bude se tenhle trénink hodit.

Takže odteď, kdykoliv uděláš v rámci PyLadies funkční verzi nějakého programu, pomocí git add a git commit si ji ulož do Gitu.

{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2019/brno-jaro-2019-pondeli:git:1",
      "title": "Git",
      "html": "\n          \n    \n\n    <h1>Git</h1>\n<p>A&#x165; u&#x17E; programuje&#x161; nebo p&#xED;&#x161;e&#x161; dokumenty, st&#xE1;v&#xE1; se,\n&#x17E;e vytvo&#x159;&#xED;&#x161; n&#x11B;kolik verz&#xED;.\nTuhle chce&#x161; archivovat &#x10D;&#xE1;st, kter&#xE1; u&#x17E; nen&#xED; pot&#x159;eba,\ntamhle chce&#x161; svoji pr&#xE1;ci poslat k ohodnocen&#xED;,\nnebo dokonce koleg&#x16F;m, kte&#x159;&#xED; na ni spolupracuj&#xED;.\nA kdy&#x17E; se verze za&#x10D;nou kupit, m&#x16F;&#x17E;e b&#xFD;t probl&#xE9;m se v&#xA0;nich vyznat.</p>\n<p>&#x10C;&#xE1;st t&#x11B;chto probl&#xE9;m&#x16F; &#x159;e&#x161;&#xED; n&#xE1;stroje jako Dropbox &#x10D;i\nGoogle Drive, se kter&#xFD;mi ses mo&#x17E;n&#xE1; ji&#x17E; setkala.\nTam m&#x16F;&#x17E;e&#x161; nap&#x159;&#xED;klad sd&#xED;let sv&#x16F;j dokument s dal&#x161;&#xED;mi\nlidmi nebo se m&#x16F;&#x17E;e&#x161; vr&#xE1;tit k d&#x159;&#xED;v&#x11B;j&#x161;&#xED; verzi dokumentu,\nkdy&#x17E; n&#x11B;co pokaz&#xED;&#x161; a nem&#x16F;&#x17E;e&#x161; si vzpomenout, jak to bylo\np&#x159;edt&#xED;m. P&#x159;&#xED;klad toho, jak to m&#x16F;&#x17E;e vypadat, je zde:</p>\n<p><span class=\"figure\"><a href=\"/2019/brno-jaro-2019-pondeli/git/basics/static/dropbox.png\"><img src=\"/2019/brno-jaro-2019-pondeli/git/basics/static/dropbox.png\" alt=\"Verzovac&#xED; Rozhran&#xED; slu&#x17E;by Dropbox\"></a></span></p>\n<p>V&#xA0;tomto rozhran&#xED; ale vid&#xED;&#x161; pouze verze <em>jednoho dokumentu</em> a nav&#xED;c\nnem&#x16F;&#x17E;e&#x161; tu&#x161;it, ke kter&#xE9; verzi se to vlastn&#x11B; chce&#x161;\nvr&#xE1;tit. Nevid&#xED;&#x161; ani &#x10D;&#xED;m se jednotliv&#xE9; verze li&#x161;&#xED;.\nPro v&#x11B;t&#x161;&#xED; projekt by byl takov&#xFD; zp&#x16F;sob pr&#xE1;ce\nneefektivn&#xED;.</p>\n<p>Program&#xE1;to&#x159;i proto pou&#x17E;&#xED;vaj&#xED; mocn&#x11B;j&#x161;&#xED; n&#xE1;stroje na\nspr&#xE1;vu verz&#xED; (angl. version control system. VCS).\nAsi nejpopul&#xE1;rn&#x11B;j&#x161;&#xED; z nich je Git, se kter&#xFD;m\nse te&#x10F; sezn&#xE1;m&#xED;me.</p>\n<div class=\"admonition note\"><p>Budeme hodn&#x11B; pracovat s p&#x159;&#xED;kazovou &#x159;&#xE1;dkou.\nJestli se s n&#xED; je&#x161;t&#x11B; nekamar&#xE1;d&#xED;&#x161;, koukni se na\n<a href=\"/2019/brno-jaro-2019-pondeli/beginners/cmdline/\">&#xFA;vod</a>.</p>\n<p>Nezapome&#x148;: <code>$</code> na za&#x10D;&#xE1;tku se nep&#xED;&#x161;e;\nje tu proto, aby &#x161;lo poznat &#x17E;e jde o p&#x159;&#xED;kaz.</p>\n</div><h2>Instalace</h2>\n<p>Popis instalace Gitu najde&#x161;\n<a href=\"/2019/brno-jaro-2019-pondeli/git/install/\">zde</a>.\nJestli jsi instalaci p&#x159;esko&#x10D;ila, projdi si ji te&#x10F;.</p>\n<h2>Repozit&#xE1;&#x159;</h2>\n<p>Ka&#x17E;d&#xFD; projekt, kter&#xFD; bude&#x161; verzovat, mus&#xED; m&#xED;t pro sebe\nvyhrazen&#xFD; adres&#xE1;&#x159;.\nVytvo&#x159; si tedy nov&#xFD; adres&#xE1;&#x159; a p&#x159;epni se do n&#x11B;j (pomoc&#xED; <code>cd</code>).\nPak vytvo&#x159; gitov&#xFD; <em>repozit&#xE1;&#x159;</em> (angl. repository)\npomoc&#xED; p&#x159;&#xED;kazu <code>git init</code>:</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git init\nInitialized empty Git repository in ./.git/</code></pre></div><p>Na prvn&#xED; pohled to vypad&#xE1;, &#x17E;e se nic nestalo.\nTenhle p&#x159;&#xED;kaz toti&#x17E; vytvo&#x159;il <em>skryt&#xFD;</em> adres&#xE1;&#x159;\n<code>.git</code>, do kter&#xE9;ho ulo&#x17E;il n&#x11B;jak&#xE9; informace.\nP&#x159;esv&#x11B;d&#x10D; se p&#x159;&#xED;kazem <code>ls -a</code> (Linux) nebo <code>dir /a</code> (Windows).\nAdres&#xE1;&#x159; <code>.git</code> je schovan&#xFD; proto, &#x17E;e\nho spravuje Git a ty bys v&#xA0;n&#x11B;m nem&#x11B;la nic m&#x11B;nit.</p>\n<p>V repozit&#xE1;&#x159;i zat&#xED;m nic nen&#xED;.\nZkus to ov&#x11B;&#x159;it p&#x159;&#xED;kazem <code>git status</code>, kter&#xFD;\nvypisuje informace o stavu repozit&#xE1;&#x159;e:</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git status\nOn branch master\n\nInitial commit\n\nnothing to commit (create/copy files and use &quot;git add&quot; to track)</code></pre></div><p><em>&#x201E;On branch master&#x201D;</em> &#x159;&#xED;k&#xE1; n&#x11B;co o v&#x11B;tv&#xED;ch, k tomu se vr&#xE1;t&#xED;me pozd&#x11B;ji.\n<em>&#x201E;Initial commit&#x201D;</em> &#x159;&#xED;k&#xE1;, &#x17E;e zat&#xED;m nem&#xE1;&#x161; ulo&#x17E;enou &#x17E;&#xE1;dnou revizi.\nA <em>&#x201E;nothing to commit&#x201D;</em> &#x159;&#xED;k&#xE1;, &#x17E;e je adres&#xE1;&#x159;\npr&#xE1;zdn&#xFD; &#x2013; nejsou tu &#x17E;&#xE1;dn&#xE9; soubory k&#xA0;verzov&#xE1;n&#xED;.</p>\n<h2>Prvn&#xED; revize</h2>\n<p>Te&#x10F; si zkus do Gitu n&#x11B;co p&#x159;idat!</p>\n<p>Vytvo&#x159; soubor <code>basnicka.txt</code> a napi&#x161; do n&#x11B;j\nn&#x11B;jakou b&#xE1;sni&#x10D;ku.\nM&#x11B;la by m&#xED;t aspo&#x148; p&#x11B;t &#x159;&#xE1;dk&#x16F;, a&#x165; pak m&#xE1;me s &#x10D;&#xED;m pracovat.\nPak zkus znovu <code>git status</code>: Git ozn&#xE1;m&#xED;,\n&#x17E;e v adres&#xE1;&#x159;i je soubor, o kter&#xE9;m je&#x161;t&#x11B; &#x201E;nev&#xED;&#x201C;.</p>\n<!-- XXX: Color coding! -->\n\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git status\nOn branch master\n\nInitial commit\n\nUntracked files:\n  (use &quot;git add &lt;file&gt;...&quot; to include in what will be committed)\n\n        <span style=\"color: #aa0000\">basnicka.txt</span>\n\nnothing added to commit but untracked files present (use &quot;git add&quot; to track)</code></pre></div><p>U ka&#x17E;d&#xE9;ho nov&#xE9;ho souboru mus&#xED;me Gitu &#x159;&#xED;ct, &#x17E;e\nchceme jeho obsah sledovat.\nProve&#x10F; to se svoj&#xED; b&#xE1;sni&#x10D;kou:</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git add basnicka.txt</code></pre></div><p>a znovu zkontroluj stav repozit&#xE1;&#x159;e:</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git status\nOn branch master\n\nInitial commit\n\nChanges to be committed:\n  (use &quot;git rm --cached &lt;file&gt;...&quot; to unstage)\n\n        <span style=\"color: #00aa00\">new file:   basnicka.txt</span></code></pre></div><p>To, co je zelen&#xE9; (&#x201E;changes to be committed&#x201C;),\nse p&#x159;id&#xE1; do dal&#x161;&#xED; <em>revize</em> (angl. <em>commit</em>),\nkterou vytvo&#x159;&#xED;&#x161;.\nPoj&#x10F; tedy vytvo&#x159;it revizi:</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git commit\n[master (root-commit) 1a009f4] Prvn&#xED; revize\n 1 file changed, 6 insertions(+)\n create mode 100644 basnicka.txt</code></pre></div><p>Po zad&#xE1;n&#xED; tohoto p&#x159;&#xED;kazu se otev&#x159;e editor,\ndo kter&#xE9;ho mus&#xED;&#x161; napsat n&#x11B;jak&#xFD; popisek,\nabys v&#x11B;d&#x11B;la, co tahle revize obsahuje za zm&#x11B;ny.\nPro za&#x10D;&#xE1;tek napi&#x161; jen <code>Prvn&#xED; revize</code>.\nP&#x159;edvypln&#x11B;n&#xE9; &#x159;&#xE1;dky za&#x10D;&#xED;naj&#xED;c&#xED; <code>#</code> nech b&#xFD;t\n(nebo vyma&#x17E;, podle chuti &#x2013; Git je ignoruje).\nPak soubor ulo&#x17E; a zav&#x159;i editor.</p>\n<div class=\"admonition note\"><p class=\"admonition-title\">Jak na editory?</p>\n<p>Na Windows, m&#xE1;&#x161;-li\n<a href=\"/2019/brno-jaro-2019-pondeli/git/install/\">spr&#xE1;vn&#x11B; nastaven&#xFD; Git</a>,\nse pou&#x17E;ije Pozn&#xE1;mkov&#xFD; blok (Notepad) &#x2013; sta&#x10D;&#xED; n&#x11B;co\nnapsat, ulo&#x17E;it (<kbd>Ctrl</kbd>+<kbd>S</kbd>) a zav&#x159;&#xED;t\n(<kbd>Alt</kbd>+<kbd>F4</kbd>).</p>\n<p>Na Linuxu a macOS se objev&#xED; editor v p&#x159;&#xED;kazov&#xE9; &#x159;&#xE1;dce,\nkter&#xFD; se jmenuje Nano.\nPozn&#xE1; se tak, &#x17E;e v doln&#xED;ch dvou &#x159;&#xE1;dc&#xED;ch m&#xE1; malou n&#xE1;pov&#x11B;du.\nN&#x11B;co napi&#x161;, pomoc&#xED; <kbd>Ctrl</kbd>+<kbd>O</kbd>\nsoubor ulo&#x17E;, potvr&#x10F; jm&#xE9;no souboru (<kbd>Enter</kbd>)\na pomoc&#xED; <kbd>Ctrl</kbd>+<kbd>X</kbd> editor zav&#x159;i.</p>\n<p>Nem&#xE1;&#x161;-li Git nastaven&#xFD; podle instrukc&#xED;, objev&#xED; se p&#x159;&#xED;mo\nv p&#x159;&#xED;kazov&#xE9; &#x159;&#xE1;dce Vim &#x2013; pom&#x11B;rn&#x11B; slo&#x17E;it&#xFD; editor, kter&#xFD;\nse te&#x10F; u&#x10D;it nebudeme. Pozn&#xE1; se tak, &#x17E;e &#xFA;pln&#x11B;\nspodn&#xED; &#x159;&#xE1;dek je pr&#xE1;zdn&#xFD;.\nV takov&#xE9;m p&#x159;&#xED;pad&#x11B; stiskni\n<kbd>Esc</kbd>, napi&#x161; <code>:q!</code> (dvojte&#x10D;ka, Q, vyk&#x159;i&#x10D;n&#xED;k)\na potvr&#x10F; pomoc&#xED; <kbd>Enter</kbd>.\nPak si nastav Git a zkus <code>git commit</code> znovu.</p>\n</div><p>Znovu zkus vypsat stav repozit&#xE1;&#x159;e:</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git status\nOn branch master\nnothing to commit, working tree clean</code></pre></div><p>Tenhle kr&#xE1;tk&#xFD; v&#xFD;stup znamen&#xE1;, &#x17E;e od posledn&#xED; revize\nse nic nezm&#x11B;nilo.\nCo&#x17E; d&#xE1;v&#xE1; smysl &#x2013; posledn&#xED; revizi jsi pr&#xE1;v&#x11B; vytvo&#x159;ila!</p>\n<p>A co v&#x161;echno je v t&#xE9;hle prvn&#xED;/posledn&#xED; revizi?\nTo ti pov&#xED; p&#x159;&#xED;kaz <code>git show</code>:</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git show\n<span style=\"color: #aa5500\">commit 1a009f4267d5a6ab7ece87cb7514f5b803692e39</span>\nAuthor: Ad&#xE9;la Novotn&#xE1; &lt;adela.novotna@example.cz&gt;\nDate:   Mon Mar 20 14:51:34 2017 +0100\n\n    Prvn&#xED; revize\n\n<span style=\"font-weight: bold\">diff --git a/basnicka.txt b/basnicka.txt</span>\n<span style=\"font-weight: bold\">new file mode 100644</span>\n<span style=\"font-weight: bold\">index 0000000..558d133</span>\n<span style=\"font-weight: bold\">--- /dev/null</span>\n<span style=\"font-weight: bold\">+++ b/basnicka.txt</span>\n<span style=\"color: #00aaaa\">@@ -0,0 +1,6 @@</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Holka modrook&#xE1;, nesed&#xE1;vej u potoka</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Holka modrook&#xE1;, nesed&#xE1;vej tam</span>\n<span style=\"color: #00aa00\">+</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">V potoce je hastrm&#xE1;nek</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Zatah&#xE1; t&#x11B; za cop&#xE1;nek</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Holka modrook&#xE1;, nesed&#xE1;vej tam</span></code></pre></div><p>Vid&#xED;&#x161; unik&#xE1;tn&#xED;\n<span class=\"yellow\">ozna&#x10D;en&#xED; revize</span>,\npomoc&#xED; kter&#xE9;ho se v&#x17E;dy bude d&#xE1;t dostat k t&#xE9;to konkr&#xE9;tn&#xED;\nverzi projektu.\nPak je tam jm&#xE9;no autorky a datum vytvo&#x159;en&#xED;,\npopisek\na nakonec shrnut&#xED; zm&#x11B;n: byl p&#x159;id&#xE1;n soubor <tt class=\"strong\">basnicka.txt</tt>\ns&#xA0;n&#x11B;jak&#xFD;m <span class=\"green\">obsahem</span>.</p>\n<div class=\"admonition note\"><p>Kdy&#x17E; je v&#xFD;pis moc dlouh&#xFD;, m&#x16F;&#x17E;e&#x161; se v n&#x11B;m pohybovat\n(<kbd>&#x2193;</kbd>, <kbd>&#x2191;</kbd>, <kbd>PgUp</kbd>, <kbd>PgDn</kbd>)\na zp&#x11B;t se dostane&#x161; kl&#xE1;vesou <kbd>Q</kbd> jako <em>Quit</em>.</p>\n</div><div class=\"admonition note\"><p class=\"admonition-title\">K&#xF3;dov&#xE1;n&#xED; ve Windows</p>\n<p>Pokud v&#xFD;pis nezvl&#xE1;d&#xE1; znaky s diakritikou, zadej p&#x159;ed  <code>git show</code> p&#x159;&#xED;kaz</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt; </span>set LC_ALL=C.UTF-8\n</pre></div><p>Tento p&#x159;&#xED;kaz nastav&#xED; aktu&#xE1;ln&#xED; termin&#xE1;l: kdy&#x17E; si ovev&#x159;e&#x161; nov&#xE9; okno\ns&#xA0;p&#x159;&#xED;kazovou &#x159;&#xE1;dkou, bude ho pot&#x159;eba zadat znovu.</p>\n</div><h2>Druh&#xE1; revize</h2>\n<p>Ud&#x11B;lej v b&#xE1;sni&#x10D;ce n&#x11B;jakou malou zm&#x11B;nu &#x2013; zm&#x11B;&#x148; slovo,\nuprav interpunkci nebo p&#x159;idej sloku.\nPak se op&#x11B;t zeptej Gitu na stav repozit&#xE1;&#x159;e.</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git status\nOn branch master\nChanges not staged for commit:\n  (use &quot;git add &lt;file&gt;...&quot; to update what will be committed)\n  (use &quot;git checkout -- &lt;file&gt;...&quot; to discard changes in working directory)\n\n        <span style=\"color: #aa0000\">modified:   basnicka.txt</span>\n\nno changes added to commit (use &quot;git add&quot; and/or &quot;git commit -a&quot;)</code></pre></div><p>Soubor je op&#x11B;t &#x10D;erven&#xFD;! N&#x11B;co se v n&#x11B;m zm&#x11B;nilo!\nAle co?\nNa to n&#xE1;m odpov&#xED; p&#x159;&#xED;kaz <code>git diff</code>.</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git diff\n<span style=\"font-weight: bold\">diff --git a/basnicka.txt b/basnicka.txt</span>\n<span style=\"font-weight: bold\">index 558d133..24e2384 100644</span>\n<span style=\"font-weight: bold\">--- a/basnicka.txt</span>\n<span style=\"font-weight: bold\">+++ b/basnicka.txt</span>\n<span style=\"color: #00aaaa\">@@ -1,6 +1,9 @@</span>\n<span style=\"color: #aa0000\">-Holka modrook&#xE1;, nesed&#xE1;vej u potoka</span>\n<span style=\"color: #aa0000\">-Holka modrook&#xE1;, nesed&#xE1;vej tam</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Holka modrook&#xE1;</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Nesed&#xE1;vej u potoka</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Holka modrook&#xE1;</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Nesed&#xE1;vej tam</span>\n \n V potoce je hastrm&#xE1;nek\n Zatah&#xE1; t&#x11B; za cop&#xE1;nek\n<span style=\"color: #aa0000\">-Holka modrook&#xE1;, nesed&#xE1;vej tam</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Holka modrook&#xE1;</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Nesed&#xE1;vej tam</span></code></pre></div><p>Zm&#x11B;ny se ukazuj&#xED; po &#x159;&#xE1;dc&#xED;ch.\n&#x10C;erven&#x11B;, s&#xA0;<tt class=\"red\">-</tt>, jsou uk&#xE1;z&#xE1;ny\nodebran&#xE9; &#x159;&#xE1;dky; zelen&#x11B; s&#xA0;<tt class=\"green\">+</tt>\n&#x159;&#xE1;dky p&#x159;idan&#xE9;.</p>\n<div class=\"admonition note\"><p>Zm&#x11B;nilo-li se na &#x159;&#xE1;dku jen jedno slovo nebo i p&#xED;smeno,\ncel&#xFD; &#x159;&#xE1;dek se uk&#xE1;&#x17E;e jako smazan&#xFD; a zase p&#x159;idan&#xFD;.\nD&#xE1; se to nastavit i jinak, kdy&#x17E; je pot&#x159;eba,\nale je dobr&#xE9; si na tento standard zvyknout.</p>\n</div><p>Takhle se d&#xE1; jednodu&#x161;e zjistit, co se d&#x11B;lo od posledn&#xED; verze.\nKdy&#x17E; ti program p&#x159;estane fungovat (a v posledn&#xED; ulo&#x17E;en&#xE9;\nrevizi fungoval), pou&#x17E;ij <code>git diff</code> &#x2013;\nv jedn&#xE9; ze zm&#x11B;n mus&#xED; b&#xFD;t chyba!</p>\n<div class=\"admonition note\"><p>&#x158;&#xE1;dek za&#x10D;&#xED;naj&#xED;c&#xED; <tt class=\"blue\">@@</tt> &#x159;&#xED;k&#xE1;,\nkde v souboru zm&#x11B;na je (u m&#x11B; za&#x10D;&#xED;nal vypsan&#xFD; kousek\nsouboru &#x159;&#xE1;dkem 1 a m&#x11B;l 6 &#x159;&#xE1;dk&#x16F;; v nov&#xE9; verzi je\nop&#x11B;t od 1. &#x159;&#xE1;dku, ale narostl na 9).</p>\n</div><p>Jsi-li se zm&#x11B;nami spokojena, &#x159;ekni Gitu, a&#x165; je\npou&#x17E;ije v dal&#x161;&#xED; revizi:</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git add basnicka.txt</code></pre></div><p>A pro &#xFA;plnost se znovu koukni, co &#x159;&#xED;k&#xE1;\n<code>status</code> &#x2013; co je zelen&#xE9;, p&#x159;id&#xE1; se do dal&#x161;&#xED;\nrevize.</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git status\nOn branch master\nChanges to be committed:\n  (use &quot;git reset HEAD &lt;file&gt;...&quot; to unstage)\n\n        <span style=\"color: #00aa00\">modified:   basnicka.txt</span></code></pre></div><p>Ne&#x17E; ud&#x11B;l&#xE1;&#x161; druhou revizi, je&#x161;t&#x11B; &#x159;eknu n&#x11B;co o tom,\njak spr&#xE1;vn&#x11B; ps&#xE1;t k reviz&#xED;m popisky.\nNa to je toti&#x17E; &#xFA;zus, kter&#xFD; t&#xE9;m&#x11B;&#x159; v&#x161;ichni program&#xE1;to&#x159;i\nrespektuj&#xED;: na prvn&#xED;m &#x159;&#xE1;dku je kr&#xE1;tk&#xE9; shrnut&#xED; zm&#x11B;n,\nn&#xE1;sleduje pr&#xE1;zdn&#xFD; &#x159;&#xE1;dek a pak detailn&#x11B;j&#x161;&#xED; popis d&#x16F;vod&#x16F;\nke zm&#x11B;n&#x11B; a p&#x159;&#xED;padn&#x11B; zm&#x11B;ny samotn&#xE9;.\nSna&#x17E; se d&#xE9;lku &#x159;&#xE1;dk&#x16F; dr&#x17E;et do zhruba 70 znak&#x16F;;\nvod&#xED;tkem m&#x16F;&#x17E;ou b&#xFD;t p&#x159;edvypln&#x11B;n&#xE9; &#x159;&#xE1;dky za&#x10D;&#xED;naj&#xED;c&#xED; <code>#</code>.\nNem&#xE1; cenu popisovat, co je jasn&#xE9; ze zm&#x11B;n samotn&#xFD;ch,\nzaj&#xED;mav&#xE9; jsou hlavn&#x11B; &#x161;ir&#x161;&#xED; souvislosti a d&#x16F;vody ke zm&#x11B;n&#xE1;m.\nCokoli, co m&#x16F;&#x17E;e p&#x159;ij&#xED;t vhod, a&#x17E; se zm&#x11B;ny bude sna&#x17E;it n&#x11B;kdo pochopit.\n(Ten n&#x11B;kdo m&#x16F;&#x17E;e&#x161; b&#xFD;t klidn&#x11B; ty, za p&#xE1;r m&#x11B;s&#xED;c&#x16F;.)</p>\n<p>M&#x16F;j popisek bude zn&#xED;t takhle:</p>\n<div class=\"highlight\"><pre><code>Rozd&#x11B;len&#xED; dlouh&#xFD;ch &#x159;&#xE1;dk&#x16F;\n\nVer&#x161;e b&#xE1;sn&#x11B; se v&#x11B;t&#x161;inou p&#xED;&#x161;ou na jednotliv&#xE9; &#x159;&#xE1;dky. Mysl&#xED;m, &#x17E;e\ntakhle se to l&#xED;p &#x10D;te. (Ale co si budeme pov&#xED;dat, hlavn&#xED; \nd&#x16F;vod je uk&#xE1;zat, co d&#x11B;l&#xE1; git diff.)</code></pre></div><div class=\"admonition note\"><p>Nebude-li se ti n&#x11B;kdy da&#x159;it shrnout zm&#x11B;nu\nv 70 znac&#xED;ch, zamysli se, jestli ned&#x11B;l&#xE1;&#x161; moc velkou\nzm&#x11B;nu najednou &#x2013; nap&#x159;. &quot;zm&#x11B;na &#x159;et&#x11B;zce X\na dops&#xE1;n&#xED; nov&#xE9;ho cyklu Y&quot; by bylo lep&#x161;&#xED; ulo&#x17E;it\njako dv&#x11B; r&#x16F;zn&#xE9; revize.</p>\n</div><p>Pomoc&#xED; <code>git commit</code> vytvo&#x159; druhou revizi.\nPak ji zkontroluj:</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git show\n<span style=\"color: #aa5500\">commit 81cbabb3bd3cd2f3896dd41b20012c44dbd69031</span>\nAuthor: Ad&#xE9;la Novotn&#xE1; &lt;adela.novotna@example.cz&gt;\nDate:   Mon Mar 20 14:51:34 2017 +0100\n\n    Rozd&#x11B;len&#xED; dlouh&#xFD;ch &#x159;&#xE1;dk&#x16F;\n\n    Ver&#x161;e b&#xE1;sn&#x11B; se v&#x11B;t&#x161;inou p&#xED;&#x161;ou na jednotliv&#xE9; &#x159;&#xE1;dky. Mysl&#xED;m, &#x17E;e\n    takhle se to l&#xED;p &#x10D;te. (Ale co si budeme pov&#xED;dat, hlavn&#xED;\n    d&#x16F;vod je uk&#xE1;zat, co d&#x11B;l&#xE1; git diff.)\n\n<span style=\"font-weight: bold\">diff --git a/basnicka.txt b/basnicka.txt</span>\n<span style=\"font-weight: bold\">index 558d133..24e2384 100644</span>\n<span style=\"font-weight: bold\">--- a/basnicka.txt</span>\n<span style=\"font-weight: bold\">+++ b/basnicka.txt</span>\n<span style=\"color: #00aaaa\">@@ -1,6 +1,9 @@</span>\n<span style=\"color: #aa0000\">-Holka modrook&#xE1;, nesed&#xE1;vej u potoka</span>\n<span style=\"color: #aa0000\">-Holka modrook&#xE1;, nesed&#xE1;vej tam</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Holka modrook&#xE1;</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Nesed&#xE1;vej u potoka</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Holka modrook&#xE1;</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Nesed&#xE1;vej tam</span>\n \n V potoce je hastrm&#xE1;nek\n Zatah&#xE1; t&#x11B; za cop&#xE1;nek\n<span style=\"color: #aa0000\">-Holka modrook&#xE1;, nesed&#xE1;vej tam</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Holka modrook&#xE1;</span>\n<span style=\"color: #00aa00\">+</span><span style=\"color: #00aa00\">Nesed&#xE1;vej tam</span></code></pre></div><h2>Diagram</h2>\n<p>Pro lep&#x161;&#xED; pochopen&#xED;, co d&#x11B;laj&#xED; jednotliv&#xE9; p&#x159;&#xED;kazy a v jak&#xE9;m\nstavu m&#x16F;&#x17E;ou b&#xFD;t soubory/zm&#x11B;ny, p&#x159;ikl&#xE1;d&#xE1;m tento diagram:</p>\n<p><span class=\"figure\"><a href=\"/2019/brno-jaro-2019-pondeli/git/basics/static/diagram.svg\"><img src=\"/2019/brno-jaro-2019-pondeli/git/basics/static/diagram.svg\" alt=\"Diagram reviz&#xED;\"></a></span></p>\n<h2>Log</h2>\n<p>Te&#x10F;, kdy&#x17E; m&#xE1;me za sebou prvn&#xED;(ch) p&#xE1;r reviz&#xED;,\nsi uk&#xE1;&#x17E;eme n&#x11B;kolik p&#x159;&#xED;kaz&#x16F;, kter&#xE9; n&#xE1;m umo&#x17E;n&#xED; se\nv nich orientovat.\nPrvn&#xED; z nich je <code>git log</code>.</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git log\n<span style=\"color: #aa5500\">commit 81cbabb3bd3cd2f3896dd41b20012c44dbd69031</span>\nAuthor: Ad&#xE9;la Novotn&#xE1; &lt;adela.novotna@example.cz&gt;\nDate:   Mon Mar 20 14:51:34 2017 +0100\n\n    Rozd&#x11B;len&#xED; dlouh&#xFD;ch &#x159;&#xE1;dk&#x16F;\n\n    Ver&#x161;e b&#xE1;sn&#x11B; se v&#x11B;t&#x161;inou p&#xED;&#x161;ou na jednotliv&#xE9; &#x159;&#xE1;dky. Mysl&#xED;m, &#x17E;e\n    takhle se to l&#xED;p &#x10D;te. (Ale co si budeme pov&#xED;dat, hlavn&#xED;\n    d&#x16F;vod je uk&#xE1;zat, co d&#x11B;l&#xE1; git diff.)\n\n<span style=\"color: #aa5500\">commit 1a009f4267d5a6ab7ece87cb7514f5b803692e39</span>\nAuthor: Ad&#xE9;la Novotn&#xE1; &lt;adela.novotna@example.cz&gt;\nDate:   Mon Mar 20 14:51:34 2017 +0100\n\n    Prvn&#xED; revize</code></pre></div><p>Git log vyp&#xED;&#x161;e v&#x161;echny revize od t&#xE9; nejnov&#x11B;j&#x161;&#xED; a&#x17E; po\n&#xFA;pln&#xFD; za&#x10D;&#xE1;tek projektu.</p>\n<p>A&#x17E; bude&#x161; m&#xED;t verz&#xED; tolik, &#x17E;e se nevejdou najednou\nna obrazovku, m&#x16F;&#x17E;e&#x161; se v logu pohybovat pomoc&#xED; &#x161;ipek a\n<kbd>PgUp</kbd>/<kbd>PgDn</kbd>.\n&#x201E;Ven&#x201C; se dostane&#x161; kl&#xE1;vesou <kbd>q</kbd>.</p>\n<div class=\"admonition note\"><p>Je spousta mo&#x17E;nost&#xED; jak vypisovat historii pomoc&#xED; <code>git log</code>.\nV&#x161;echno je podrobn&#x11B; &#x2013; mo&#x17E;n&#xE1; a&#x17E; moc podrobn&#x11B; &#x2013;\npops&#xE1;no v dokumentaci; sta&#x10D;&#xED; zadat <code>git help log</code>.\n&#x201E;Ven&#x201C; z dokumentace se op&#x11B;t dostane&#x161; kl&#xE1;vesou <kbd>q</kbd>.</p>\n<p>J&#xE1; &#x10D;asto pou&#x17E;&#xED;v&#xE1;m <code>git log --oneline --graph --decorate --cherry-mark --boundary</code>.\nChce&#x161;-li tyhle mo&#x17E;nosti studovat, za&#x10D;ni v tomto\npo&#x159;ad&#xED; a dej si pauzu v&#x17E;dycky, kdy&#x17E; p&#x159;estane&#x161;\nrozum&#x11B;t. :)</p>\n</div><p>Kdy&#x17E; se na n&#x11B;jakou verzi bude&#x161; cht&#xED;t pod&#xED;vat podrobn&#x11B;ji,\nnapi&#x161; <code>git show 5ff0b</code>, kde m&#xED;sto <code>5ff0b</code>\nuve&#x10F; prvn&#xED;ch n&#x11B;kolik &#x10D;&#xED;sel z&#xA0;<span class=\"yellow\">ozna&#x10D;en&#xED; revize</span>.</p>\n<h2>gitk</h2>\n<p>Z p&#x159;&#xED;kazov&#xE9; &#x159;&#xE1;dky se d&#xE1; vy&#x10D;&#xED;st v&#x161;echno pot&#x159;ebn&#xE9;,\nale chce to trochu praxe.\nN&#x11B;kdy je p&#x159;ehledn&#x11B;j&#x161;&#xED; pou&#x17E;&#xED;t grafick&#xE9; &#x201E;klik&#xE1;tko&#x201C; jm&#xE9;nem\n<em>gitk</em>, kter&#xE9; se d&#xE1; spustit p&#x159;&#xED;kazem\n<code>gitk --all</code>:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">$ </span>gitk --all\n</pre></div><p><span class=\"figure\"><a href=\"/2019/brno-jaro-2019-pondeli/git/basics/static/gitk.png\"><img src=\"/2019/brno-jaro-2019-pondeli/git/basics/static/gitk.png\" alt></a></span></p>\n<p>Tenhle program vypad&#xE1; celkem &#x161;eredn&#x11B; (skoro jako by ho\npsali program&#xE1;to&#x159;i, kter&#xE9; m&#xED;sto designu zaj&#xED;m&#xE1;, co je\n&#x201E;vevnit&#x159;&#x201C;), ale pro na&#x161;e &#xFA;&#x10D;ely posta&#x10D;&#xED;.\nZkus se v n&#x11B;m trochu zorientovat, pak ho zav&#x159;i,\nud&#x11B;lej dal&#x161;&#xED;ch p&#xE1;r reviz&#xED; a koukni se na n&#x11B; p&#x159;es\n<code>git log</code> a <code>gitk --all</code>.</p>\n<h2>Z&#xE1;v&#x11B;r</h2>\n<p>A to je v&#x161;echno, co z Gitu zat&#xED;m bude&#x161; pot&#x159;ebovat.\nV&#x17E;dycky, kdy&#x17E; ud&#x11B;l&#xE1;&#x161; <code>git add <var>soubor</var></code>\na <code>git commit</code>,\naktu&#xE1;ln&#xED; verze soubor&#x16F; se ulo&#x17E;&#xED; a u&#x17E; nejde (jednodu&#x161;e)\nsmazat &#x2013; pokud nesma&#x17E;e&#x161; cel&#xFD; adres&#xE1;&#x159; <code>.git</code>.\nJednotliv&#xE9; verze a zm&#x11B;ny od posledn&#xED;ho ulo&#x17E;en&#xED;,\nsi um&#xED;&#x161; i prohl&#xED;&#x17E;et.</p>\n<p>Mo&#x17E;n&#xE1; to v&#x161;echno zn&#xED; jako zbyte&#x10D;n&#x11B; moc pr&#xE1;ce.\nM&#xE1;&#x161; tak trochu pravdu &#x2013; na&#x161;e projekty jsou zat&#xED;m\ndost mal&#xE9; na to, aby se jen pro n&#x11B; vyplatilo u&#x10D;it Git.\nAle je dobr&#xE9; ho pou&#x17E;&#xED;vat u&#x17E; od za&#x10D;&#xE1;tku.\nA&#x17E; bude spr&#xE1;va verz&#xED; opravdu pot&#x159;eba, bude se tenhle\ntr&#xE9;nink hodit.</p>\n<p>Tak&#x17E;e odte&#x10F;, kdykoliv ud&#x11B;l&#xE1;&#x161; v r&#xE1;mci PyLadies funk&#x10D;n&#xED;\nverzi n&#x11B;jak&#xE9;ho programu, pomoc&#xED; <code>git add</code> a <code>git commit</code> si ji ulo&#x17E; do Gitu.</p>\n\n\n        "
    }
  }
}