forked from MarkLodato/visual-git-guide
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index-sk.html
311 lines (226 loc) · 18.4 KB
/
index-sk.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
<!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-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>
</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 — povedzme, je to tag, vzdialená vetva, SHA-1 identifikátor revízie alebo referenčný výraz napr. ako
<em>master~3</em> — 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 © 2010,
<a href='mailto:[email protected]'>Mark Lodato</a>.
Slovenský preklad © 2013,
<a href='https://github.com/llucenic'>Ľudovít Lučenič</a>.
</p>
<p><a rel="license"
href="http://creativecommons.org/licenses/by-nc-sa/3.0/us/"><img alt=""
src="http://i.creativecommons.org/l/by-nc-sa/3.0/us/80x15.png"></a>
Toto dielo je licencované <a rel="license"
href="http://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>