forked from martamyszki/git-dev-warsztaty-presentation
-
Notifications
You must be signed in to change notification settings - Fork 32
/
cwiczenia.html
436 lines (406 loc) · 17.8 KB
/
cwiczenia.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
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
---
description: GitWarsztaty - Ćwiczenia wykonywane w trakcie warsztatów z Gita
cover: img/cwiczenia.jpg
---
<!DOCTYPE html>
<html>
<head>
<title>Ćwiczenia</title>
<meta charset="utf-8">
{% include head.html %}
</head>
<body>
<section>
<!--
### Example flow - KRZYSIEK
git init
git init -> obok widać że powstał katalog gita
otworz w explorerze
z PPM->New file->txt
pokaz w SourceTree, i tutaj te 3 stany
~ dodawanie kolejnego,
~ dodawanie tekstu w utworzonym
~ zamiast screenshot pokazujemy równolegle w SourceTree.
? Czy oni powinni mieć SourceTree. Oni nie mieli my też nie wymagamy, można doinstalować.
-->
<h2 id="simple-flow">Ćwiczenie: proste flow</h2>
Komendy potrzebne do ćwiczenia
<ul>
<li>git init</li>
<li>git status</li>
<li>git add</li>
<li>git commit</li>
</ul>
<ol>
<li>Utwórz na pulpicie katalogi <code>cwiczenia/flow-demo</code><br>
<code>
cd ~/Desktop<br>
mkdir cwiczenia<br>
cd cwiczenia<br>
mkdir flow-demo<br>
cd flow-demo
</code>
</li>
<li>Utwórz repozytorium (<code>git init</code>)</li>
<li>Stwórz plik index.txt z zawartością "Hello World"</li>
<li>Dodaj plik do repozytorium (<code>git add, git commit</code>) - po 'git commit' wyskoczy okno edytora</li>
<li>Zmień treść pliku na "Witaj świecie"</li>
<li>Sprawdź status repozytorium (<code>git status</code>)</li>
<li>Zrób commit z tą zmianą (<code>git add, git commit</code>)</li>
<li>Dodaj do pliku kolejną linijkę "jest git"</li>
<li>Stwórz nowy plik cars.json i wpisz "toyota"</li>
<li>Sprawdź status repozytorium (<code>git status</code>)</li>
<li>Dodaj plik cars.json do repozytorium<br>
(<code>git add cars.json, git commit</code>)
</li>
<li>Sprawdź status repozytorium (<code>git status</code>)</li>
<li>"Skomituj" plik index.txt</li>
<li>Usuń plik <strong><code>cars.json</code></strong></li>
<li>Sprawdź status repozytorium (<code>git status</code>)</li>
<li>"Skomituj" usunięcie pliku</li>
<li>Sprawdź status repozytorium (<code>git status</code>)</li>
</ol>
</section>
<div style="margin-top:500px"> </div>
<h2 id="reset-revert-commit-ammend">Ćwiczenie wspólnie z demo: <code>reset, revert, commit ammend</code></h2>
<ol>
<li>
<code>
cd ~/Desktop/cwiczenia<br>
git clone https://github.com/git-warsztaty/reset-demo<br>
cd reset-demo
</code>
</li>
<li>
<code>git status<br>git diff<br>git diff --staged</code>
</li>
<li><b><code>git reset --soft HEAD^^</code></b>
<br><code>git status<br>git diff<br>git diff --staged</code>
</li>
<li><b><code>git reset --hard HEAD</code></b>
<br><code>git status<br>git diff<br>git diff --staged</code>
</li>
<li><b><code>git reset --hard master</code></b>
<br><code>git status<br>git diff<br>git diff --staged</code>
</li>
<li><b><code>git reset --hard origin/master</code></b>
<br><code>git status<br>git diff<br>git diff --staged</code>
</li>
<li><code>git reset --soft HEAD^</code>
<br><code>git status<br><b>git checkout .</b><br>git status<br><b>git reset</b><br>git status<br><b>git checkout .</b><br>git status</code>
</li>
<li><code>git reset --soft HEAD^</code>
<br><code>git status<br><b>git reset --hard</b><br>git status</code>
</li>
<li><code>touch new-file.txt</code>
<br><code>git status<br><b>git checkout new-file.txt</b><br>git status<br><b>git clean new-file.txt -df</b><br>git status</code>
</li>
<li><code>touch new-file.txt</code>
<br><code>git status<br>git add .<br>git commit -m"Add new file"<br>git status<br>touch new-file.txt<br>git add .<br><b>git commit --amend</b></code>
</li>
<li><b><code>git revert HEAD</code></b>
</li>
</ol>
<!--
## rebase interactive - KRZYSIEK
* dużo wprowadzenia, jak edytować (bo otworzy się plik w notatniku), kilka opcji, zamykamy plik
* pokazać że można to zrobić 'rebase interactive'
* ćwiczenie:
-->
<div style="margin-top:500px"> </div>
<h2 id="rebase-interactive">Ćwiczenie <code>rebase --interactive</code></h2>
<h5>Opis</h5>
Skończyliśmy pracę i jesteśmy gotowi do wystawienia pull-requesta, jednak została nam ostatnia czynność - uporządkowanie utworzonych commitów.<br>
Przeglądamy wyniki naszej pracy i rzucają nam się w oczy różne drobne niedoskonałości:
<ul>
<li>Commit dodający plik .gitignore zazwyczaj dodawany jest od razu po commicie inicjalizującym, my go dodaliśmy na końcu. <b>Powinniśmy przenieść commit <i>Add .gitignore</i> na początek.</b></li>
<li>Niedopilnowaliśmy konwencji tytułów commitów - <b>commit <i>New cars</i> nie zaczyna się od czasownika w trybie rozkazującym, powinniśmy go przeredagować.</b></li>
<li>Wkradł nam się chochlik - zacommitowaliśmy auto którego nie powinniśmy byli zacommitować. Na szczęście, zrobiliśmy to w ramach jednego małego commita. <b>Wystarczy więc usunąć commita <i>Add wrong car</i>.</b></li>
<li>Dodaliśmy niepoprawny samochód - <i>Mazdaaa</i> a chodziło nam oczywiście o <i>Mazda</i>. <b>Należy zmienić w treści pliku oraz w tytule commita <i>Add Mazdaaa car</i></b></li>
<li>Stworzyliśmy commita do poprawy literówki, który generalnie nic nie wnosi. <b>Należy połączyć commita <i>Correct typo</i> z commitem <i>Add Skoda</i>, pozbywając się opisu <i>Correct typo</i>.</b></li>
</ul>
<h5>Przygotowanie do ćwiczenia</h5>
<code>
cd ~/Desktop/cwiczenia<br>
git clone https://github.com/git-warsztaty/devwarsztaty-rebase-interactive-demo rebase-interactive-demo<br>
cd rebase-interactive-demo
</code>
<h5>Zbiór komend potrzebnych/przydatnych w ćwiczeniu</h5>
<p>
<ul>
<li class="fragment"><code>git rebase -i HEAD~6</code></li>
<li class="fragment"><code>git rebase --interactive HEAD~6</code></li>
<li class="fragment"><code>git add . <span style="margin:0 15px 0 15px">•</span> git commit --amend</code></li>
<li class="fragment"><code>git commit --amend</code></li>
<li class="fragment"><code>git rebase --continue</code></li>
<li class="fragment"><code>git rebase --abort</code></li>
<li class="fragment"><code>git reset --hard origin/master</code></li>
<li class="fragment"><code>gitk</code></li>
</ul>
<h5>Spodziewany efekt podejrzany programem <code>gitk</code></h5>
<img src="img/dod-rebase-interactive.jpg">
<details>
<summary>Podejrzyj rozwiązanie</summary>
<p>
<code>
git rebase -i HEAD~6<br>
<i>W edytorze ustawiamy linijki jak następuje</i><br>
<span style="margin-left:10px">pick c803c5d Add .gitignore</span><br>
<span style="margin-left:10px">r 4a7dc6f New cars</span><br>
<span style="margin-left:10px">d e0b2bbc Add wrong car</span><br>
<span style="margin-left:10px">e 68d5a89 Add Mazdaaa car</span><br>
<span style="margin-left:10px">pick 1306640 Add Skoda</span><br>
<span style="margin-left:10px">f feca8bb Correct typo</span><br>
<i>Zapisujemy plik i zamykamy edytor</i><br>
<i>W edytorze tekstowym który otworzy się, z commitem "New cars", poprawiamy tytuł, zapisujemy plik i zamykamy edytor</i><br>
<i>Otwieramy plik cars.txt i poprawiamy tekst "Mazdaaa", zapisujemy</i><br>
git status<br>
git add .<br>
git status<br>
git commit --amend<br>
<i>W edytorze tekstowym który otworzy się, z commitem "Add Mazdaaa car", poprawiamy tytuł, zapisujemy plik i zamykamy edytor</i><br>
git status<br>
git rebase --continue<br>
gitk
</code>
</p>
</details>
<div style="margin-top:500px"> </div>
<!--
* pracujemy nad featurem, na branch feature_light
* mamy kilka commitów // 'git log' z consoli, ?SourceTree?
* synchronizujemy mastera
* checkout, pulll, checkout z powrotem, pokazanie historii
* robimy merge
* push
-->
<h2 id="rebase-vs-merge">Ćwiczenie rebase vs merge</h2>
<h5>Opis</h5>
<b>Dołącz pracę z brancha feature-branch na brancha master.</b><br>
Najpierw wykonaj to robiąc merga i sprawdź w programie <code>gitk</code>, czy efekt jest taki sam jak na wzorcowym obrazku.<br>
Następnie zresetuj branche do stanów początkowych i przenieś pracę z brancha feature-branch za pomocą rebase i sprawdź w programie <code>gitk</code>, czy efekt jest taki sam jak na wzorcowym obrazku.
<h5>Komendy potrzebne do ćwiczenia (niekoniecznie w tej kolejności)</h5>
<ul>
<li>git checkout</li>
<li>git merge</li>
<li>git rebase</li>
<li>gitk</li>
</ul>
<h5>Przygotowanie do ćwiczenia</h5>
<ul style="list-style:none">
<li>
<code>
cd ~/Desktop/cwiczenia<br>
git clone https://github.com/git-warsztaty/rebase-vs-merge-training rebase-and-merge-demo<br>
cd rebase-and-merge-demo<br>
git checkout feature-branch (tylko żeby ten branch się pojawił lokalnie)<br>
git checkout master
</code>
</li>
</ul>
<h5>Cel wykonania merge (sprawdź programem <code>gitk</code>, czy Ci się udało)</h5>
<img src="img/dod-merge-output.jpg">
<details>
<summary>Podejrzyj rozwiązanie</summary>
<code>
git checkout master<br>
git merge feature-branch
</code>
</details>
<details>
<summary>Przywrócenie brancha master do początkowej sytuacji</summary>
<p>
<code>
git checkout master<br>
git reset --hard origin/master<br>
</code>
</p>
</details>
<details>
<summary>Przywrócenie brancha feature-branch do początkowej sytuacji</summary>
<p>
<code>
git checkout feature-branch<br>
git reset --hard origin/feature-branch<br>
</code>
</p>
</details>
<h5>Cel wykonania rebase (sprawdź programem <code>gitk</code>, czy Ci się udało)</h5>
<img src="img/dod-rebase-output.jpg">
<details>
<summary>Podejrzyj rozwiązanie</summary>
<code>
git checkout feature-branch<br>
git rebase master<br>
git checkout master<br>
"git reset --hard feature-branch" albo "git merge feature-branch"
</code>
</details>
<div style="margin-top:500px"> </div>
<h2 id="resolve-conflicts">Ćwiczenie: rozwiązywanie konfliktów</h2>
<h5>Opis</h5>
Dołącz pracę z brancha tomek-path na brancha master. W trakcie dołączania napotkasz konflikt do rozwiązania.<br>
<b>Rozwiąż konflikt tak, żeby plik program.txt wyglądał jak na wzorcowym obrazku.</b><br>
Najpierw wykonaj to robiąc merga, oprócz pliku program.txt sprawdź również w programie <code>gitk</code>, czy historia commitów jest taka sama jak na wzorcowym obrazku.<br>
Następnie zresetuj branche do stanów początkowych i przenieś pracę z brancha tomek-path za pomocą rebase i oprócz pliku program.txt sprawdź w programie <code>gitk</code>, czy historia commitów jest taka sama jak na wzorcowym obrazku.
<h5>Komendy potrzebne do ćwiczenia (niekoniecznie w tej kolejności)</h5>
<ul>
<li><code>git checkout tomek-path</code></li>
<li><code>git rebase master</code></li>
<li><code>(git rebase --abort)</code></li>
<li><code>git merge master</code></li>
<li><code>(git merge --abort)</code></li>
<li><code>git rebase master</code></li>
<li><code>git mergetool</code></li>
<li><code>git rebase --continue</code></li>
<li><code>git commit</code></li>
</ul>
<h5>Przygotowanie do ćwiczenia</h5>
<ul style="list-style:none">
<li>
Sklonowanie repozytorium do ćwiczenia<br>
<code>
cd ~/Desktop/cwiczenia<br>
git clone https://github.com/git-warsztaty/conflict-line-training conflicts-demo<br>
cd conflicts-demo
</code>
</li>
</ul>
<h5>Cel - wynikowy plik <code>program.txt</code></h5>
<img src="img/dod-conflicts-result-file.jpg">
<h5>Cel - historia commitów w przypadku merge (sprawdź programem <code>gitk</code>, czy Ci się udało)</h5>
<img src="img/dod-conflicts-merge.jpg">
<details>
<summary>Podejrzyj rozwiązanie</summary>
<p>
<code>
git checkout master<br>
git merge feature-branch<br>
git mergetool<br>
<i>Klikanie w kdiff3 albo wybieranie za pomocą skrótów CTRL+1/CTRL+2/CTRL+3 CTRL+PgDn CTRL+PgUp.</i><br>
<i>Po zakończonej pracy CTRL+S i zamknięcie programu kdiff3.</i><br>
git commit
</code>
</p>
</details>
<details>
<summary>Przywrócenie brancha master do początkowej sytuacji</summary>
<p>
<code>
git checkout master<br>
git reset --hard origin/master<br>
</code>
</p>
</details>
<details>
<summary>Przywrócenie brancha tomek-path do początkowej sytuacji</summary>
<p>
<code>
git checkout tomek-path<br>
git reset --hard origin/tomek-path<br>
</code>
</p>
</details>
<h5>Cel - historia commitów w przypadku rebase (sprawdź programem <code>gitk</code>, czy Ci się udało)</h5>
<img src="img/dod-conflicts-rebase.jpg">
<details>
<summary>Podejrzyj rozwiązanie</summary>
<code>
git checkout tomek-path<br>
git rebase master<br>
git mergetool<br>
<i>Klikanie w kdiff3 albo wybieranie za pomocą skrótów CTRL+1/CTRL+2/CTRL+3 CTRL+PgDn CTRL+PgUp.</i><br>
<i>Po zakończonej pracy CTRL+S i zamknięcie programu kdiff3.</i><br>
git rebase --continue<br>
git checkout master<br>
"git reset --hard tomek-path" albo "git merge tomek-path"
</code>
</details>
<div style="margin-top:500px"> </div>
<h2 id="push-at-the-same-time">Ćwiczenie: pushowanie do wspólnego repozytorium</h2>
Komendy potrzebne do ćwiczenia
<ul>
<li>git config --global pull.rebase true</li>
<li>git pull</li>
<li>git push</li>
<li>(ewentualnie rozwiązywanie konfliktów: 'git mergetool', 'git rebase --continue')</li>
</ul>
<ul style="list-style:none">
<li>
Sklonowanie repozytorium do ćwiczenia<br>
<code>
cd ~/Desktop/cwiczenia<br>
git clone https://github.com/git-warsztaty/names-collector names-collector<br>
cd names-collector<br>
</code>
Czekamy na wszystkich aż sklonują
<details>
<summary>zadanie</summary>
<p>Pod odpowiednią literą wpisujemy swój nick githubowy i pushujemy</p>
</details>
</li>
</ul>
<div style="margin-top:500px"> </div>
<h2>Przygotowanie do ćwiczeń z przeglądaniem historii</h2>
<ol>
<li>
Przejdź do katalogu ćwiczeń na pulpicie:<br>
<code>cd ~/Desktop/cwiczenia</code>
</li>
<li>Sklonuj przykładowe repozytorium (z projektem open source), do katalogu
<code>log-demo</code>:<br>
<small><code><b>git clone https://gitlab.com/terrakok/gitlab-client log-demo</b></code></small>
</li>
<li>
Przejdź do katalogu repo: <code>cd log-demo</code>
</li>
<li>
Zresetuj repozytorium do wersji: 7ad14ecda2f97a3ff7c3cca44cc7605484b578b5<br>
<code>git reset --hard 7ad14</code><br>
<small><em>Żeby każdy miał tę samą wersję do ćwiczeń</em></small>
<br>
</li>
</ol>
<div style="margin-top:500px"> </div>
<h2 id="forks-pull-request">Ćwiczenie: pull requesty</h2>
<ol>
<li>Otwórz w przeglądarcę stronę projektu do którego będziesz kontrybuował <a
href="https://github.com/tometchy/git-dev-warsztaty-presentation" target=”_blank”>github.com/tometchy/git-dev-warsztaty-presentation</a>
</li>
<li>Kliknij <i>fork</i></li>
<li>
<code>
cd ~/Desktop/cwiczenia<br>
git clone https://github.com/TWOJ_GITHUB_NICK/git-dev-warsztaty-presentation pull-requests-demo<br>
cd pull-requests-demo
</code>
</li>
<li>Wejdź do katalogu <i>_pytania-z-warsztatow</i> (zwróc uwagę, że nazwa katalogu zaczyna się od znaku podkreślenia (tak zwana podłoga)</li>
<li>Skopiuj plik <i>_template.md</i> i nowy plik nazwij <i>TWOJ_GITHUB_NICK.md</i> (stosuj same małe litery)</li>
<li>Uzupełnij plik <i>TWOJ_GITHUB_NICK.md</i> zgodnie z szablonem:<br>
---<br>
day: "2019-06-05"<br>
author: twoj-nick-github<br>
about-author: "Uczestnik warsztatów"<br>
---<br>
<br>
Treść pytania.
</li>
<li>W sekcji <i>day</i> wpisz dzisiejszą datę w formacie "YYYY-MM-DD".<br>
W sekcji <i>author</i> wpisz swój nick z githuba (stosuj małe litery).<br>
W sekcji <i>about-author</i> możesz napisać kilka słów o sobie (nie więcej niż treść pytania).<br>
W ostatniej sekcji wpisz pytanie, jeżeli jeszcze jakieś Cię nurtuje. Jeżeli żadne pytanie nie przychodzi Ci do głowy, to napisz który element Gita jest dla ciebie najciekawszy / najbardziej fascynujący lub najbardziej cię pozytywnie zaskoczył :)<br>
<small>
Nie zmieniaj formatu tekstu, pierwsza i piąta linia musi składać się z trzech myślników, szósta linia musi pozostać pusta, nazwy elementów muszą pozostać takie jakie są, a wartości oddzielone są od nazw dwukropkiem.
</small>
</li>
<li>Stwórz commit z plikiem który dodałeś</li>
<li>Push (do swojego repozytorium)</li>
<li>Otwórz w przeglądarcę stronę projektu do którego kontrybuujesz <a
href="https://github.com/tometchy/git-dev-warsztaty-presentation" target=”_blank”>github.com/tometchy/git-dev-warsztaty-presentation</a>
</li>
<li>Kliknij <i>New pull request</i> i wybierz jako źródło brancha master ze swojego profilu</li>
</ol>
{% include analytics.html %}
</body>
</html>