sp-tutorial 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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"