sp-tutorial 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/README.markdown +42 -0
  2. data/Rakefile +36 -0
  3. data/TODO +6 -0
  4. data/VERSION.yml +4 -0
  5. data/config.ru +15 -0
  6. data/lib/config.ru +15 -0
  7. data/lib/public/doc/Cyklop-otf-0_91.zip +0 -0
  8. data/lib/public/doc/ex/sp_lab01_zad.odt +0 -0
  9. data/lib/public/doc/ex/sp_lab02_zad.odt +0 -0
  10. data/lib/public/doc/ex/sp_lab03_zad.odt +0 -0
  11. data/lib/public/doc/ex/sp_lab04_zad.odt +0 -0
  12. data/lib/public/doc/latexsheet.pdf +0 -0
  13. data/lib/public/doc/survival.pdf +0 -0
  14. data/lib/public/images/Thatll_Flat_Git_It_Vol_20.jpg +0 -0
  15. data/lib/public/images/alan_kay.jpg +0 -0
  16. data/lib/public/images/alan_perlis.jpg +0 -0
  17. data/lib/public/images/albert_einstein.jpg +0 -0
  18. data/lib/public/images/algorithm.png +0 -0
  19. data/lib/public/images/biuletyn-snall.jpg +0 -0
  20. data/lib/public/images/bop.jpg +0 -0
  21. data/lib/public/images/borenstein.jpg +0 -0
  22. data/lib/public/images/commits.png +0 -0
  23. data/lib/public/images/gitk-branches.png +0 -0
  24. data/lib/public/images/jkew.jpg +0 -0
  25. data/lib/public/images/jwz.gif +0 -0
  26. data/lib/public/images/knuth.jpg +0 -0
  27. data/lib/public/images/marcin_wolinski.jpg +0 -0
  28. data/lib/public/images/objects-example.png +0 -0
  29. data/lib/public/images/perlis.gif +0 -0
  30. data/lib/public/images/real_programmers.png +0 -0
  31. data/lib/public/images/richard_stallman.jpg +0 -0
  32. data/lib/public/images/sp.png +0 -0
  33. data/lib/public/images/sp.svg +117 -0
  34. data/lib/public/images/spowrotem.jpg +0 -0
  35. data/lib/public/images/staging_area.png +0 -0
  36. data/lib/public/images/the_thinker.jpg +0 -0
  37. data/lib/public/images/tparr.jpg +0 -0
  38. data/lib/public/images/wide-gitk.gif +0 -0
  39. data/lib/public/javascripts/sp.js +1 -0
  40. data/lib/public/stylesheets/fonts/Cyklop-Italic.otf +0 -0
  41. data/lib/public/stylesheets/icons/doc.png +0 -0
  42. data/lib/public/stylesheets/icons/email.png +0 -0
  43. data/lib/public/stylesheets/icons/external.png +0 -0
  44. data/lib/public/stylesheets/icons/feed.png +0 -0
  45. data/lib/public/stylesheets/icons/im.png +0 -0
  46. data/lib/public/stylesheets/icons/pdf.png +0 -0
  47. data/lib/public/stylesheets/icons/visited.png +0 -0
  48. data/lib/public/stylesheets/icons/xls.png +0 -0
  49. data/lib/public/stylesheets/ie.css +27 -0
  50. data/lib/public/stylesheets/print.css +30 -0
  51. data/lib/public/stylesheets/screen.css +249 -0
  52. data/lib/public/stylesheets/sp.css +194 -0
  53. data/lib/public/stylesheets/src/grid.png +0 -0
  54. data/lib/public/stylesheets/uv.css +121 -0
  55. data/lib/sp-tutorial.rb +78 -0
  56. data/lib/views/answers.rdiscount +7 -0
  57. data/lib/views/exercises.rdiscount +154 -0
  58. data/lib/views/favicon.ico.rdiscount +0 -0
  59. data/lib/views/git.rdiscount +558 -0
  60. data/lib/views/labs01.rdiscount +54 -0
  61. data/lib/views/labs02.rdiscount +32 -0
  62. data/lib/views/labs03.rdiscount +28 -0
  63. data/lib/views/labs04.rdiscount +41 -0
  64. data/lib/views/latex.rdiscount +498 -0
  65. data/lib/views/layout.rdiscount +41 -0
  66. data/lib/views/ll.rdiscount +78 -0
  67. data/lib/views/main.rdiscount +67 -0
  68. data/lib/views/scripts.rdiscount +618 -0
  69. data/lib/views/unix-commands.rdiscount +604 -0
  70. data/lib/views/unix-guru.rdiscount +696 -0
  71. data/sp-tutorial.gemspec +125 -0
  72. metadata +186 -0
