Más contenido relacionado
DWO 2010 - Mercurial
- 1. Mercurial
...i o systemach kontroli wersji
III Dni Wolnego Oprogramowania
Bielsko-Biała 2010
© Mikołaj Pastuszko & Michał Ptaszek
- 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. 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. 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. Co to jest rozproszony VCS?
Architektury systemów kontroli wersji
scentralizowane rozproszone
5
© Mikołaj Pastuszko & Michał Ptaszek 2010
- 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. 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. 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. 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. Do dzieła!
W tej scenie Michał podchodzi do laptopa
i zaczyna się prezentacja działania na żywo
10
© Mikołaj Pastuszko & Michał Ptaszek 2010
- 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
- 14. Przykład szkolny
Dodanie pliku
# hg add [plik]
14
© Mikołaj Pastuszko & Michał Ptaszek 2010
- 17. Przykład szkolny
Historia zmian
# hg log [plik]
17
© Mikołaj Pastuszko & Michał Ptaszek 2010
- 20. Przykład szkolny
Powrót do najnowszej wersji
# hg update
# hg update tip
tip – najnowsza z zapamiętanych zmian (niezależna od gałęzi)
20
© Mikołaj Pastuszko & Michał Ptaszek 2010
- 22. Rozpraszanie
W tej scenie repozytorium zostaje sklonowane
(rozproszone) na laptopa z prezentacją.
22
© Mikołaj Pastuszko & Michał Ptaszek 2010
- 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
- 29. Co to jest konflikt?
head – najnowsza wersja zmian w danej gałęzi
29
© Mikołaj Pastuszko & Michał Ptaszek 2010
- 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
- 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. 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. 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. 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. 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. Ź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