24
Distribuert versjonskontroll med Mercurial Systemutviklingskollokvium 2009-06-03 Morten Brekkevold

Distribuert versjonskontroll med Mercurial

Embed Size (px)

DESCRIPTION

Om distribuert versjonskontroll med Mercurial, med erfaringer og eksempler fra utviklingen av Network Administration Visualized

Citation preview

Page 1: Distribuert versjonskontroll med Mercurial

Distribuert versjonskontroll med MercurialSystemutviklingskollokvium 2009-06-03

Morten Brekkevold

Page 2: Distribuert versjonskontroll med Mercurial

2

Sentralisert versjonskontroll

sentraltrepository

brukerA

brukerB

brukerC

Page 3: Distribuert versjonskontroll med Mercurial

3

Sentralisert versjonskontroll

Krever online aksess til repo Krever skrivetilgang til sentralt repo for

å lage nye grener Et subsett av distribuert

versjonskontroll

Page 4: Distribuert versjonskontroll med Mercurial

4

Distribuert versjonskontroll

brukerA

brukerB

brukerC

evt.offentlig

repo

Page 5: Distribuert versjonskontroll med Mercurial

5

Distribuert versjonskontroll

Stor grad av fleksibilitet i (sam)arbeidsform

Trenger ikke et sentralt repo Ingen trenger skrivetilgang for å lage

egne grener Kan brukes offline

Page 6: Distribuert versjonskontroll med Mercurial

6

Hvem bruker Mercurial?

Mozilla OpenJDK Xen hypervisor Dovecot NAV ... en haug med andre ... Og snart: Python

Page 7: Distribuert versjonskontroll med Mercurial

7

Et repository

Arbeidskopi og historikk i ett

Page 8: Distribuert versjonskontroll med Mercurial

8

Committe endringer

Page 9: Distribuert versjonskontroll med Mercurial

9

Historikk

Revisions, Changesets, Heads, og Tip

Page 10: Distribuert versjonskontroll med Mercurial

10

Revisjoner

Løpenummer internt i hvert repo Globalt unik 40-tegns ID, et SHA-1

hash av: Foreldrerevisjonenes ID-er Innholdsteksten

Gir en viss sikkerhet mot uønsket tukling med repositories

Page 11: Distribuert versjonskontroll med Mercurial

11

Kloning

Page 12: Distribuert versjonskontroll med Mercurial

12

Endringer

Page 13: Distribuert versjonskontroll med Mercurial

13

Synkronisering

Pull fra Eva

Page 14: Distribuert versjonskontroll med Mercurial

14

Synkronisering

Bob: Merge

Bob: Commit

Page 15: Distribuert versjonskontroll med Mercurial

15

Synkronisering

Alice: Pull

Alice: Update

Page 16: Distribuert versjonskontroll med Mercurial

16

Deling av endringer

Direkte: Pull/push Lokalt filsystem SSH HTTP hg serve

Indirekte Bundles

Page 17: Distribuert versjonskontroll med Mercurial

17

NAV og Mercurial

Et sett med “offisielle” grener publisert på web

UNINETT-interne har push-aksess til flere grener

Eksterne sluses gjennom release manager (f.eks. UiTø)

Page 18: Distribuert versjonskontroll med Mercurial

18

Feilretting

Offisielle repos(HTTP)

default(trunk)

series/3.5.x

features/ipdevpoll

utviklerA

utviklerB

utviklerC

releasemanager

Page 19: Distribuert versjonskontroll med Mercurial

19

Ny funksjonalitet

Offisielle repos(HTTP)

default(trunk)

series/3.5.x

features/ipdevpoll

utviklerA

utviklerB

utviklerC

releasemanager

Page 20: Distribuert versjonskontroll med Mercurial

20

Ny point-release

Offisielle repos(HTTP)

default(trunk)

series/3.5.x

features/ipdevpoll

utviklerA

utviklerB

utviklerC

releasemanager

series/3.6.x

Page 21: Distribuert versjonskontroll med Mercurial

21

Changesettmvold@voldsminde:default$ hg log ­r d84191af79bechangeset:   5515:d84191af79bebranch:      3.5.xuser:        Morten Brekkevold <[email protected]>date:        Fri Apr 24 14:30:25 2009 +0200summary:     Fix for LP#366032 (Service availability shown as N/A, should be 100%)

mvold@voldsminde:default$ hg log ­v ­r d84191af79bechangeset:   5515:d84191af79bebranch:      3.5.xuser:        Morten Brekkevold <[email protected]>date:        Fri Apr 24 14:30:25 2009 +0200files:       subsystem/lib­python/nav/models/service.pydescription:Fix for LP#366032 (Service availability shown as N/A, should be 100%)

Mostly a copy of changeset afc648a0efb5.

* subsystem/lib­python/nav/models/service.py  (Service.get_availability.average): Make sure rrd.average returns  None values on failure or NaN results.  (Service.get_availability): Don't modify result of average  calculations, as 0 is a valid return value.

Page 22: Distribuert versjonskontroll med Mercurial

22

Changesett - detaljermvold@voldsminde:default$ hg log ­­debug ­r d84191af79bechangeset:   5515:d84191af79be89b6903263fd561ac3bca31ce796branch:      3.5.xparent:      5514:b1c28a8480ac72909c6ca4ffc7bedc5ea6a87377parent:      ­1:0000000000000000000000000000000000000000manifest:    5515:65a6d1689dbe8a074ab81583b79ea31732f5e08euser:        Morten Brekkevold <[email protected]>date:        Fri Apr 24 14:30:25 2009 +0200files:       subsystem/lib­python/nav/models/service.pyextra:       branch=3.5.xdescription:Fix for LP#366032 (Service availability shown as N/A, should be 100%)

Mostly a copy of changeset afc648a0efb5.

* subsystem/lib­python/nav/models/service.py  (Service.get_availability.average): Make sure rrd.average returns  None values on failure or NaN results.  (Service.get_availability): Don't modify result of average  calculations, as 0 is a valid return value.

Page 23: Distribuert versjonskontroll med Mercurial

23

Mercurial Queues (MQ)

Basert på quilt Smelter sammen versjonskontroll og

håndtering av patcher Påførte patcher ser ut som vanlige

changesett Muliggjør lokal manipulering av

historikk

Page 24: Distribuert versjonskontroll med Mercurial

24

Referanser

http://www.selenic.com/mercurial http://hgbook.red-bean.com/ http://metanav.uninett.no/hg