Skip to content
Find file
Fetching contributors…
Cannot retrieve contributors at this time
314 lines (228 sloc) 18.5 KB
<!DOCTYPE html>
<html lang="sk-SK">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Príručka Visual Git</title>
<link rel='stylesheet' type='text/css' href='visual-git-guide.css'>
<script type="text/javascript" src='visual-git-guide.js'></script>
</head>
<body onload="replace_all_PNGs();">
<h1 id="top">Príručka Visual Git</h1>
<div id="language-box">
<a>Iné jazyky:</a>
<ul>
<li><a href='index-de.html'>Deutsch</a></li>
<li><a href='index-en.html'>English</a></li>
<li><a href='index-es.html'>Español</a></li>
<li><a href='index-fr.html'>Français</a></li>
<li><a href='index-it.html'>Italiano</a></li>
<li><a href='index-ja.html'>日本語</a></li>
<li><a href='index-ko.html'>한국어</a></li>
<li><a href='index-pt.html'>Português</a></li>
<li><a href='index-ru.html'>Русский</a></li>
<li class="selected">Slovenčina</li>
<li><a href='index-vi.html'>Tiếng Việt</a></li>
<li><a href='index-zh-cn.html'>简体中文</a></li>
<li><a href='index-zh-tw.html'>正體中文</a></li>
</ul>
</div>
<p id="link-to-png">Ak sa obrázky nezobrazujú správne, môžete skúsiť verziu tejto stránky <a
href="?no-svg">bez obrázkov formátu SVG</a>.</p>
<p id="link-to-svg">SVG obrázky boli deaktivované.
<a href="index-sk.html">(Znovu aktivovať obrázky SVG)</a></p>
<p>Táto stránka predstavuje stručnú vizuálnu príručku najpoužívanejších príkazov programu Git.
Je určená k prehĺbeniu vášho pochopenia toho, ako Git funguje. Ak vás zaujíma to, ako bola táto stránka vytvorená,
je vám k dispozícii môj <a href='http://github.com/MarkLodato/visual-git-guide'>repozitár na GitHub-e</a>.</p>
<p><em>Poznámka k slovenskému prekladu:</em>
V texte je použitý výraz <em>revízia</em> na označenie konkrétnej verzie súborov uložených v histórii projektového archívu.
Výraz <em>komit</em> potom označuje aktivitu vloženia novej revízie do histórie projektového archívu.</p>
<h2 id="contents">Obsah</h2>
<ol>
<li><a href="#basic-usage">Základné použitie</a></li>
<li><a href="#conventions">Použité konvencie</a></li>
<li><a href="#commands-in-detail">Podrobne o príkazoch</a>
<ol>
<li><a href="#diff">Rozdielová analýza (diff)</a></li>
<li><a href="#commit">Komitovanie (commit)</a></li>
<li><a href="#checkout">Kopírovanie z archívu do pracovného adresára (checkout)</a></li>
<li><a href="#detached">Komitovanie s odpojenou hlavou (detached HEAD)</a></li>
<li><a href="#reset">Resetovanie (reset)</a></li>
<li><a href="#merge">Spájanie zmien (merge)</a></li>
<li><a href="#cherry-pick">Zbieranie čerešničiek (cherry-pick)</a></li>
<li><a href="#rebase">Spájanie vetiev (rebase)</a></li>
</ol>
</li>
<li><a href="#technical-notes">Technické poznámky</a></li>
</ol>
<h2 id="basic-usage">Základné použitie</h2>
<div class="center"><img src='basic-usage.svg.png'></div>
<p>Vyššie uvedené štyri príkazy umožňujú kopírovanie súborov medzi pracovným adresárom (working directory), predsieňou (index, stage) a projektovým archívom (history).</p>
<ul>
<li><code>git add <em>súbory</em></code> kopíruje <em>súbory</em> (v ich aktuálnej podobe) do predsiene.</li>
<li><code>git commit</code> uloží aktuálny stav súborov v predsieni (indexe) do projektového archívu (histórie) vo forme revízie.</li>
<li><code>git reset -- <em>súbory</em></code> obnoví súbory v predieni; to znamená, že
<em>súbory</em> sa skopírujú z najnovšej revízie do predsiene. Použite tento príkaz na vrátenie zmien spôsobených príkazom
<code>git add <em>súbory</em></code>. Na obnovenie celého obsahu v predsieni je tiež možné použiť príkaz <code>git reset</code>.</li>
<li><code>git checkout -- <em>súbory</em></code> skopíruje <em>súbory</em> z predsiene do pracovného adresára.
Týmto príkazom sa zahodia všetky lokálne zmeny (v pracovnom adresári).</li>
</ul>
<p>Prepínač príkazového riadku <code>-p</code> v príkazoch <code>git reset -p</code>, <code>git checkout -p</code> alebo
<code>git add -p</code> namiesto definovania konkrétnych súborov (prípadne spolu s tým) umožní používateľovi interaktívny výber častí zmien, ktoré sa skopírujú.</p>
<p>Je tiež možné preskočiť predsieň a skopírovať súbory do pracovného adresára priamo z archívu alebo komitovať súbory bez predošlého vloženia do predsiene.</p>
<div class="center"><img src='basic-usage-2.svg.png'></div>
<ul>
<li><code>git commit -a </code> je rovnocenné s použitím príkazu <tt>git add</tt>
s uvedením všetkých názvov súborov, ktoré boli súčasťou posledného komitu a následným spustením príkazu
<tt>git commit</tt>.</li>
<li><code>git commit <em>súbory</em></code> vytvorí novú revíziu obsahujúcu všetko z predchádzajúcej revízie
plus aktuálny stav <em>súborov</em> z pracovného adresára. <em>Súbory</em> sa skopírujú navyše aj do predsiene.</li>
<li><code>git checkout HEAD -- <em>súbory</em></code> skopíruje <em>súbory</em>
z najnovšej revízie do predsiene i do pracovného adresára.</li>
</ul>
<h2 id="conventions">Použité konvencie</h2>
<p>V ďalších vysvetleniach budú použité grafy s nasledujúcim formátom.</p>
<div class="center"><img src='conventions.svg.png'></div>
<p>Revízie sú zobrazené zelenou farbou ako 5-ciferné identifikátory, pričom odkazujú na svojich rodičov.
Vetvy sú zobrazené oranžovou farbou, pričom odkazujú na konkrétne revízie.
Aktuálna vetva je identifikovaná špeciálnym odkazom
<em>HEAD</em> (hlava), ktorý je "pripojený" k tejto vetve. Na tomto obrázku je vyobrazených posledných päť revízií, kde najnovšou je revízia identifikovaná ako <em>ed489</em>.
<em>master</em> (aktuálna vetva) odkazuje na túto revíziu, zatiaľ čo
<em>maint</em> (iná vetva) odkazuje na jedného z predkov revízie vo vetve <em>master</em>.</p>
<h2 id="commands-in-detail">Podrobne o príkazoch</h2>
<h3 id="diff">Rozdielová analýza (diff)</h3>
<p>Existujú rozličné spôsoby ako nazerať na rozdiely medzi revíziami. Nižšie uvádzame niektoré typické príklady.
Rozsah porovnávania pri ktoromkoľvek z týchto príkazov je možné prostredníctvom dodatočného parametra <em>súbory</em> obmedziť na tieto uvedené <em>súbory</em>.</p>
<div class="center"><img src='diff.svg.png'></div>
<h3 id="commit">Komit (commit)</h3>
<p>Keď komitujete, Git vytvorí nový objekt komitu (t.j. novú revíziu) použijúc súbory z predsiene, ktorému nastaví odkaz na rodiča na aktuálnu revíziu.
Následne presmeruje odkaz aktuálnej vetvy na túto novú revíziu. Na obrázku nižšie je aktuálnou vetvou vetva
<em>master</em>. Pred spustením príkazu odkazovala vetva <em>master</em> na
<em>ed489</em>. Následne bola vytvorená nová revízia <em>f0cec</em> s rodičom <em>ed489</em>.
Napokon sa odkaz vetvy <em>master</em> presunul na túto novú revíziu.</p>
<div class="center"><img src='commit-master.svg.png'></div>
<p>Rovnaký priebeh má dokonca i prípad, kedy aktuálna vetva je predkom inej.
Nižšie je zobrazený komit na vetve <em>maint</em>, ktorá bola predkom vetvy <em>master</em>.
Výsledkom je vznik revízie <em>1800b</em>. Dôsledkom tohto komitu už vetva <em>maint</em> nie je viac predkom vetvy <em>master</em>.
Na neskoršie spojenie zmien z takto vzniknutých dvoch línií histórie bude potrebné použiť príkaz <a href='#merge'>merge</a> (alebo <a href='#rebase'>rebase</a>).</p>
<div class="center"><img src='commit-maint.svg.png'></div>
<p>Niekedy sa pritrafí, že komit obsahuje chybu, čo sa však dá ľahko napraviť pomocou príkazu
<code>git commit --amend</code>. Pri použití tohto príkazu, Git vytvorí novú revíziu s rovnakým rodičom ako má tá aktuálna.
(Pôvodná aktuálna revízia bude zahodená, ak sa na ňu už nič viac neodkazuje.)</p>
<div class="center"><img src='commit-amend.svg.png'></div>
<p>Štvrtým prípadom je komitovanie s <a href="#detached">odpojenou hlavou</a>, čo objasníme neskôr.</p>
<h3 id="checkout">Kopírovanie z archívu do pracovného adresára (checkout)</h3>
<p>Príkaz <code>git checkout</code> sa používa na kopírovanie súborov z archívu (alebo z predsiene) do pracovného adresára a na prípadnú zmenu vetiev.</p>
<p>Keď sa uvedie názov súboru (a/alebo prepínač <code>-p</code>), Git skopíruje definované súbory z danej revízie
do predsiene a pracovného adresára. Napríklad príkaz <code>git checkout HEAD~ foo.c</code> skopíruje súbor <code>foo.c</code>
z revízie nazvanej <em>HEAD~</em> (rodič aktuálnej revízie) do pracovného adresára a tiež do predsiene.
(Ak sa neuvedie názov žiadnej revízie, súbory sa skopírujú z predsiene.)
Všimnite si, že aktuálna vetva ostáva nezmenená.</p>
<div class="center"><img src='checkout-files.svg.png'></div>
<p>Keď sa názov súboru <em>ne</em>uvedie, ale odkazom je (lokálna) vetva,
hlava (špeciálny odkaz <em>HEAD</em>) sa presunie do tejto vetvy (t.j. "prepneme sa" do tejto vetvy)
a potom sa obsah predsiene i pracovného adresára upraví podľa obsahu aktuálnej revízie v tejto vetve.
Všetky súbory, ktoré existujú v novšej revízii (<em>a47c3</em> na obrázku nižšie), budú skopírované; akýkoľvek súbor,
ktorý existuje v staršej revízii (<em>ed489</em>), avšak nie v novšej revízii, bude zmazaný;
a akýkoľvek súbor, ktorý nie je súčasťou ani jednej z revízií, bude ignorovaný.</p>
<div class="center"><img src='checkout-branch.svg.png'></div>
<p>Keď sa názov súboru <em>ne</em>uvedie a odkazom <em>nie</em> je
(lokálna) vetva &mdash; povedzme, je to tag, vzdialená vetva, SHA-1 identifikátor revízie alebo referenčný výraz napr. ako
<em>master~3</em> &mdash; dostaneme anonymnú vetvu nazývanú <em>odpojená hlava (detached HEAD)</em>.
Toto je užitočné pri prechádzaní cez históriu v archíve.
Povedzme, že chcete skompilovať Git, verziu 1.6.6.1. Môžete spustiť príkaz <code>git checkout
v1.6.6.1</code> (v tomto prípade ide o tag, nie o vetvu), skompilovať, nainštalovať a napokon sa prepnúť späť do inej vetvy,
napríklad <code>git checkout master</code>.
Komitovanie s odpojenou hlavou však funguje trochu odlišne; toto pokrýva odstavec <a href="#detached">nižšie</a>.</p>
<div class="center"><img src='checkout-detached.svg.png'></div>
<h3 id="detached">Komitovanie s odpojenou hlavou (detached HEAD)</h3>
<p>Pri odpojení <em>hlavy (HEAD)</em>, komitovanie funguje ako obvykle s tým rozdielom, že žiadna pomenovaná vetva sa nezaktualizuje.
(Môžete na to nazerať ako na anonymnú vetvu.)</p>
<div class="center"><img src='commit-detached.svg.png'></div>
<p>Akonáhle skopírujete niektorú inú revíziu z archívu (prostredníctvom príkazu <code>git checkout</code>), napríklad z vetvy <em>master</em>, (je predpoklad, že) na pôvodnú revíziu
už nič iné neodkazuje a táto sa teda stratí. Všimnite si, že po vykonaní príkazu už nič viac neodkazuje na revíziu <em>2eecb</em>.</p>
<div class="center"><img src='checkout-after-detached.svg.png'></div>
<p>Na druhej strane, ak chcete uložiť tento stav, môžete vytvoriť novú pomenovanú vetvu pomocou príkazu <code>git checkout -b <em>názov-vetvy</em></code>.</p>
<div class="center"><img src='checkout-b-detached.svg.png'></div>
<h3 id="reset">Resetovanie (reset)</h3>
<p>Resetovací príkaz <code>git reset</code> presúva aktuálnu vetvu na inú pozíciu a prípadne aktualizuje predsieň a pracovný adresár.
Používa sa tiež na kopírovanie súborov z archívu (z existujúcej revízie) do predsiene bezo zmeny obsahu pracovného adresára.</p>
<p>Ak sa uvedie len revízia bez názvov súborov, presunie sa aktuálna vetva na túto revíziu
a následne sa na túto revíziu zaktualizuje aj obsah predsiene. Prepínač
<code>--hard</code> spôsobí aktualizáciu aj pracovného adresára. Prepínač
<code>--soft</code> zachová predsieň i pracovný adresár bezo zmien.</p>
<div class="center"><img src='reset-commit.svg.png'></div>
<p>Neuvedenie revízie sa rovná použitiu špeciálneho odkazu <em>hlava (HEAD)</em>.
V tomto prípade sa vetva nepresúva, len obsah predsiene (príp.
s použitím prepínača <code>--hard</code> aj pracovného adresára) sa skopíruje z poslednej revízie.</p>
<div class="center"><img src='reset.svg.png'></div>
<p>Ak sa uvedie názov súboru (a/alebo prepínač <code>-p</code>),
potom príkaz pracuje podobne ako príkaz <a href='#checkout'>checkout</a> s názvom súboru
s tým, že sa zaktualizuje iba predsieň (pracovný adresár nie).
(Je tiež možné uviesť revíziu, z ktorej sa má zobrať obsah súborov, inú než <em>hlava (HEAD)</em>.)</p>
<div class="center"><img src='reset-files.svg.png'></div>
<h3 id="merge">Spájanie zmien (merge)</h3>
<p>Príkaz vytvára novú revíziu, ktorá zahŕňa zmeny z iných revízií.
Pred vykonaním príkazu musí obsah predsiene zodpovedať aktuálnej revízii.
Triviálnym prípadom je ak spájaná revízia je predkom aktuálnej revízie - v tomto prípade sa neudeje nič.
Ďalším najjednoduchším prípadom je ak aktuálna revízia je predkom spájanej revízie.
Toto má za následok spojenie zmien <em>pretočením dopredu (tzv. fast-forward merge)</em>, kedy je
odkaz vetvy jednoducho presunutý s následným skopírovaním obsahu nového odkazu (t.j. spájanej revízie) do predsiene.</p>
<div class="center"><img src='merge-ff.svg.png'></div>
<p>V iných prípadoch musí nastať "skutočné" spájanie. Môžete si zvoliť iné stratégie, avšak obvykle sa vykonáva "rekurzívne" spájanie,
kedy sa v princípe vezme aktuálna revízia (<em>ed489</em> na obrázku nižšie), spájaná revízia (<em>33104</em>)
a ich najnovší spoločný predok (<em>b325c</em>) a vykoná sa <a
href='http://en.wikipedia.org/wiki/Three-way_merge'>trojcestné spájanie</a>.
Výsledok sa uloží do pracovného adresára i do predsiene. Následne nastane komit, pri ktorom vzniká nová revízia s pridaným dodatočným rodičom (<em>33104</em>).</p>
<div class="center"><img src='merge.svg.png'></div>
<h3 id="cherry-pick">Zbieranie čerešničiek (cherry-pick)</h3>
<p>Príkaz <code>git cherry-pick</code> "zreplikuje" komit z inej vetvy do aktuálnej vetvy. V aktuálnej vetve pritom vznikne nová revízia s rovnakým popisom i obsahom ako má referencovaný komit.</p>
<div class="center"><img src='cherry-pick.svg.png'></div>
<h3 id="rebase">Spájanie vetiev (rebase)</h3>
<p>Spájanie vetiev je alternatívou k <a href='#merge'>spájaniu zmien</a> pre prípad zlučovania viacerých vetiev.
Zatiaľ čo spájanie zmien (merge) vytvorí jednoduchú revíziu s dvomi rodičmi tvoriac nelineárnu históriu v archíve,
spájanie vetiev (rebase) zreplikuje všetky komity z aktuálnej vetvy do inej vytvoriac lineárnu históriu v archíve.
Vo svojej podstate sa v prípade spájania vetiev jedná o automatizovaný spôsob vykonania viacerých príkazov <a
href='#cherry-pick'>cherry-pick</a> v rade za sebou.</p>
<div class="center"><img src='rebase.svg.png'></div>
<p>Vyššie uvedený príkaz vezme všetky také revízie, ktoré existujú vo vetve <em>topic</em>, nie však vo vetve
<em>master</em> (menovite <em>169a6</em> a <em>2c33a</em>), zreplikuje ich do vetvy <em>master</em>
a následne presunie hlavu vetvy na nový vrchol.
Ak na staré revízie po vykonaní príkazu nič viac neodkazuje, budú tieto odstránené pomocou nástroja na odstraňovanie neplatných položiek
(garbage collected).</p>
<p>Pre obmedzenie toho ako ďaleko do histórie sa vracať, použite prepínač <code>--onto</code>.
Nasledujúci príkaz zreplikuje do vetvy <em>master</em> najnovšie komity z aktuálnej vetvy počnúc revíziou nasledujúcou po revízii <em>169a6</em>,
konkrétne revíziu <em>2c33a</em>.</p>
<div class="center"><img src='rebase-onto.svg.png'></div>
<p>Existuje tiež interaktívny režim príkazu <code>git rebase --interactive</code>, ktorý umožňuje
robiť zložitejšie veci než len jednoduché zreplikovanie komitov, konkrétne zrušenie, preusporiadanie, úpravu či zlučovanie komitov.
Pre toto nie je k dispozícii žiaden zrejmý obrázok; v prípade záujmu o podrobnosti si preštudujte <a
href='http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html#_interactive_mode'>git-rebase(1)</a>.</p>
<h2 id="technical-notes">Technické poznámky</h2>
<p>Obsah súborov sa neuchováva priamo v predsieni
(<em>.git/index</em>) alebo v objektoch komitov. Každý súbor sa nachádza v databáze objektov (<em>.git/objects</em>) vo formáte <em>blob</em> (binary large object),
identifikovaný svojim SHA-1 hash-om. Indexový súbor (obsah predsiene) obsahuje zoznam názvov súborov spolu s identifikátorom pridruženého binárneho objektu blob a tiež ďalšie dáta.
Pre revízie existuje dodatočný dátový typ <em>strom</em>, ktorý je rovnako identifikovaný svojim
hash-om.
Stromy zodpovedajú adresárom v pracovnom adresári a obsahujú zoznam stromov a blob-ov prislúchajúcich ku každému názvu súboru v tom adresári.
Každá revízia má uložený identifikátor jeho stromu najvyššej úrovne, ktorý následne obsahuje všetky svoje blob-y a ostatné stromy naviazané na túto revíziu.</p>
<p>Ak vytvoríte revíziu pomocou odpojenej hlavy, na túto poslednú revíziu skutočne niečo odkazuje:
tzv. reflog hlavy. Po nejakom čase však tento vyprší, takže túto revíziu napokon odstráni nástroj
na odstraňovanie neplatných položiek, podobne ako pri revíziách po vykonaní príkazu <code>git commit --amend</code> alebo <code>git
rebase</code>.</p>
<hr>
<p>Copyright &copy; 2010,
<a href='mailto:lodatom@gmail.com'>Mark Lodato</a>.
Slovenský preklad &copy; 2013,
<a href='https://github.com/llucenic'>Ľudovít Lučenič</a>.
</p>
<p><a rel="license"
href="https://creativecommons.org/licenses/by-nc-sa/3.0/us/"><img alt=""
src="https://i.creativecommons.org/l/by-nc-sa/3.0/us/80x15.png"></a>
Toto dielo je licencované <a rel="license"
href="https://creativecommons.org/licenses/by-nc-sa/3.0/us/">Creative
Commons Attribution-Noncommercial-Share Alike 3.0 United States
</a> licenciou.</p>
<p><a href='translate-en.html'>Want to translate into another
language?</a></p>
</body>
</html>
Something went wrong with that request. Please try again.