File without changes
@@ -0,0 +1,558 @@
1
+ #### {% title "Git jest git" %}
2
+
3
+ # Git jest git
4
+
5
+ <blockquote>
6
+ {%= image_tag "/images/jwz.gif", :alt => "[Jamie Zawinski]" %}
7
+ <p>
8
+ Zawinski's Law: Every program attempts to expand until it can read
9
+ mail. Those programs which cannot so expand are replaced by ones
10
+ which can.
11
+ </p>
12
+ <p class="author">— <a href="http://www.jwz.org/">Jamie Zawinski</a></p>
13
+ </blockquote>
14
+
15
+ Do czego służy system *Git*? Odpowiedź znajdziemy na stronie domowej projektu
16
+ [Git - Fast Version Control System] [git home].
17
+
18
+ Obejrzenie wystąpienia autora Linuksa:
19
+ [Tech Talk: Linus Torvalds on git] [torvalds on git]
20
+ dla pracowników Google powinno wyjaśnić dlaczego powstał Git
21
+ i dlaczego Google więcej już nie poprosi LT o wygłoszenie referatu.
22
+
23
+ Randal L. Schwartz “Guru-On-Demand” jest autorem najlepszego
24
+ wprowadzenia do języka Perl jakie czytałem. Z jego
25
+ screencastu [Git] [schwartz on git] można dowiedzieć się
26
+ jak Git zmienił jego życie.
27
+
28
+ Tom Preston-Werner w [Git Przypowieści] [the-git-parable] napisał:
29
+ „Most people try to teach Git by demonstrating a few dozen commands
30
+ and then yelling “tadaaaaa.” I believe this method is flawed. Such
31
+ a treatment may leave you with the ability to use Git to perform
32
+ simple tasks, but the Git commands will still feel like magical
33
+ incantations.”
34
+
35
+ Przypowieść ta opisuje perypetie czeladnika tworzącego system
36
+ gitopodobny od podstaw.
37
+
38
+ Różne: S. Chacon, [Git in One Hour] [git-in-one-hour].
39
+
40
+
41
+ ## Konfiguracja
42
+
43
+ <blockquote>
44
+ <p>
45
+ Podchodzi informatyk do fortepianu i ogląda go wnikliwie:
46
+ — Hmm, tylko 84
47
+ klawisze, z czego 1/3 funkcyjnych, wszystkie nieopisane,
48
+ chociaż… shift naciskany nogą. Oryginalnie.
49
+ </p>
50
+ </blockquote>
51
+
52
+ Pracę z gitem zaczynamy od przedstawienia się:
53
+
54
+ git config -l
55
+ git config --global user.name "Wlodek Bzyl"
56
+ git config --global user.email "matwb@univ.gda.pl"
57
+
58
+ po czym natychmiast sprawdzamy, czy Git zrozumiał kim jesteśmy:
59
+
60
+ cat ~/.gitconfig
61
+
62
+ Łatwiej będzie nam porozumiewać się z Gitem, po dodaniu do pliku
63
+ konfiguracyjnego kilku skrótów:
64
+
65
+ git config --global alias.br branch -a
66
+ git config --global alias.co checkout
67
+ git config --global alias.ci commit
68
+ git config --global alias.df diff
69
+ git config --global alias.lg log -p
70
+ git config --global alias.st status
71
+
72
+ Ułatwimy sobie śledzenie zmian w kodzie jeśli je podkolorujemy:
73
+
74
+ git config --global color.branch auto
75
+ git config --global color.diff auto
76
+ git config --global color.status auto
77
+
78
+ Jeszcze trochę ręcznych robótek, bo czemu nie, w pliku konfiguracyjnym
79
+ i oto rezultat — mój plik *~/.gitconfig* w całej okazałości:
80
+
81
+ :::ini
82
+ [user]
83
+ email = matwb@univ.gda.pl
84
+ name = Wlodek Bzyl
85
+
86
+ [color]
87
+ branch = auto
88
+ diff = auto
89
+ status = auto
90
+
91
+ [color]
92
+ ui = true
93
+
94
+ [core]
95
+ whitespace=fix,-indent-with-non-tab,trailing-space,cr-at-eol
96
+
97
+ [alias]
98
+ br = branch -a
99
+ co = checkout
100
+ ci = commit
101
+ df = diff
102
+ lg = log -p
103
+ st = status
104
+
105
+ i po konfiguracji.
106
+
107
+ Wygodnie też jest mieć kilka aliasów w bashu.
108
+ Dopisujemy je do pliku *~/.bashrc*:
109
+
110
+ :::shell-unix-generic
111
+ alias gb='git branch -a'
112
+ alias gl='git log -p'
113
+ alias gt='git status'
114
+
115
+
116
+ <blockquote>
117
+ <h1>Zasłyszane</h1>
118
+ <p>
119
+ Q: Couldn't this be done using a Git repo?<br/>
120
+ A: What's that “Git” thing?
121
+ Diversion system is developed using “Mother Driven Development”.
122
+ With this system, you keep asking yourself:
123
+ <em>Would my mother understand this?</em>
124
+ </p>
125
+ <p>
126
+ Call it the poor man’s approach to usability.
127
+ </p>
128
+ </blockquote>
129
+
130
+
131
+ ## Podstawy
132
+
133
+ ### Zakładamy repozytorium
134
+
135
+ Pierwsze repozytorium, zgodnie ze starą uniksową tradycją
136
+ powinno mieć nazwę *hello-world*:
137
+
138
+ mkdir hello-world
139
+ cd hello-world
140
+ git init
141
+ touch .gitignore README.md Makefile hello.c
142
+ git add .
143
+ git commit -m "pierwsza wrzutka"
144
+
145
+ Każdy plik w systemie Git może mieć aż trzy życia:
146
+ jedno w „drzewie roboczym”, drugie w „indeks” i trzecie w „trunk”:
147
+
148
+ git diff # shows you the differences from index to working tree
149
+ git diff HEAD # shows you the differences from trunk to working tree
150
+ git diff --cached # shows you the differences from trunk to index
151
+
152
+ Do czego służy drugie życie opisał Ryan Tomayko na swoim blogu,
153
+ [The Thing About Git] [tomayko about git].
154
+
155
+
156
+ <blockquote cite="http://www.gitready.com/beginner/2009/01/18/the-staging-area.html">
157
+ {%= image_tag "/images/staging_area.png", :alt => "[working tree / index / trunk]" %}
158
+ </blockquote>
159
+
160
+ Na *indeks* mówimy też *staging area* (punkt etapowy, punkt tranzytowy),
161
+ *working tree* tłumaczymy na drzewo robocze (kopia robocza?),
162
+ a *trunk* to *trunk*.
163
+
164
+
165
+ ### Git na codzień
166
+
167
+ Zazwyczaj praca z repozytorium wygląda tak:
168
+
169
+ ... edycja, edycja ...
170
+ git status
171
+ git add [nazwy plików albo .]
172
+ git commit -m "jakiś wpis do loga"
173
+ ... edycja, edycja ...
174
+ git status
175
+ ... i tak w kółko ...
176
+
177
+
178
+ <blockquote>
179
+ <p>
180
+ Przychodzi administrator rano do pracy, siada do komputera, aby
181
+ zobaczyć co się działo w nocy i śpiewa: <em>Chcę oglądać twoje logi,
182
+ logi, logi, logi…</em>
183
+ </p>
184
+ </blockquote>
185
+
186
+
187
+ ### Przeglądanie logów i nie tylko
188
+
189
+ Użytecznymi programami są przeglądarki repozytoriów.
190
+ Na *Sigmie* jest zainstalowana przeglądarka *gitk*.
191
+
192
+ W logach zapisane są „commit messages”, z których łatwo się
193
+ wyczytać co zostało zrobione i przez kogo. Dlatego logi są często
194
+ przeglądane. Kilka przykładów:
195
+
196
+ :::shell-unix-generic
197
+ git log
198
+ git log -p
199
+ git log --grep 'important'
200
+ git log -Sword # search thru history
201
+ git log --pickaxe-regex -S'\bword\b' # with regexp
202
+ git log origin/master..HEAD
203
+
204
+ Repozytorium git składa się z czterech rodzajów obiektów:
205
+ **commit**, **tree**, **blob** i **tag**.
206
+ Powyższe polecenia z *log* służą tylko do przeglądania
207
+ obiektów typu *commit*.
208
+
209
+ {%= image_tag "/images/commits.png", :alt => "[git log]" %}
210
+
211
+ Źródło, S. Chacon, [Pro Git, What a Branch Is](http://progit.org/book/ch3-1.html).
212
+
213
+
214
+ Polecenie `git show` służy do wypisywania zawartości obiektów
215
+ dowolnego typu. Czasami używamy bardziej specjalizowanych
216
+ poleceń:
217
+
218
+ :::shell-unix-generic
219
+ git ls-tree SHA1 # obiekt tree
220
+ git show -s --pretty=raw SHA1 # obiekt commit
221
+ git cat-file tag v1.0 # obiekt tag
222
+
223
+ Obiekty są powiązane „wskaźnikami” SHA1. Tak to powiązanie możemy
224
+ sobie wyobrażać:
225
+
226
+ {%= image_tag "/images/objects-example.png", :alt => "[Powiązania między obiektami]" %}
227
+
228
+ Źródło, [Git Community Book](http://book.git-scm.com/1_the_git_object_model.html).
229
+
230
+
231
+ ### Undo różnych rzeczy
232
+
233
+ Zmieniamy **ostatni** wpis w logu:
234
+
235
+ git commit --amend
236
+
237
+ Unstaging staged plik:
238
+
239
+ git add .
240
+ git status
241
+ # On branch master
242
+ # Changes to be committed:
243
+ # (use "git reset HEAD <file>..." to unstage)
244
+ #
245
+ # modified: README.md
246
+
247
+ Wycofanie zmian w edytowanym pliku:
248
+
249
+ # Changed but not updated:
250
+ # (use "git add <file>..." to update what will be committed)
251
+ # (use "git checkout -- <file>..." to discard changes in working directory)
252
+ #
253
+ # modified: README.md
254
+
255
+
256
+ ## Branching
257
+
258
+ *Pytanie*: Czym jest gałąź? (odgałęzienie?)
259
+
260
+ *Odpowiedź*: A branch in Git is simply a lightweight movable pointer
261
+ to one of these commits.
262
+
263
+ Gałęzie Gita najlepiej rozrysował S. Chacon w swojej książce:
264
+ [Pro Git] [progit branches]
265
+
266
+
267
+ ### Tworzenie gałęzi w projekcie i ich scalanie
268
+
269
+ Przećwiczmy następujący scenariusz:
270
+
271
+ * Tworzymy serwis www z dowcipami.
272
+ * Tworzymy nową gałąź o nazwie *newidea* na nowy dowcip
273
+ i przenosimy się na nią.
274
+ * Zaczynamy pisać nowy dowcip.
275
+
276
+ W trakcie pracy nad dowcipem dostajemy wiadomość,
277
+ że strona główna jest zawirusowana.
278
+ Przerywamy pracę nad nowym dowcipem i zabieramy się
279
+ za szukanie wirusa.
280
+
281
+ <blockquote>
282
+ {%= image_tag "/images/spowrotem.jpg", :alt => "[z powrotem]" %}
283
+ </blockquote>
284
+
285
+ * Wracamy na główną gałąź.
286
+ * Tworzymy nową gałąź o nazwie *hotfix*,
287
+ gdzie będziemy robić poprawki.
288
+ * Po przetestowaniu poprawek,
289
+ scalamy gałąź *hotfix* z gałęzią główną.
290
+ * Przenosimy się z powrotem na gałąź *newidea*
291
+ gdzie kończymy pisać nowy dowcip.
292
+
293
+ A teraz konkrety. Serwis będzie dostępny z takiego URL:
294
+
295
+ http://sigma.inf.ug.edu.pl/~wbzyl/dowcipy/
296
+
297
+ Na początek serwis www będzie się składał z jednej strony:
298
+ *index.html*.
299
+
300
+ 1\. Zakładamy repozytorium:
301
+
302
+ mkdir ~/public_html/dowcipy/
303
+ cd ~/public_html/dowcipy/
304
+ git init
305
+ cat index.html
306
+ Jestem albańskim wirusem komputerowym, ale z uwagi
307
+ na słabe zaawansowanie informatyczne mojego kraju
308
+ nie mogę nic ci zrobić.
309
+ Proszę skasuj sobie jakiś plik i prześlij mnie dalej.
310
+ ...
311
+ git add index.html
312
+ git commit -m "pierwsza wrzutka"
313
+
314
+ 2\. Nowa gałąź:
315
+
316
+ git checkout -b newidea
317
+ cat >> index.html
318
+ Webmaster wypełnia podanie o dowód.
319
+ Data urodzenia: 31.11.1990
320
+ Wzrost: 190
321
+ ...
322
+
323
+ 3\. Dostajemy wiadomość…
324
+
325
+ git checkout master
326
+ git checkout -b hotfix
327
+
328
+ 4\. Szybko znajdujemy wirusa. Zawirusowany tekst zastępujemy
329
+ tekstem bez wirusa:
330
+
331
+ cat > index.html
332
+ Żona wysyła męża programistę do sklepu.
333
+ — Kup parówki, jak będą jajka, kup dziesięć.
334
+ Mąż w sklepie:
335
+ — Są jajka?
336
+ — Tak
337
+ — Poproszę dziesięć parówek.
338
+
339
+ 5\. Czytamy dowcip kolegom. Ponieważ teraz wydaje się,
340
+ że wszystko jest OK, wykonujemy:
341
+
342
+ git commit -m "usunięto wirusa"
343
+ git checkout master
344
+ git merge hotfix
345
+ git branch -d hotfix
346
+
347
+ 6\. Kończymy nowy dowcip:
348
+
349
+ git checkout newidea
350
+ cat >> index.html
351
+ Kolor oczu: #4040EE
352
+
353
+ Testujemy czy wszystko jest OK. Jeśli tak, to jak poprzednio
354
+ scalamy *master* z *newidea* i usuwamy *newidea*.
355
+
356
+
357
+ ### Remote branches
358
+
359
+ Dodajemy oryginalny projekt jako *remote*.
360
+
361
+ Forkuję projekt
362
+
363
+ http://github.com/technomancy/emacs-starter-kit
364
+
365
+ i tworzę klon sforkowanego projektu na swoim komputerze:
366
+
367
+ git clone git@github.com:wbzyl/emacs-starter-kit.git
368
+
369
+ Teraz dodaję do klona oryginalny projekt jako *remote* repozytorium:
370
+
371
+ git remote add technomancy git://github.com/technomancy/emacs-starter-kit.git
372
+
373
+ Po dodaniu gałęzi remote, wykonujemy polecenie:
374
+
375
+ git fetch technomancy
376
+
377
+ ściągając na gałąź *technomancy* najnowszą wersję projektu
378
+ z serwera *github.com*.
379
+
380
+ Sprawdzamy co zostało zrobione. Wykonujemy polecenie:
381
+
382
+ git remote
383
+ origin
384
+ technomancy
385
+
386
+ i widzimy że wszystko jest w porządku: mamy dwie gałęzie remote.
387
+
388
+ Polecenie:
389
+
390
+ git branch -a
391
+
392
+ daje nieco więcej informacji od poprzedniego polecenia:
393
+
394
+ * master
395
+ origin/HEAD
396
+ origin/master
397
+ technomancy/master
398
+ technomancy/personalizations
399
+
400
+
401
+ Po co to zrobiliśmy? Teraz możemy porównać nową wersję ze swoja i
402
+ scalić nową wersję ze swoim projektem.
403
+
404
+
405
+ ### Prostowanie historii, czyli rebasing
406
+
407
+ Zobacz też [The Basic Rebase] (http://progit.org/book/ch3-6.html)
408
+
409
+ Zakładamy repo:
410
+
411
+ mkdir test
412
+ cd test
413
+ cat > README.md
414
+ # Hello project
415
+ .. ctrl+d
416
+ git init
417
+ git add .
418
+ git commit -m "wrzutka: 1."
419
+ gitk
420
+
421
+ Nowy pomysł:
422
+
423
+ git checkout -b newidea
424
+ cat > README.md
425
+ # Hello world project
426
+ .. ctrl+d
427
+ git commit -m "wrzutka z gałęzi newidea: 1." -a
428
+ cat >> README.md
429
+ Kolekcja programów hello world.
430
+ .. ctrl+d
431
+ git commit -m "wrzutka z gałęzi newidea: 2." -a
432
+ gitk
433
+
434
+ Przechodzimy na główną gałąź:
435
+
436
+ git checkout master
437
+ cat >> README.md
438
+ ## Ruby
439
+ print "hello world"
440
+ .. ctrl+d
441
+ git commit -m "wrzutka: 2." -a
442
+ gitk
443
+
444
+ Przechodzimy na newidea:
445
+
446
+ git checkout newidea
447
+ git rebase master # rebase wykonujemy z gałęzi newidea
448
+ git checkout master
449
+ gitk
450
+
451
+ Wracamy na główną gałąź i usuwamy gałąź *newidea*:
452
+
453
+ git merge newidea # powinno być fast-forward
454
+ gitk
455
+ git branch -d newidea
456
+ gitk
457
+
458
+
459
+ ## Praca rozproszona z *Githubem*
460
+
461
+ Przykład: wspólna praca nad projektem *jBlog*.
462
+
463
+ Ala zakłada konto *as007* na serwerze *github.com*, a następnie
464
+ loguje się na swoje nowe konto.
465
+
466
+ Po zalogowaniu wchodzi na stronę *https://github.com/account*, gdzie
467
+ dodaje klucz publiczny swojego komputera do *SSH Public Keys*.
468
+ W ten sposób, Ala zapewnia sobie możliwość wykonywania *push*
469
+ ze swojego komputera na serwer *github.com*.
470
+
471
+ 1. Teraz wchodzi na na stronę z projektem
472
+ *http://github.com/wbzyl/jblog/*, gdzie klika w ikonkę *fork*.
473
+ 1. Po sforkowaniu projektu, wchodzi z powrotem na swoją stronę:
474
+ *http://github.com/as007/* i widzi, że projekt
475
+ *jblog* pojawił się na liście **jej** projektów.
476
+ 1. Po kliknięciu na link z nazwą *jblog* zostaje przekierowana
477
+ na stronę *http://github.com/as007/jblog*.
478
+ Na tej stronie jest link **Your Clone URL**:
479
+ *git@github.com:as007/jblog.git*.
480
+ 1. Używając tego URL-a, Ala klonuje sforkowane repozytorium na
481
+ swój komputer.
482
+
483
+ Teraz zaczyna robić się ciekawie.
484
+
485
+ 1. Ala dodaje nowy wpis do bloga, tworząc w katalogu *_posts*
486
+ sforkowanego repozytorium plik *2009-10-10-mercurial.markdown*. Plik
487
+ ten dodaje do repozytorium, wykonuje commit i push na
488
+ *github.com*.
489
+ 1. Teraz ze strony projektu: *http://github.com/as007/jblog*
490
+ klika w ikonkę *pull request*.
491
+
492
+ W ten sposób Ala wysłała do mnie *pull request*.
493
+ Ja po otrzymaniu *pull request* dodaję repozytorium Ali
494
+ jako *remote* do mojego repozytrorium *jblog*:
495
+
496
+ git add remote as007 git://github.com/as007/jblog.git
497
+
498
+ 1. Następnie ściągam remote repo: `git fetch as007`.
499
+ 1. Patrzę co zostało zrobione: `git diff as007/master`.
500
+ 1. Scalam oba projekty: `git merge as007/master`.
501
+ 1. Wykonuję commit i push.
502
+
503
+
504
+ ## Zalety *nagich* repozytoriów
505
+
506
+ Jak utworzyć nagie repozytorium?
507
+ Załóżmy, że w katalogu *~/tmp/* mamy repozytorium *photos*.
508
+ Po wykonaniu polecenia:
509
+
510
+ git clone --bare ~/tmp/photos ~/public_git/photos.git
511
+
512
+ Skąd takie określenie *nagi*. Wykonanie polecenia:
513
+
514
+ ls ~/public_git/photos.git
515
+
516
+ powinno to wyjaśnić.
517
+
518
+ Zaletą posiadania nagiego repozytorium jest możliwość pracy
519
+ rozproszonej, takiej jak z repozytoriami githuba.
520
+
521
+
522
+ <blockquote>
523
+ <p>
524
+ Wsiada informatyk do taksówki. Taksiarz pyta:<br/>
525
+ — Dokąd jedziemy?<br/>
526
+ — 127.0.0.1
527
+ </p>
528
+ </blockquote>
529
+
530
+
531
+ ## Tak klonujemy projekty z *Sigmy*
532
+
533
+ Korzystając z protokołu GIT:
534
+
535
+ git clone git://sigma.inf.ug.edu.pl/~wbzyl/test.git
536
+
537
+ Własne projekty klonujemy korzystając z SSH:
538
+
539
+ git clone ssh://sigma.inf.ug.edu.pl/~wbzyl/public_git/test.git
540
+
541
+ albo tak:
542
+
543
+ git clone wbzyl@sigma.inf.ug.edu.pl:public_git/test.git
544
+
545
+ To ostatnie polecenie nie mówi *explicite*, że ma być użyte ssh.
546
+
547
+
548
+
549
+ #### Linki
550
+
551
+ [git home]: http://git.or.cz "git home"
552
+ [the-git-parable]: http://tom.preston-werner.com/2009/05/19/the-git-parable.html "The Git Parable"
553
+ [torvalds on git]: http://www.youtube.com/watch?v=4XpnKHJAok8 "Tech Talk: Linus Torvalds on git"
554
+ [schwartz on git]: http://www.youtube.com/watch?v=8dhZ9BXQgc4 "Git"
555
+ [git-in-one-hour]: http://www.oreillynet.com/pub/e/1394 "Git in One Hour"
556
+ [progit branches]: http://progit.org/book/ch3-1.html "What a Branch Is"
557
+
558
+ [tomayko about git]: http://tomayko.com/writings/the-thing-about-git "The Thing About Git"