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