Systemy kontroli wersji Bazaar i Mercurial

33
Start Podstawowe komendy Bazaar Mercurial Linki Systemy kontroli wersji Bazaar i Mercurial Michal Bugno Krzysztof Goj 18 kwietnia 2008, Akademia Górniczo-Hutnicza Michal Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

description

Prezentacja Michała Bugno i Krzysztofa Goja. Trzecie spotkanie Pykonika (http://pykonik.org) [10.04.2008].

Transcript of Systemy kontroli wersji Bazaar i Mercurial

Page 1: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

Systemy kontroli wersji Bazaar i Mercurial

Michał Bugno Krzysztof Goj

18 kwietnia 2008, Akademia Górniczo-Hutnicza

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 2: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

VCSTrochę historiiCo to jest DVCS?ZaletyWadyInstalacja

VCS

VCS czyli Version Control System pozwala na

przetrzymywanie historii zmian w plikach

powrót do ewentualnych poprzednich wersji pliku

równoczesną pracę kilku osób przy projekcie

późniejsze rozwiązywanie ewentualnych konfliktów (jeśli tensam plik edytowała więcej niż jedna osoba)

tworzenie gałęzi, czyli odłączanie się w pewnym momencie odgłównego projektu

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 3: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

VCSTrochę historiiCo to jest DVCS?ZaletyWadyInstalacja

Narzędzia

VCS wyposażony jest w zestaw przydatnych narzędzi, któreułatwiają pracę:

log – wyświetla listę rewizji wraz z ewentualnymikomentarzami do rewizji

diff – pozwala na wyświetlenie różnic między ostatniąrewizją a naszymi aktualnymi zmianami

revert – cofa aktualne zmiany

blame – najciekawsze :) pozwala na podgląd, kto zmieniłktórą linię w pliku

praise – j.w. ale w tym pozytywnym kontekście :)

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 4: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

VCSTrochę historiiCo to jest DVCS?ZaletyWadyInstalacja

CVS – Concurrent Versions System

stworzony w latach .80

brak atomowych commitów!

brak suportu dla przenoszenia plików/katalogów

obsługiwał już branching

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 5: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

VCSTrochę historiiCo to jest DVCS?ZaletyWadyInstalacja

SVN - Subversion

stosunkowo młody – 2000 rok

tworzony na CVS potem przeszedł na siebie

cel – kompatybilność z CVS

atomowość

przesyłane różnice a nie całe pliki

properties: executable, ignore, mime-type

popularny

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 6: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

VCSTrochę historiiCo to jest DVCS?ZaletyWadyInstalacja

D czyli Distributed

bardzo młode projekty – Bazaar, Mercurial, Git 2005 r.

inna ideologia – nie ma centralnego repozytorium

wprowadzają dużo usprawnień względem SVN

troszkę bardziej skomplikowane

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 7: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

VCSTrochę historiiCo to jest DVCS?ZaletyWadyInstalacja

Co to jest rozproszony system kontroli wersji?

brak centralnego serwera

popularne akcje jak commit, log są lokalne

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 8: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

VCSTrochę historiiCo to jest DVCS?ZaletyWadyInstalacja

Zalety

niezależność od dostępności serwera(brak internetu != FAIL)

bezpieczeństwo - każda gałąź to osobny projekt wraz zlogami, historią, itp itd.

łatwiejsze dodawanie dużej funkcjonalności do projektuwymagającej dłuższej pracy bez aktualizacji

lepsza współpraca ludzi poza projektem, którzy chcielibydodać coś do projektu

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 9: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

VCSTrochę historiiCo to jest DVCS?ZaletyWadyInstalacja

Wady

dojrzałość – SVN jest już dobrze otestowany przezużytkowników

przetrzymywanie całej historii zmian – zajętość miejsca

stopień skomplikowania – trochę więcej komend, inna idea

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 10: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

VCSTrochę historiiCo to jest DVCS?ZaletyWadyInstalacja

Instalacja

Instalacja jest na wszystkich systemach prosta, szybkai bezbolesna.

wszędzie: źródła

GNU/Linux: paczki

Windows: instalator

MacOS X: MacPorts, paczki (Mercurial)

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 11: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

initaddignorelog i statusdiffrevertbranch/cloneserve

init – rozpoczęcie wersjonowania katalogu

dwa sposoby

Bazaarpykonik bzr init repopykonik ls

repo

pykonik cd reporepo ls -A

.bzr

Mercurialrepo hg initrepo ls -A

.hg

