DWO 2010 - Mercurial
-
Upload
mikolaj-pastuszko -
Category
Technology
-
view
620 -
download
0
description
Transcript of DWO 2010 - Mercurial
MercurialMercurial
...i o systemach kontroli wersji...i o systemach kontroli wersji
III Dni Wolnego OprogramowaniaIII Dni Wolnego Oprogramowania
Bielsko-Biała Bielsko-Biała 20102010
© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
22
AgendaAgenda
Po co wersjonować?Po co wersjonować? Co to jest (rozproszony) system kontroli wersji?Co to jest (rozproszony) system kontroli wersji? Co to jest Mercurial?Co to jest Mercurial?
Jak tego użyć?Jak tego użyć? RozpraszanieRozpraszanie O nie! Konflikt!O nie! Konflikt! Gałęzie i etykietyGałęzie i etykiety
KonfiguracjaKonfiguracja
Porównanie z innymi VCSPorównanie z innymi VCS
Mercurial w InternecieMercurial w Internecie
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
33
Po co wersjonować?Po co wersjonować?
Argh, nadpisałem sobie plik...Argh, nadpisałem sobie plik...
Argh, Ctrl+Z nie sięga tak daleko jak chcę...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...plik_0.1, plik_0.2, plik_0.5, plik_1.1, plik_2.0... który to był?! który to był?!
A gdyby napisać to na 2 sposoby... A gdyby napisać to na 2 sposoby... Skopiuję katalog...Skopiuję katalog...
Jak opublikować swoją pracę?...Jak opublikować swoją pracę?...
Jak pozwolić innym ją rozwijać?...Jak pozwolić innym ją rozwijać?...
Jak połączyć zmiany moje i kolegi?...Jak połączyć zmiany moje i kolegi?...
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
44
Co to jest VCS?Co to jest VCS?
VVersion ersion CControl ontrol SSystem → System Kontroli Wersjiystem → System Kontroli Wersji
Polega na Polega na śledzeniu zmianśledzeniu zmian Zawartości plików Zawartości plików (głównie pliki tekstowe, ale nie tylko)(głównie pliki tekstowe, ale nie tylko)
Położenia plikówPołożenia plików MetadanychMetadanych
Zmiany dokonywane przez Zmiany dokonywane przez wiele osóbwiele osób
Obsługa konfliktówObsługa konfliktów
Możliwość tworzenia gałęzi, etykiet itd.Możliwość tworzenia gałęzi, etykiet itd.
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
55
Co to jest rozproszony VCS?Co to jest rozproszony VCS?
Architektury Architektury ssystemów kontroli wersjiystemów kontroli wersji scentralizowanescentralizowane rozproszonerozproszone
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
66
Co to jest rozproszony VCS?Co to jest rozproszony VCS?
DDistributedistributed V Version ersion CControl ontrol SSystemystem
Brak centralnego repozytorium → Brak centralnego repozytorium → niezawodność!niezawodność!
Użytkownicy używają repozytoriów Użytkownicy używają repozytoriów lokalnychlokalnych
Większość operacji Większość operacji nie wymaga sieci nie wymaga sieci → → szybkość!szybkość!
SynchronizacjaSynchronizacja między repozytoriami w między repozytoriami w dowolnej chwilidowolnej chwili pullpull pushpush
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
77
Co to jest rozproszony VCS?Co to jest rozproszony VCS?
Może wersjonować Może wersjonować lokalną pracęlokalną pracę Nie wymagaNie wymaga tworzenia serwera tworzenia serwera
Uczestnictwo w projekcie nie wymaga decyzji opiekunaUczestnictwo w projekcie nie wymaga decyzji opiekuna Praca na Praca na lokalnym lokalnym repozytoriumrepozytorium Możliwość publikacji Możliwość publikacji własnej gałęziwłasnej gałęzi Opiekun decyduje o Opiekun decyduje o scalaniuscalaniu zmian (gałęzi)zmian (gałęzi)
Może przyjąć architekturę scentralizowanąMoże przyjąć architekturę scentralizowaną
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
88
Co to jest Mercurial?Co to jest Mercurial?
Rozproszony System Kontroli WersjiRozproszony System Kontroli Wersji
ang. mercury – rtęć ang. mercury – rtęć →→
Twórca: Matt MackallTwórca: Matt Mackall
Pierwsza wersja opublikowana Pierwsza wersja opublikowana 19 kwietnia 200519 kwietnia 2005
PlatformyPlatformy GNU/LinuxGNU/Linux MacOS XMacOS X OpenSolarisOpenSolaris WindowsWindows i innei inne
Napisany w języku Napisany w języku PythonPython
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
99
Co to jest Mercurial?Co to jest Mercurial?
ZałożeniaZałożenia Wysoka Wysoka wydajnośćwydajność SkalowalnośćSkalowalność Bogate możliwości Bogate możliwości operacji na gałęziachoperacji na gałęziach
Bardzo Bardzo prostyprosty w nauce i korzystaniu w nauce i korzystaniu
WieleWiele możliwych możliwych przypadków użyciaprzypadków użycia
RozszerzalnyRozszerzalny dzięki wtyczkom dzięki wtyczkom
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
1010
Do dzieła!Do dzieła!
W tej scenie Michał podchodzi do laptopaW tej scenie Michał podchodzi do laptopai zaczyna się prezentacja działania na żywoi zaczyna się prezentacja działania na żywoW tej scenie Michał podchodzi do laptopaW tej scenie Michał podchodzi do laptopa
i zaczyna się prezentacja działania na żywoi zaczyna się prezentacja działania na żywo
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
1111
Przykład szkolnyPrzykład szkolny
Mam napisać wypracowanie do szkoły.Mam napisać wypracowanie do szkoły.Chcę mieć możliwość powrotu do poprzednich wersji.Chcę mieć możliwość powrotu do poprzednich wersji.
(na wypadek jakby pies zjadł plik)(na wypadek jakby pies zjadł plik)
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
1212
Przykład szkolnyPrzykład szkolny
Tworzenie Tworzenie reporepozytoriumzytorium
# hg init# hg init
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
1313
Przykład szkolnyPrzykład szkolny
Status Status reporepozytorium (plików)zytorium (plików)
# hg st# hg status [atus [plikplik]]
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
1414
Przykład szkolnyPrzykład szkolny
Dodanie plikuDodanie pliku
# hg add # hg add [[plikplik]]
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
1515
Przykład szkolnyPrzykład szkolny
Zmiany treści plikówZmiany treści plików
# hg d# hg diffiff [ [plikplik]]
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
1616
Przykład szkolnyPrzykład szkolny
Zapamiętanie zmianZapamiętanie zmian
# hg ci # hg ci [[plikplik]]
# hg commit [# hg commit [plikplik]]
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
1717
Przykład szkolnyPrzykład szkolny
Historia zmianHistoria zmian
# hg log # hg log [[plikplik]]
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
1818
Przykład szkolnyPrzykład szkolny
Przenoszenie i kopiowanie plikówPrzenoszenie i kopiowanie plików
# hg mv # hg mv plik1 plik2plik1 plik2
# hg cp # hg cp plik1 plik2plik1 plik2
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
1919
Przykład szkolnyPrzykład szkolny
Dostęp do starszych wersjiDostęp do starszych wersji
# hg up# hg updatedate [[wersjawersja]]
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
2020
Przykład szkolnyPrzykład szkolny
Powrót do najnowszej wersjiPowrót do najnowszej wersji
# hg up# hg updatedate
# hg up# hg update date tiptip
tiptip –– najnowsza z zapamiętanych zmian najnowsza z zapamiętanych zmian (niezależna od gałęzi)(niezależna od gałęzi)
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
2121
CiekawostkaCiekawostka
Mercurial uratował tę prezentację przed Mercurial uratował tę prezentację przed krwiożerczym OpenOffice...krwiożerczym OpenOffice...
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
2222
RozpraszanieRozpraszanie
W tej scenie repozytorium zostaje sklonowane W tej scenie repozytorium zostaje sklonowane (rozproszone) na laptopa z prezentacją.(rozproszone) na laptopa z prezentacją.
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
2323
Przykład szkolny rozproszonyPrzykład szkolny rozproszony
Wypracowanie, które piszę, chcę udostępnić koledze by Wypracowanie, które piszę, chcę udostępnić koledze by sprawdził pod kątem błędów.sprawdził pod kątem błędów.(i dopisał kilka akapitów :) )(i dopisał kilka akapitów :) )
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
2424
Przykład szkolny rozproszonyPrzykład szkolny rozproszony
Publikacja repozytorium przez HTTPPublikacja repozytorium przez HTTP
# hg serve# hg serve
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
2525
Przykład szkolny rozproszonyPrzykład szkolny rozproszony
Klonowanie repozytoriumKlonowanie repozytorium
# hg clone # hg clone źródło źródło [[celcel]]
źródło → źródło → (http, https, ssh, (http, https, ssh, lokalny kataloglokalny katalog))
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
2626
Przykład szkolny rozproszonyPrzykład szkolny rozproszony
Pobranie zmian z zewnątrzPobranie zmian z zewnątrz
# hg pull # hg pull [[źródłoźródło]]
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
2727
Przykład szkolny rozproszonyPrzykład szkolny rozproszony
Wysłanie zmian na zewnątrzWysłanie zmian na zewnątrz
# hg push # hg push [[celcel]]
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
2828
O nie! Konflikt!O nie! Konflikt!
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
2929
Co to jest konflikt?Co to jest konflikt?
headhead – najnowsza wersja zmian w danej – najnowsza wersja zmian w danej gałęzigałęzi
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
3030
Przykład szkolny bezkonfliktowyPrzykład szkolny bezkonfliktowy
Wyświetlenie aktualnych wersji headWyświetlenie aktualnych wersji head
# hg heads# hg heads
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
3131
Przykład szkolny bezkonfliktowyPrzykład szkolny bezkonfliktowy
Wyświetlenie wersji Wyświetlenie wersji tiptip
# hg tip# hg tip
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
3232
Jak to połączyć?Jak to połączyć?
mergemerge – łączenie wersji – łączenie wersji headhead
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
3333
Przykład szkolny bezkonfliktowyPrzykład szkolny bezkonfliktowy
Połączenie wersji Połączenie wersji headhead
# hg merge # hg merge [[wersjawersja]]
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
3434
Konflikt kontratakuje!Konflikt kontratakuje!
W tej scenie Michał i Mikołaj niezależnieW tej scenie Michał i Mikołaj niezależnieedytują ten sam plik...edytują ten sam plik...
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
3535
Przykład szkolny bezkonfliktowyPrzykład szkolny bezkonfliktowy
Wyświetlenie listy konfliktówWyświetlenie listy konfliktów
# hg resolve --list # hg resolve --list [[plikplik]]
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
3636
Przykład szkolny bezkonfliktowyPrzykład szkolny bezkonfliktowy
Oznaczenie konfliktu jako rozwiązanegoOznaczenie konfliktu jako rozwiązanego
# hg resolve --mark # hg resolve --mark [[plikplik]]
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
3737
GałęzieGałęzie
AnonimoweAnonimowe Nowa wersja Nowa wersja headhead zostaje utworzona zostaje utworzona impliciteimplicite (nieoczekiwanie) (nieoczekiwanie) Raczej jako Raczej jako skutki uboczneskutki uboczne innych operacji innych operacji Stosunkowo Stosunkowo krótki czas życiakrótki czas życia (zakończony przez (zakończony przez mergemerge))
NazwaneNazwane Nowa wersja Nowa wersja headhead zostaje utworzona zostaje utworzona expliciteexplicite (z zamierzeniem) (z zamierzeniem) Tworzenie jest Tworzenie jest celowe celowe (np. praca nad inną funkcjonalnością)(np. praca nad inną funkcjonalnością) Stosunkowo Stosunkowo długi czas życiadługi czas życia (niekoniecznie kończony przez (niekoniecznie kończony przez mergemerge)) Mają Mają nazwynazwy
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
3838
Przykład szkolny rozgałęzionyPrzykład szkolny rozgałęziony
Utworzenie nazwanej gałęziUtworzenie nazwanej gałęzi
# hg branch # hg branch nazwanazwa
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
3939
Przykład szkolny rozgałęzionyPrzykład szkolny rozgałęziony
Wyświetlenie nazwanych gałęziWyświetlenie nazwanych gałęzi
# hg branches# hg branches
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
4040
Przykład szkolny rozgałęzionyPrzykład szkolny rozgałęziony
Przejście do nazwanej gałęziPrzejście do nazwanej gałęzi
# hg up# hg update date nazwanazwa
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
4141
EtykietyEtykiety
EtykietaEtykieta ( (tagtag) - ) - nazwa nazwa nadawana nadawana konkretnej wersjikonkretnej wersji
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
4242
Przykład szkolny etykietowanyPrzykład szkolny etykietowany
Oznaczenie wersji etykietąOznaczenie wersji etykietą
# hg tag # hg tag nazwanazwa
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
4343
Przykład szkolny etykietowanyPrzykład szkolny etykietowany
Wyświetlenie etykietWyświetlenie etykiet
# hg tags# hg tags
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
4444
Przykład szkolny etykietowanyPrzykład szkolny etykietowany
Przejście do wersji o danej etykieciePrzejście do wersji o danej etykiecie
# hg up# hg update date nazwanazwa
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
4545
Konfiguracja - Konfiguracja - hgrchgrc
Per Per systemsystem /etc/mercurial/hgrc/etc/mercurial/hgrc
np. wtyczki, program np. wtyczki, program diff diff itp.itp.
Per Per użytkownikużytkownik $HOME/.hgrc$HOME/.hgrc
np. nazwa użytkownikanp. nazwa użytkownika
Per Per repozytoriumrepozytorium <repo>/.hg/<repo>/.hg/hgrchgrc
np. domyślny adres repozytorium do np. domyślny adres repozytorium do pushpush i i pullpull
Kolejność interpretowaniaKolejność interpretowania
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
4646
KonfiguracjaKonfiguracja
Ignorowanie wersjonowania plikówIgnorowanie wersjonowania plików <repo>/.hgignore<repo>/.hgignore
Format ścieżek:Format ścieżek:
– glob → shell styleglob → shell style– regexp → wyrażenie regularneregexp → wyrażenie regularne
Może być (i często jest) Może być (i często jest) wersjonowanywersjonowany
Etykiety (Etykiety (tagstags)) <repo>/.hgtags<repo>/.hgtags
Lista numerów wersji i ich etykietLista numerów wersji i ich etykiet
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
4747
Mercurial vs SVNMercurial vs SVN
Architektura:Architektura: rozproszonarozproszona ↔↔ scentralizowanascentralizowana
Praca lokalna:Praca lokalna: możliwa i łatwamożliwa i łatwa ↔↔ niemożliwaniemożliwa
Relokacja repozytorium:Relokacja repozytorium: łatwa (klonowanie)łatwa (klonowanie) ↔↔ pracochłonnapracochłonna
Gałęzie (czas życia):Gałęzie (czas życia): przejrzystyprzejrzysty ↔↔ śledzenie trudniejsześledzenie trudniejsze
Zapamiętywanie zmian:Zapamiętywanie zmian: szybkieszybkie ↔↔ wymaga sieciwymaga sieci
Konflikty:Konflikty: mogą być większemogą być większe ↔↔ małe o ile częsty zapismałe o ile częsty zapis
Puste katalogi:Puste katalogi: brak obsługibrak obsługi ↔↔ obsługiwaneobsługiwane
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
4848
Mercurial vs GitMercurial vs Git
Obsługa i konfiguracja:Obsługa i konfiguracja: prostaprosta ↔↔ trudniejszatrudniejsza
Elastyczność:Elastyczność: przyzwoitaprzyzwoita ↔↔ ogromnaogromna
Porządkowanie rep.:Porządkowanie rep.: niewymaganeniewymagane ↔↔ wymaganewymagane
Historia repozytorium:Historia repozytorium: stała i rosnącastała i rosnąca ↔↔ możliwość zmianmożliwość zmian
Merge:Merge: 2 rodziców2 rodziców ↔↔ dowolnadowolna ilość ilość rodzicówrodziców
Język implementacji:Język implementacji: PythonPython ↔↔ CC
→ → http://gitvsmercurial.com/http://gitvsmercurial.com/ ←←
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
4949
Hosting repozytoriów MercurialaHosting repozytoriów Mercuriala
BitbucketBitbucket → → http://bitbucket.org/http://bitbucket.org/
Google CodeGoogle Code → → http://code.google.com/http://code.google.com/
SourceForgeSourceForge → → http://sourceforge.net/http://sourceforge.net/
AssemblaAssembla → → http://www.assembla.com/http://www.assembla.com/
CodebaseCodebase → → http://www.codebasehq.com/http://www.codebasehq.com/
GNU SavannahGNU Savannah → → http://savannah.gnu.org/http://savannah.gnu.org/
Alioth (Debian)Alioth (Debian) → → http://alioth.debian.org/http://alioth.debian.org/
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
5050
ŹródłaŹródła
http://mercurial.selenic.com/http://mercurial.selenic.com/
Wikipedia → Wikipedia → http://en.wikipedia.org/wiki/Mercurialhttp://en.wikipedia.org/wiki/Mercurial
http://versioncontrolblog.com/http://versioncontrolblog.com/
http://versioncontrolblog.com/comparison/http://versioncontrolblog.com/comparison/
http://koichitamura.blogspot.com/2008/06/mercurial-vs-subversion.htmlhttp://koichitamura.blogspot.com/2008/06/mercurial-vs-subversion.html
http://code.google.com/p/support/wiki/DVCSAnalysishttp://code.google.com/p/support/wiki/DVCSAnalysis
→ → http://gitvsmercurial.com/http://gitvsmercurial.com/ ←←
20102010© Mikołaj Pastuszko & Michał Ptaszek© Mikołaj Pastuszko & Michał Ptaszek
5151
DziękujemyDziękujemy
Pytania?Pytania?