DWO 2010 - Mercurial

824 views

Published on

Mercurial introduction presented at Dni Wolnego Programowania 2010 in Bielsko-Biała, Poland

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
824
On SlideShare
0
From Embeds
0
Number of Embeds
154
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

DWO 2010 - Mercurial

  1. 1. Mercurial ...i o systemach kontroli wersjiIII Dni Wolnego Oprogramowania Bielsko-Biała 2010 © Mikołaj Pastuszko & Michał Ptaszek
  2. 2. Agenda Po co wersjonować?  Co to jest (rozproszony) system kontroli wersji?  Co to jest Mercurial? Jak tego użyć?  Rozpraszanie  O nie! Konflikt!  Gałęzie i etykiety Konfiguracja Porównanie z innymi VCS Mercurial w Internecie 2 © Mikołaj Pastuszko & Michał Ptaszek 2010
  3. 3. Po co wersjonować? Argh, nadpisałem sobie plik... Argh, Ctrl+Z nie sięga tak daleko jak chcę... plik_0.1, plik_0.2, plik_0.5, plik_1.1, plik_2.0... który to był?! A gdyby napisać to na 2 sposoby... Skopiuję katalog... Jak opublikować swoją pracę?... Jak pozwolić innym ją rozwijać?... Jak połączyć zmiany moje i kolegi?... 3 © Mikołaj Pastuszko & Michał Ptaszek 2010
  4. 4. Co to jest VCS? Version Control System → System Kontroli Wersji Polega na śledzeniu zmian  Zawartości plików (głównie pliki tekstowe, ale nie tylko)  Położenia plików  Metadanych Zmiany dokonywane przez wiele osób Obsługa konfliktów Możliwość tworzenia gałęzi, etykiet itd. 4 © Mikołaj Pastuszko & Michał Ptaszek 2010
  5. 5. Co to jest rozproszony VCS? Architektury systemów kontroli wersji  scentralizowane  rozproszone 5 © Mikołaj Pastuszko & Michał Ptaszek 2010
  6. 6. Co to jest rozproszony VCS? Distributed Version Control System Brak centralnego repozytorium → niezawodność! Użytkownicy używają repozytoriów lokalnych Większość operacji nie wymaga sieci → szybkość! Synchronizacja między repozytoriami w dowolnej chwili  pull  push 6 © Mikołaj Pastuszko & Michał Ptaszek 2010
  7. 7. Co to jest rozproszony VCS? Może wersjonować lokalną pracę  Nie wymaga tworzenia serwera Uczestnictwo w projekcie nie wymaga decyzji opiekuna  Praca na lokalnym repozytorium  Możliwość publikacji własnej gałęzi  Opiekun decyduje o scalaniu zmian (gałęzi) Może przyjąć architekturę scentralizowaną 7 © Mikołaj Pastuszko & Michał Ptaszek 2010
  8. 8. Co to jest Mercurial? Rozproszony System Kontroli Wersji ang. mercury – rtęć → Twórca: Matt Mackall Pierwsza wersja opublikowana 19 kwietnia 2005 Platformy  GNU/Linux MacOS X OpenSolaris Windows i inne Napisany w języku Python 8 © Mikołaj Pastuszko & Michał Ptaszek 2010
  9. 9. Co to jest Mercurial? Założenia  Wysoka wydajność  Skalowalność  Bogate możliwości operacji na gałęziach Bardzo prosty w nauce i korzystaniu Wiele możliwych przypadków użycia Rozszerzalny dzięki wtyczkom 9 © Mikołaj Pastuszko & Michał Ptaszek 2010
  10. 10. Do dzieła! W tej scenie Michał podchodzi do laptopai zaczyna się prezentacja działania na żywo 10 © Mikołaj Pastuszko & Michał Ptaszek 2010
  11. 11. Przykład szkolny Mam napisać wypracowanie do szkoły.Chcę mieć możliwość powrotu do poprzednich wersji. (na wypadek jakby pies zjadł plik) 11 © Mikołaj Pastuszko & Michał Ptaszek 2010
  12. 12. Przykład szkolnyTworzenie repozytorium # hg init 12 © Mikołaj Pastuszko & Michał Ptaszek 2010
  13. 13. Przykład szkolnyStatus repozytorium (plików) # hg status [plik] 13 © Mikołaj Pastuszko & Michał Ptaszek 2010
  14. 14. Przykład szkolny Dodanie pliku# hg add [plik] 14 © Mikołaj Pastuszko & Michał Ptaszek 2010
  15. 15. Przykład szkolnyZmiany treści plików# hg diff [plik] 15 © Mikołaj Pastuszko & Michał Ptaszek 2010
  16. 16. Przykład szkolnyZapamiętanie zmian# hg ci [plik]# hg commit [plik] 16 © Mikołaj Pastuszko & Michał Ptaszek 2010
  17. 17. Przykład szkolny Historia zmian# hg log [plik] 17 © Mikołaj Pastuszko & Michał Ptaszek 2010
  18. 18. Przykład szkolnyPrzenoszenie i kopiowanie plików # hg mv plik1 plik2 # hg cp plik1 plik2 18 © Mikołaj Pastuszko & Michał Ptaszek 2010
  19. 19. Przykład szkolnyDostęp do starszych wersji# hg update [wersja] 19 © Mikołaj Pastuszko & Michał Ptaszek 2010
  20. 20. Przykład szkolny Powrót do najnowszej wersji # hg update # hg update tiptip – najnowsza z zapamiętanych zmian (niezależna od gałęzi) 20 © Mikołaj Pastuszko & Michał Ptaszek 2010
  21. 21. CiekawostkaMercurial uratował tę prezentację przed krwiożerczym OpenOffice... 21 © Mikołaj Pastuszko & Michał Ptaszek 2010
  22. 22. RozpraszanieW tej scenie repozytorium zostaje sklonowane (rozproszone) na laptopa z prezentacją. 22 © Mikołaj Pastuszko & Michał Ptaszek 2010
  23. 23. Przykład szkolny rozproszonyWypracowanie, które piszę, chcę udostępnić koledze by sprawdził pod kątem błędów. (i dopisał kilka akapitów :) ) 23 © Mikołaj Pastuszko & Michał Ptaszek 2010
  24. 24. Przykład szkolny rozproszonyPublikacja repozytorium przez HTTP # hg serve 24 © Mikołaj Pastuszko & Michał Ptaszek 2010
  25. 25. Przykład szkolny rozproszony Klonowanie repozytorium # hg clone źródło [cel]źródło → (http, https, ssh, lokalny katalog) 25 © Mikołaj Pastuszko & Michał Ptaszek 2010
  26. 26. Przykład szkolny rozproszony Pobranie zmian z zewnątrz # hg pull [źródło] 26 © Mikołaj Pastuszko & Michał Ptaszek 2010
  27. 27. Przykład szkolny rozproszony Wysłanie zmian na zewnątrz # hg push [cel] 27 © Mikołaj Pastuszko & Michał Ptaszek 2010
  28. 28. O nie! Konflikt! 28 © Mikołaj Pastuszko & Michał Ptaszek 2010
  29. 29. Co to jest konflikt?head – najnowsza wersja zmian w danej gałęzi 29 © Mikołaj Pastuszko & Michał Ptaszek 2010
  30. 30. Przykład szkolny bezkonfliktowy Wyświetlenie aktualnych wersji head # hg heads 30 © Mikołaj Pastuszko & Michał Ptaszek 2010
  31. 31. Przykład szkolny bezkonfliktowy Wyświetlenie wersji tip # hg tip 31 © Mikołaj Pastuszko & Michał Ptaszek 2010
  32. 32. Jak to połączyć?merge – łączenie wersji head 32 © Mikołaj Pastuszko & Michał Ptaszek 2010
  33. 33. Przykład szkolny bezkonfliktowy Połączenie wersji head # hg merge [wersja] 33 © Mikołaj Pastuszko & Michał Ptaszek 2010
  34. 34. Konflikt kontratakuje!W tej scenie Michał i Mikołaj niezależnie edytują ten sam plik... 34 © Mikołaj Pastuszko & Michał Ptaszek 2010
  35. 35. Przykład szkolny bezkonfliktowy Wyświetlenie listy konfliktów # hg resolve --list [plik] 35 © Mikołaj Pastuszko & Michał Ptaszek 2010
  36. 36. Przykład szkolny bezkonfliktowyOznaczenie konfliktu jako rozwiązanego # hg resolve --mark [plik] 36 © Mikołaj Pastuszko & Michał Ptaszek 2010
  37. 37. Gałęzie Anonimowe  Nowa wersja head zostaje utworzona implicite (nieoczekiwanie)  Raczej jako skutki uboczne innych operacji  Stosunkowo krótki czas życia (zakończony przez merge) Nazwane  Nowa wersja head zostaje utworzona explicite (z zamierzeniem)  Tworzenie jest celowe (np. praca nad inną funkcjonalnością)  Stosunkowo długi czas życia (niekoniecznie kończony przez merge)  Mają nazwy 37 © Mikołaj Pastuszko & Michał Ptaszek 2010
  38. 38. Przykład szkolny rozgałęziony Utworzenie nazwanej gałęzi # hg branch nazwa 38 © Mikołaj Pastuszko & Michał Ptaszek 2010
  39. 39. Przykład szkolny rozgałęziony Wyświetlenie nazwanych gałęzi # hg branches 39 © Mikołaj Pastuszko & Michał Ptaszek 2010
  40. 40. Przykład szkolny rozgałęziony Przejście do nazwanej gałęzi # hg update nazwa 40 © Mikołaj Pastuszko & Michał Ptaszek 2010
  41. 41. EtykietyEtykieta (tag) - nazwa nadawana konkretnej wersji 41 © Mikołaj Pastuszko & Michał Ptaszek 2010
  42. 42. Przykład szkolny etykietowany Oznaczenie wersji etykietą # hg tag nazwa 42 © Mikołaj Pastuszko & Michał Ptaszek 2010
  43. 43. Przykład szkolny etykietowany Wyświetlenie etykiet # hg tags 43 © Mikołaj Pastuszko & Michał Ptaszek 2010
  44. 44. Przykład szkolny etykietowanyPrzejście do wersji o danej etykiecie # hg update nazwa 44 © Mikołaj Pastuszko & Michał Ptaszek 2010
  45. 45. Konfiguracja - hgrc Per system  /etc/mercurial/hgrc  np. wtyczki, program diff itp. Per użytkownik Kolejność interpretowania  $HOME/.hgrc  np. nazwa użytkownika Per repozytorium  <repo>/.hg/hgrc  np. domyślny adres repozytorium do push i pull 45 © Mikołaj Pastuszko & Michał Ptaszek 2010
  46. 46. Konfiguracja Ignorowanie wersjonowania plików  <repo>/.hgignore  Format ścieżek: – glob → shell style – regexp → wyrażenie regularne  Może być (i często jest) wersjonowany Etykiety (tags)  <repo>/.hgtags  Lista numerów wersji i ich etykiet 46 © Mikołaj Pastuszko & Michał Ptaszek 2010
  47. 47. Mercurial vs SVN Architektura: rozproszona ↔ scentralizowana Praca lokalna: możliwa i łatwa ↔ niemożliwa Relokacja repozytorium: łatwa (klonowanie) ↔ pracochłonna Gałęzie (czas życia): przejrzysty ↔ śledzenie trudniejsze Zapamiętywanie zmian: szybkie ↔ wymaga sieci Konflikty: mogą być większe ↔ małe o ile częsty zapis Puste katalogi: brak obsługi ↔ obsługiwane 47 © Mikołaj Pastuszko & Michał Ptaszek 2010
  48. 48. Mercurial vs Git Obsługa i konfiguracja: prosta ↔ trudniejsza Elastyczność: przyzwoita ↔ ogromna Porządkowanie rep.: niewymagane ↔ wymagane Historia repozytorium: stała i rosnąca ↔ możliwość zmian Merge: 2 rodziców ↔ dowolna ilość rodziców Język implementacji: Python ↔ C → http://gitvsmercurial.com/ ← 48 © Mikołaj Pastuszko & Michał Ptaszek 2010
  49. 49. Hosting repozytoriów Mercuriala Bitbucket → http://bitbucket.org/ Google Code → http://code.google.com/ SourceForge → http://sourceforge.net/ Assembla → http://www.assembla.com/ Codebase → http://www.codebasehq.com/ GNU Savannah → http://savannah.gnu.org/ Alioth (Debian) → http://alioth.debian.org/ 49 © Mikołaj Pastuszko & Michał Ptaszek 2010
  50. 50. Źródła http://mercurial.selenic.com/ Wikipedia → http://en.wikipedia.org/wiki/Mercurial http://versioncontrolblog.com/ http://versioncontrolblog.com/comparison/ http://koichitamura.blogspot.com/2008/06/mercurial-vs-subversion.html http://code.google.com/p/support/wiki/DVCSAnalysis → http://gitvsmercurial.com/ ← 50 © Mikołaj Pastuszko & Michał Ptaszek 2010
  51. 51. DziękujemyPytania? 51 © Mikołaj Pastuszko & Michał Ptaszek 2010

×