można zamienić bzr ↔ hg

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 12: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

initaddignorelog i statusdiffrevertbranch/cloneserve

add – dodanie plików

repo mkdir test otherrepo touch a1 a2 test/a{3,4} other/a5

Bazaarrepo bzr add

added a1added a2added otheradded testadded other/a5added test/a3added test/a4

Mercurialrepo hg add

adding a1adding a2adding otheradding testadding other/a5adding test/a3adding test/a4

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 13: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

initaddignorelog i statusdiffrevertbranch/cloneserve

add – dodanie plików

repo mkdir -p dir/subdirrepo touch file dir/subdir/file

Bazaarrepo bzr add file dir

added fileadded diradded dir/subdiradded dir/subdir/file

Mercurialrepo hg add file dir

adding dir/subdir/file

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 14: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

initaddignorelog i statusdiffrevertbranch/cloneserve

ignore – ignoruj pliki

Bazaarrepo bzr ignore “*.o”repo bzr ignore “RE:d.pa”repo cat .bzrignore

*.oRE:d.pa

˜/.bazaar/ignore

Mercurialrepo vim .hgignorerepo cat .hgignore

syntax: glob*.osyntax: regexpd.pa

per-user, per-user*project (hgrc)

[ui]ignore = ścieżka do pliku

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 15: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

initaddignorelog i statusdiffrevertbranch/cloneserve

status – stan kopii roboczej

repo echo “new content” >> a1repo touch a3

Bazaarrepo bzr rm a2

deleted a2

repo bzr statusremoved:a2modified:a1unknown:a3

Mercurialrepo hg rm –after

removing a2

repo hg statusM a1R a2? a3

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 16: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

initaddignorelog i statusdiffrevertbranch/cloneserve

diff

Bazaarrepo hg diff

diff -r 19ade018a43ea1--- a/a1 Thu Apr 1014:34:08 2008 +0200+++ b/a1 Thu Apr 1014:34:30 2008 +0200@@ -0,0 +1,1 @@+new content

Mercurialrepo bzr diff

=== modified file ’a1’--- a1 2008-04-1012:33:42 +0000+++ a1 2008-04-1012:34:30 +0000@@ -0,0 +1,1 @@+new content

=== removed file ’a2’=== removed file’file’Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 17: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

initaddignorelog i statusdiffrevertbranch/cloneserve

revert – wycofaj zmiany

Bazaarrepo echo stuff >> a1repo bzr rm a2 filerepo bzr revert

+N a2+N fileM a1

repo ls a1*a1 a1.~1~

Mercurialrepo echo stuff >> a1repo hg rm a2 filerepo hg revert

reverting a1undeleting a2reverting file

repo ls a1*a1 a1.orig

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 18: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

initaddignorelog i statusdiffrevertbranch/cloneserve

commit – stworzenie rewizji

Bazaarrepo bzr ci -m “Init”

Committing to:pykonik/repo/added a1

...added test/a4Commited revision 1.

repo vim a1repo bzr ciOtwiera sesję edytorarepo bzr ci -m “Changes in a1”

Mercurialrepo hg ci -m “Init”repo vim a1repo hg ciOtwiera sesję edytorarepo hg ci -m “Changes in a1”

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 19: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

initaddignorelog i statusdiffrevertbranch/cloneserve

bzr log – wyświetlenie historii zmian

repo bzr log------------------------------------------------------------

revno: 2

committer: Michal Bugno

<[email protected]>

branch nick: repo

timestamp: Sun 2008-04-06

22:16:40 +0200

message:

Changes in a1

------------------------------------------------------------

revno: 1

committer: Michal Bugno

<[email protected]>

branch nick: repo

timestamp: Sun 2008-04-06

21:54:17 +0200

message:

Init Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 20: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

initaddignorelog i statusdiffrevertbranch/cloneserve

hg log – wyświetlenie historii zmian

opcja -v włącza więcej szczegółów

repo hg log -v

changeset: 8:a6ba8f70ce7eba6a73e5715a439b06a9584106eeuser: Krzysiek Goj <[email protected]>date: Thu Apr 10 02:04:19 2008 +0200files: pykonik dvcs.texdescription:Bardzo ciekawe zmiany.

- nowe slajdy- więcej przykładów

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 21: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

initaddignorelog i statusdiffrevertbranch/cloneserve

branch/clone – stworzenie kopii repozytorium

Bazaarpykonik bzr branch repo other

Branched 2 revision(s).

pykonik cd otherother bzr logother vim a1other bzr mv test dirother bzr st

