Skip to content

Commit e459405

Browse files
authored
Update lessons on Git
pyvec#638
2 parents ac508a5 + f9ae8d6 commit e459405

File tree

6 files changed

+256
-130
lines changed

6 files changed

+256
-130
lines changed

lessons/git/basics/index.md

Lines changed: 26 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ pomocí příkazu `git init`:
5656

5757
```ansi
5858
␛[36m$␛[0m git init
59-
Initialized empty Git repository in ./.git/
59+
Initialized empty Git repository in .../.git/
6060
```
6161

6262
Na první pohled to vypadá, že se nic nestalo.
@@ -74,13 +74,13 @@ vypisuje informace o stavu repozitáře:
7474
␛[36m$␛[0m git status
7575
On branch master
7676
77-
Initial commit
77+
No commits yet
7878
7979
nothing to commit (create/copy files and use "git add" to track)
8080
```
8181

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

@@ -101,12 +101,11 @@ Pak zkus znovu `git status`: Git oznámí,
101101
␛[36m$␛[0m git status
102102
On branch master
103103
104-
Initial commit
104+
No commits yet
105105
106106
Untracked files:
107107
(use "git add <file>..." to include in what will be committed)
108-
109-
␛[31mbasnicka.txt␛[m
108+
␛[31mbasnicka.txt␛[m
110109
111110
nothing added to commit but untracked files present (use "git add" to track)
112111
```
@@ -125,12 +124,11 @@ a znovu zkontroluj stav repozitáře:
125124
␛[36m$␛[0m git status
126125
On branch master
127126
128-
Initial commit
127+
No commits yet
129128
130129
Changes to be committed:
131130
(use "git rm --cached <file>..." to unstage)
132-
133-
␛[32mnew file: basnicka.txt␛[m
131+
␛[32mnew file: basnicka.txt␛[m
134132
135133
```
136134

@@ -141,7 +139,7 @@ Pojď tedy vytvořit revizi:
141139

142140
```ansi
143141
␛[36m$␛[0m git commit
144-
[master (root-commit) 1a009f4] První revize
142+
[master (root-commit) eb0fcd9] První revize
145143
1 file changed, 6 insertions(+)
146144
create mode 100644 basnicka.txt
147145
```
@@ -196,9 +194,9 @@ To ti poví příkaz `git show`:
196194

197195
```ansi
198196
␛[36m$␛[0m git show
199-
␛[33mcommit 1a009f4267d5a6ab7ece87cb7514f5b803692e39␛[m
197+
␛[33mcommit eb0fcd9317cbba3d9406ffe2918dfaad667f100f␛[m
200198
Author: Adéla Novotná <[email protected]>
201-
Date: Mon Mar 20 14:51:34 2017 +0100
199+
Date: Mon May 18 16:18:40 2020 +0200
202200
203201
První revize
204202
@@ -252,9 +250,8 @@ Pak se opět zeptej Gitu na stav repozitáře.
252250
On branch master
253251
Changes not staged for commit:
254252
(use "git add <file>..." to update what will be committed)
255-
(use "git checkout -- <file>..." to discard changes in working directory)
256-
257-
␛[31mmodified: basnicka.txt␛[m
253+
(use "git restore <file>..." to discard changes in working directory)
254+
␛[31mmodified: basnicka.txt␛[m
258255
259256
no changes added to commit (use "git add" and/or "git commit -a")
260257
```
@@ -318,12 +315,10 @@ A pro úplnost se znovu koukni, co říká
318315
revize.
319316

320317
```ansi
321-
␛[36m$␛[0m git status
322318
On branch master
323319
Changes to be committed:
324-
(use "git reset HEAD <file>..." to unstage)
325-
326-
␛[32mmodified: basnicka.txt␛[m
320+
(use "git restore --staged <file>..." to unstage)
321+
␛[32mmodified: basnicka.txt␛[m
327322
328323
```
329324

@@ -346,8 +341,8 @@ Můj popisek bude znít takhle:
346341
Rozdělení dlouhých řádků
347342
348343
Verše básně se většinou píšou na jednotlivé řádky. Myslím, že
349-
takhle se to líp čte. (Ale co si budeme povídat, hlavní
350-
důvod je ukázat, co dělá git diff.)
344+
takhle se to líp čte. (Ale, co si budeme povídat, hlavní
345+
důvod je ukázat co dělá git diff.)
351346
```
352347

353348
> [note]
@@ -362,15 +357,15 @@ Pak ji zkontroluj:
362357

363358
```ansi
364359
␛[36m$␛[0m git show
365-
␛[33mcommit 81cbabb3bd3cd2f3896dd41b20012c44dbd69031␛[m
360+
␛[33mcommit 1fcd654a331f290616c948d9841fd8d2a34aa6b4␛[m
366361
Author: Adéla Novotná <[email protected]>
367-
Date: Mon Mar 20 14:51:34 2017 +0100
362+
Date: Mon May 18 16:18:40 2020 +0200
368363
369364
Rozdělení dlouhých řádků
370365
371366
Verše básně se většinou píšou na jednotlivé řádky. Myslím, že
372-
takhle se to líp čte. (Ale co si budeme povídat, hlavní
373-
důvod je ukázat, co dělá git diff.)
367+
takhle se to líp čte. (Ale, co si budeme povídat, hlavní
368+
důvod je ukázat co dělá git diff.)
374369
375370
␛[1mdiff --git a/basnicka.txt b/basnicka.txt␛[m
376371
␛[1mindex 558d133..24e2384 100644␛[m
@@ -409,19 +404,19 @@ První z nich je <code>git log</code>.
409404

410405
```ansi
411406
␛[36m$␛[0m git log
412-
␛[33mcommit 81cbabb3bd3cd2f3896dd41b20012c44dbd69031␛[m
407+
␛[33mcommit 1fcd654a331f290616c948d9841fd8d2a34aa6b4␛[m
413408
Author: Adéla Novotná <[email protected]>
414-
Date: Mon Mar 20 14:51:34 2017 +0100
409+
Date: Mon May 18 16:18:40 2020 +0200
415410
416411
Rozdělení dlouhých řádků
417412
418413
Verše básně se většinou píšou na jednotlivé řádky. Myslím, že
419-
takhle se to líp čte. (Ale co si budeme povídat, hlavní
420-
důvod je ukázat, co dělá git diff.)
414+
takhle se to líp čte. (Ale, co si budeme povídat, hlavní
415+
důvod je ukázat co dělá git diff.)
421416
422-
␛[33mcommit 1a009f4267d5a6ab7ece87cb7514f5b803692e39␛[m
417+
␛[33mcommit eb0fcd9317cbba3d9406ffe2918dfaad667f100f␛[m
423418
Author: Adéla Novotná <[email protected]>
424-
Date: Mon Mar 20 14:51:34 2017 +0100
419+
Date: Mon May 18 16:18:40 2020 +0200
425420
426421
První revize
427422
```

lessons/git/basics_branching.sh

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ git checkout doplneni-autora
5555
git branch
5656

5757
cat > basnicka.txt << END
58+
(Lidová)
59+
5860
Holka modrooká
5961
Nesedávej u potoka
6062
Holka modrooká
@@ -64,8 +66,6 @@ V potoce je hastrmánek
6466
Zatahá tě za copánek
6567
Holka modrooká
6668
Nesedávej tam
67-
68-
- Lidová
6969
END
7070

7171
git add basnicka.txt
@@ -79,8 +79,7 @@ git checkout doplneni-jmena
7979
git branch
8080

8181
cat > basnicka.txt << END
82-
Holka modrooká
83-
=========
82+
Holka Modrooká
8483
8584
Holka modrooká
8685
Nesedávej u potoka
@@ -101,6 +100,28 @@ take_screenshot $OUTFILE.branches.png gitk --all
101100
git checkout master
102101
git merge doplneni-jmena
103102
git merge doplneni-autora
103+
git status
104+
cat basnicka.txt
105+
git diff
106+
107+
cat > basnicka.txt << END
108+
Holka modrooká
109+
(Lidová)
110+
111+
Holka modrooká
112+
Nesedávej u potoka
113+
Holka modrooká
114+
Nesedávej tam
115+
116+
V potoce je hastrmánek
117+
Zatahá tě za copánek
118+
Holka modrooká
119+
Nesedávej tam
120+
END
121+
122+
git add basnicka.txt
123+
GIT_EDITOR='true' git commit
124+
104125
git branch
105126

106127
take_screenshot $OUTFILE.merge.png gitk --all

lessons/git/branching/index.md

Lines changed: 80 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ Switched to branch 'doplneni-autora'
6363
```
6464

6565
Tak. Teď jsi „ve” větvi `doplneni-autora`.
66-
Doplň nějaké jméno do souboru `basnicka.txt`,
66+
Doplň nějaké jméno na začátek souboru `basnicka.txt`,
6767
a pomocí `git add` a `git commit` udělej novou revizi.
6868
Pak koukni na `gitk --all`, jak to vypadá:
6969

@@ -93,7 +93,8 @@ Switched to branch 'doplneni-jmena'
9393
master␛[m
9494
```
9595

96-
Doplň do souboru jméno básně a pomocí
96+
Doplň jméno básně na začátek souboru (tedy na stejné místo,
97+
jako je v druhé větvi název) a pomocí
9798
`git add`, `git commit` ulož revizi.
9899
Všechno zkontroluj přes `gitk --all`.
99100

@@ -125,7 +126,8 @@ zpátky do `master`. Podívejme se jak na to.
125126

126127
Nedávalo by smysl historii projektu rozdvojovat,
127128
kdyby pak jednotlivé větve nešly zase sloučit dohromady.
128-
Naštěstí je v Gitu slučování poměrně jednoduché.
129+
V Gitu je většinou slučování poměrně jednoduché, ale tento příklad schválně
130+
ukazuje nejsložitější variantu, která může nastat.
129131

130132
Přepni se zpátky na `master`
131133
a použij příkaz `git merge`, který
@@ -136,10 +138,10 @@ Příkazu musíš dát jméno větve, kterou chceš sloučit.
136138
␛[36m$␛[0m git checkout master
137139
Switched to branch 'master'
138140
␛[36m$␛[0m git merge doplneni-jmena
139-
Updating e929fb0..c982a81
141+
Updating 1fcd654..5c9bf93
140142
Fast-forward
141-
basnicka.txt | 6 ␛[32m+++++␛[m␛[31m-␛[m
142-
1 file changed, 5 insertions(+), 1 deletion(-)
143+
basnicka.txt | 3 ␛[32m+++␛[m
144+
1 file changed, 3 insertions(+)
143145
```
144146

145147
Sloučeno! Ono „`Fast-forward`” znamená, že
@@ -148,25 +150,82 @@ vlastně nebylo co slučovat – jen se do větve
148150
Zkontroluj v `gitk --all`, jak to vypadá.
149151

150152
A pak zkus sloučit i druhou větev: `git merge doplneni-autora`.
151-
Tady to bude složitější: Může se stát, že změny nepůjdou
153+
Tady to bude složitější: pravděpodobně se stane, že změny nepůjdou
152154
automaticky sloučit a ve výstupu se objeví hláška
153-
`merge conflict` (slučovací konflikt).
155+
`merge conflict` (slučovací konflikt):
156+
157+
```ansi
158+
␛[36m$␛[0m git merge doplneni-autora
159+
Auto-merging basnicka.txt
160+
CONFLICT (content): Merge conflict in basnicka.txt
161+
Automatic merge failed; fix conflicts and then commit the result.
162+
```
163+
164+
> [note] A když ne?
165+
> Jestli se konflikt neobjevil, Git změny sloučil sám.
166+
> Gratuluji! Zbytek téhle sekce bude jen teoretický; vrať se sem, až se ti
167+
> někdy „podaří“ konflikt udělat.
168+
169+
Když nastane konflikt, `git status` ukáže „both modified“ – tedy že byl soubor
170+
změněný v obou slučovaných větvích:
171+
172+
```ansi
173+
␛[36m$␛[0m git status
174+
On branch master
175+
You have unmerged paths.
176+
(fix conflicts and run "git commit")
177+
(use "git merge --abort" to abort the merge)
178+
179+
Unmerged paths:
180+
(use "git add <file>..." to mark resolution)
181+
␛[31mboth modified: basnicka.txt␛[m
182+
183+
no changes added to commit (use "git add" and/or "git commit -a")
184+
```
154185
V tom případě se na soubor podívej v editoru: objeví
155186
se v něm obsah z obou konfliktních verzí,
156-
společně se značkami, které upozorňují na místo
157-
kde konflikt nastal.
158-
Soubor uprav ho tak, jak by měl vypadat, ulož a zadej
159-
`git commit`.
187+
společně se značkami `<<<<<<<`, `=======` a `>>>>>>>`, které upozorňují na
188+
místo kde konflikt nastal.
189+
190+
Značky ukáže i příkaz `git diff`, jehož výstup je teď trošku složitější:
191+
192+
```ansi
193+
␛[36m$␛[0m git diff
194+
␛[1mdiff --cc basnicka.txt␛[m
195+
␛[1mindex bc7a2de,88e7ea5..0000000␛[m
196+
␛[1m--- a/basnicka.txt␛[m
197+
␛[1m+++ b/basnicka.txt␛[m
198+
␛[36m@@@ -1,4 -1,4 +1,8 @@@␛[m
199+
␛[32m++<<<<<<< HEAD␛[m
200+
␛[32m +Holka Modrooká␛[m
201+
␛[32m++=======␛[m
202+
␛[32m+ (Lidová)␛[m
203+
␛[32m++>>>>>>> doplneni-autora␛[m
204+
␛[m
205+
Holka modrooká␛[m
206+
Nesedávej u potoka␛[m
207+
```
208+
209+
Konflikty a značky, které můžou být nepřehledné, ukazuje Git ze stejného důvodu
210+
jako Python chybové hlášky: tedy aby ti co nejvíce pomohl.
211+
Git je jen „hloupý“ nástroj a s konfliktem si neporadí sám, ale snaží se
212+
ti řešení konfliktu co nejvíc usnadnit.
213+
214+
Proto hlavně nepanikař!
215+
Soubor otevři v editoru a uprav **tak, jak by měl vypadat**.
216+
Značky jako `<<<<<<<` smaž; řádky poskládej tak, jak by měly jít za sebou.
217+
(A pracuješ-li na kódu, spusť testy a ověř, jestli všechno stále funguje.)
218+
219+
Pak soubor ulož a zadej `git commit`.
160220

161221
Ať nastal konflikt nebo ne, vytvoří se „slučovací revize“
162222
(angl. *merge commit*), které – jako každé revizi – můžeš dát popisek.
223+
Tentokrát je popisek už předvyplněný; chceš-li nějaký jiný, nahraď ho.
163224

164225
```ansi
165-
␛[36m$␛[0m git merge doplneni-autora
166-
Auto-merging basnicka.txt
167-
Merge made by the 'recursive' strategy.
168-
basnicka.txt | 2 ␛[32m++␛[m
169-
1 file changed, 2 insertions(+)
226+
␛[36m$␛[0m git add basnicka.txt
227+
␛[36m$␛[0m git commit
228+
[master 884b30a] Merge branch 'doplneni-autora'
170229
```
171230

172231
Povedlo se?
@@ -181,10 +240,10 @@ změny jsou v `master` a nemá na nich cenu
181240
pracovat dál.
182241

183242
```ansi
184-
␛[36m$␛[0m git branch -d doplneni-autora
185-
Deleted branch doplneni-autora (was 0e213cd).
186-
␛[36m$␛[0m git branch -d doplneni-jmena
187-
Deleted branch doplneni-jmena (was c982a81).
243+
␛[36m$␛[0m git branch --delete doplneni-autora
244+
Deleted branch doplneni-autora (was f1cd9be).
245+
␛[36m$␛[0m git branch --delete doplneni-jmena
246+
Deleted branch doplneni-jmena (was 5c9bf93).
188247
␛[36m$␛[0m git branch
189248
* ␛[32mmaster␛[m
190249
```

0 commit comments

Comments
 (0)