renamed:test ⇒ dirmodified:a1

other bzr ci -m “. . . ”

Mercurialpykonik hg clone repo other

3 files updated, 0 filesmerged, 0 files removed,0 files unresolved

pykonik cd otherother hg logother vim a1other hg mv dir testother hg st

M a1A test/a3R dir/a3

other hg ci -m “. . . ”

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 22: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

initaddignorelog i statusdiffrevertbranch/cloneserve

serve

Bazaarpykonik bzr serve –port 2345

listening on port: 2345

Mercurialpykonik hg serve -p 5432pykonik hg serve -v

listening athttp://abulafia:8000/

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 23: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

Praca zcentralizowaniaPraca zdecentralizowaniaPozostałe

Konflikty

bzr dobrze radzi sobie z rozwiązywaniem (założenia DVCS!)

foo.BASE, foo.THIS, foo.OTHER

znaczniki w plikach – miejsca konfliktu

bzr resolved – oznaczenie konfliktu jako rozwiązany

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 24: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

Praca zcentralizowaniaPraca zdecentralizowaniaPozostałe

Praca zcentralizowana – czyli bzr jako svn

Bazaar może działać jak svn – istnienie jednego, centralnegorepozytorium, które jest uaktualniane przez użytkowników, każdycommit poprzedzany jest update–em.

branch i checkout – różnice

konwersja branch ⇒ checkout – bzr bindcheckout ⇒ . . .⇒ update ⇒ . . .⇒ commit

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 25: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

Praca zcentralizowaniaPraca zdecentralizowaniaPozostałe

Gdy brak centralnego serwera. . .

Kiedy jesteśmy odcięci od internetu/sieci nadal jest możliwośćwersjonowania plików w checkout-cie.

bzr ci --local – zapisz zmiany lokalnie

bzr unbind – ckechout ⇒ branchbzr bind ... – branch ⇒ checkout

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 26: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

Praca zcentralizowaniaPraca zdecentralizowaniaPozostałe

bzr merge – połączenie branch’y

repo bzr ci -m “. . . ”repo bzr branch ../other

M a1R test/ ⇒ dir/All changes appliedsuccessfully.

repo bzr strenamed:test ⇒ dirmodified:a1pending merges:John Doe 2008-04-06renamed and modified

repo bzr ci -m “merged”

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 27: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

Praca zcentralizowaniaPraca zdecentralizowaniaPozostałe

Praca zdecentralizowana z bzr

main branch – umowny branch główny

własny branch do zmian – w nimedytujemy/naprawiamy/dodajemy

zapisywanie zmian: różne metody (gatekeeper lub zwykłycommit)

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 28: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

Praca zcentralizowaniaPraca zdecentralizowaniaPozostałe

Ciekawostki

uncommit

/.bazaar/bazaar.conf – email, editor

aliasy do różnych komend, np. bzr commit --strict,status --short

commit --fixes lp:5

pluginy – integracja z innymi VCSamihg – readonlygit – readonlyhgimport – importowanie mercurialasvn – współpraca z bindingami svn

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 29: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

konfiguracjapush / pullhookiinne

konfiguracja

˜/.hgrc

.hg/hgrc

[ui]username = Krzysiek Goj <[email protected]>ignore = /home/goj/.hgignore-global[extensions]mq =hbisect =

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 30: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

konfiguracjapush / pullhookiinne

push i pull, czyli współpraca z innymi

repo hg push docelowe reporepo hg pull źródłowe reporepo hg updaterepo hg merge

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 31: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

konfiguracjapush / pullhookiinne

hooki – jak reagować na wydarzenia i wymuszać niektórerzeczy

pykonik cat .hg/hgrc[hooks]pretxncommit.missing add remove = ! hg status| grep -q ′[?!]′

również moduły pythona

incoming

update

. . . i 10 innych

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 32: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

konfiguracjapush / pullhookiinne

inne tematy

cgi

bisect

konfiguracja

branch

rozszerzenia

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial

Page 33: Systemy kontroli wersji Bazaar i Mercurial

StartPodstawowe komendy

BazaarMercurialLinki

Linki

Bazaar

http://bazaar-vcs.org

http://launchpad.net

Mercurialhttp://www.selenic.com/mercurial/wiki/

http://hgbook.red-bean.com/http://www.ivy.fr/mercurial/ref/v1.0/Mercurial-Usage-v1.0.pdf

http://sharesource.org/

Michał Bugno, Krzysztof Goj Systemy kontroli wersji Bazaar i Mercurial