Download pdf - Mercurial

Transcript
Page 1: Mercurial

MercurialEin verteiltes VersionskontrollsystemMarkus Zapke-Gründemann

Ubucon 2010 Leipzig

Page 2: Mercurial

Markus Zapke-Gründemann

Softwareentwickler seit 2001

Schwerpunkt: Web Application Development mit Python und Django

Freier Softwareentwickler und Berater seit 2008

www.keimlink.de

Page 3: Mercurial

Übersicht

Verteilte Versionskontrollsysteme

Mercurial

Arbeiten mit Mercurial

Workflows

Links

Page 4: Mercurial

Wer benutzt ein zentrales Versionskontrollsystem?

(CVS, SVN)

Page 5: Mercurial

Wer arbeitet mit einemverteilten

Versionskontrollsystem?

Page 6: Mercurial

Wer hat noch nie einVersionskontrollsystem

benutzt?

Page 7: Mercurial

Verteilte Versionskontrollsysteme

Kein zentrales Repository nötig (aber möglich)

Jeder Client hat ein eigenes Repository

Viele Operationen sind schneller als bei einem zentralen Repository

Führt zu anderen Entwicklungsmodellen

Page 8: Mercurial

Mercurial

Verteiltes Versionskontrollsystem

Mercurial v0.1 im April 2005

Fast vollständig in Python geschrieben

Plattformunabhängig

Erweiterbar (Extensions)

Einfach zu erlernen

Open Source (GNU GPL 2)

Page 9: Mercurial

Mercurial (technisch)

Version 0.1 unter 600 SLOC Python

Version 1.6.4 hat 43.711 SLOC Python (71.666 total)

Changesets/Patches

SHA-1 Hashes

Netzwerkzugriffe via HTTP oder SSH

Page 10: Mercurial

Mercurial-Nutzer

Adium

Aptitude

Dovecot

Gajim

Google

MoinMoin

Mozilla

NetBeans

Python

RabbitMQ

Vim

Xen

Page 11: Mercurial

hg

Page 12: Mercurial

Mercurial einrichten

$ vim ~/.hgrc

$ cat ~/.hgrc[ui]username = Markus Zapke-Gründemann <[email protected]>

Page 13: Mercurial

Ein Repository einrichten$ mkdir projekt

$ cd projekt

$ hg init

$ vim README

$ hg status? README

$ hg addadding README

$ hg stA README

$ hg commit -m "Erster Commit."

Page 14: Mercurial

Unterschiede feststellen

$ ls -A.hg README

$ vim README

$ hg diffdiff --git a/README b/README--- a/README+++ b/README@@ -1,1 +1,3 @@ Neues Projekt++Zwei flinke Boxer jagen die quirlige Eva und…

Page 15: Mercurial

Geschichte schreiben$ hg stM README

$ hg commit -m "Pangramm hinzugefügt."

$ hg logchangeset: 1:91987b4bd926tag: tipuser: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 12:28:26 2010 +0200summary: Pangramm hinzugefügt.

changeset: 0:3c1440dc196cuser: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 12:15:08 2010 +0200summary: Erster Commit.

Page 16: Mercurial

Zeitreisen I$ hg logchangeset: 3:70e6670ff187tag: tipuser: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 12:37:31 2010 +0200summary: Lorem ipsum.

changeset: 2:55069244c9a4user: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 12:36:20 2010 +0200summary: Markup hinzugefügt.

changeset: 1:91987b4bd926user: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 12:28:26 2010 +0200summary: Pangramm hinzugefügt.

changeset: 0:3c1440dc196cuser: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 12:15:08 2010 +0200summary: Erster Commit.

Page 17: Mercurial

Zeitreisen II

$ hg identify 70e6670ff187 tip

$ hg identify -n3

$ hg update -r 11 files updated, 0 files merged, 0 files removed, 0 files unresolved

$ hg identify -ni91987b4bd926 1

$ hg up tip1 files updated, 0 files merged, 0 files removed, 0 files unresolved

Page 18: Mercurial

Zusammenfassung$ hg init # Repository erstellen

$ hg status # Status des Repositories ausgeben

$ hg st # Alias für status

$ hg add # Dateien hinzufügen

$ hg diff # Unterschiede ausgeben

$ hg commit # Commit der hinzugefügten Dateien

$ hg log # Geschichte anzeigen

$ hg identify # Revision identifizieren

$ hg update -r REV # Zu einer Revision wechseln

$ hg up -r REV # Alias für update

Page 19: Mercurial

Weitere wichtige Befehle

$ hg help # Hilfe ausgeben

$ hg help COMMAND # Hilfe zu einem Befehl anzeigen

$ hg copy SOURCE DEST # Eine Datei kopieren

$ hg cp SOURCE DEST # Alias für copy

$ hg remove FILE # Eine Datei löschen

$ hg rm FILE # Alias für remove

$ hg mv SOURCE DEST # Eine Datei verschieben

$ hg revert FILE # Eine Revision wieder herstellen

$ hg annotate FILE # Informationen zu jeder Zeile

Page 20: Mercurial

HTTP-Server

$ hg servelistening at http://host.local:8000/ (bound to *:8000)

$ hg clone http://host.local:8000/ projektupdating to branch default1 files updated, 0 files merged, 0 files removed, 0 files unresolved

Page 21: Mercurial

Separate Clones I

projekt $ cd ..

$ hg clone projekt projekt-cloneupdating to branch default1 files updated, 0 files merged, 0 files removed, 0 files unresolved

$ cd projekt-clone/

projekt-clone $ ls -A.hg README

projekt-clone $ cat .hg/hgrc [paths]default = /Users/zappi/projekt

Page 22: Mercurial

Separate Clones II

projekt-clone $ hg outcomparing with /Users/zappi/projektsearching for changeschangeset: 4:7b61da41bfceuser: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 13:40:52 2010 +0200summary: Weitere Überschrift hinzugefügt.

changeset: 5:7678996dbc36tag: tipuser: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 13:41:24 2010 +0200summary: Markup für Überschrift hinzugefügt.

Page 23: Mercurial

Separate Clones III

projekt-clone $ hg incomparing with /Users/zappi/projektsearching for changeschangeset: 4:4347c2e33c9euser: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 13:46:24 2010 +0200summary: Text von Kafka eingefügt.

changeset: 5:876ee0430735tag: tipuser: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 13:47:02 2010 +0200summary: Überschrift hinzugefügt.

Page 24: Mercurial

Separate Clones IVprojekt-clone $ hg pullpulling from /Users/zappi/projektsearching for changesadding changesetsadding manifestsadding file changesadded 2 changesets with 2 changes to 1 files (+1 heads)(run 'hg heads' to see heads, 'hg merge' to merge)

projekt-clone $ hg headschangeset: 7:876ee0430735tag: tipuser: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 13:47:02 2010 +0200summary: Überschrift hinzugefügt.

changeset: 5:7678996dbc36user: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 13:41:24 2010 +0200summary: Markup für Überschrift hinzugefügt.

Page 25: Mercurial

Separate Clones Vprojekt-clone $ hg glog -r 4:o changeset: 7:876ee0430735| tag: tip| user: Markus Zapke-Gründemann <[email protected]>| date: Fri Oct 15 13:47:02 2010 +0200| summary: Überschrift hinzugefügt.|o changeset: 6:4347c2e33c9e| parent: 3:70e6670ff187| user: Markus Zapke-Gründemann <[email protected]>| date: Fri Oct 15 13:46:24 2010 +0200| summary: Text von Kafka eingefügt.|| @ changeset: 5:7678996dbc36| | user: Markus Zapke-Gründemann <[email protected]>| | date: Fri Oct 15 13:41:24 2010 +0200| | summary: Markup für Überschrift hinzugefügt.| || o changeset: 4:7b61da41bfce|/ user: Markus Zapke-Gründemann <[email protected]>| date: Fri Oct 15 13:40:52 2010 +0200| summary: Weitere Überschrift hinzugefügt.|

Page 26: Mercurial

Separate Clones VIprojekt-clone $ cd ../projektprojekt $ hg glog -r 3:@ changeset: 5:876ee0430735| tag: tip| user: Markus Zapke-Gründemann <[email protected]>| date: Fri Oct 15 13:47:02 2010 +0200| summary: Überschrift hinzugefügt.|o changeset: 4:4347c2e33c9e| user: Markus Zapke-Gründemann <[email protected]>| date: Fri Oct 15 13:46:24 2010 +0200| summary: Text von Kafka eingefügt.|o changeset: 3:70e6670ff187| user: Markus Zapke-Gründemann <[email protected]>| date: Fri Oct 15 13:37:31 2010 +0200| summary: Lorem ipsum.|

Page 27: Mercurial

Separate Clones VII

projekt $ cd ../projekt-cloneprojekt-clone $ hg mergemerging README0 files updated, 1 files merged, 0 files removed, 0 files unresolved(branch merge, don't forget to commit)

projekt-clone $ hg commit -m "Merge mit Eltern-Klon."

projekt-clone $ hg heads changeset: 8:7f6e7b845983tag: tipparent: 5:7678996dbc36parent: 7:876ee0430735user: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 14:10:32 2010 +0200summary: Merge mit Eltern-Klon.

Page 28: Mercurial

Separate Clones VIIIprojekt-clone $ hg glog -r 4:@ changeset: 8:7f6e7b845983|\ tag: tip| | parent: 5:7678996dbc36| | parent: 7:876ee0430735| | user: Markus Zapke-Gründemann <[email protected]>| | date: Fri Oct 15 14:10:32 2010 +0200| | summary: Merge mit Eltern-Klon.| || o changeset: 7:876ee0430735| | user: Markus Zapke-Gründemann <[email protected]>| | date: Fri Oct 15 13:47:02 2010 +0200| | summary: Überschrift hinzugefügt.| || o changeset: 6:4347c2e33c9e| | parent: 3:70e6670ff187| | user: Markus Zapke-Gründemann <[email protected]>| | date: Fri Oct 15 13:46:24 2010 +0200| | summary: Text von Kafka eingefügt.| |o | changeset: 5:7678996dbc36| | user: Markus Zapke-Gründemann <[email protected]>| | date: Fri Oct 15 13:41:24 2010 +0200| | summary: Markup für Überschrift hinzugefügt.| |o | changeset: 4:7b61da41bfce|/ user: Markus Zapke-Gründemann <[email protected]>| date: Fri Oct 15 13:40:52 2010 +0200| summary: Weitere Überschrift hinzugefügt.|

Page 29: Mercurial

Separate Clones IXprojekt-clone $ hg outcomparing with /Users/zappi/projektsearching for changeschangeset: 4:7b61da41bfceuser: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 13:40:52 2010 +0200summary: Weitere Überschrift hinzugefügt.

changeset: 5:7678996dbc36user: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 13:41:24 2010 +0200summary: Markup für Überschrift hinzugefügt.

changeset: 8:7f6e7b845983tag: tipparent: 5:7678996dbc36parent: 7:876ee0430735user: Markus Zapke-Gründemann <[email protected]>date: Fri Oct 15 14:10:32 2010 +0200summary: Merge mit Eltern-Klon.

Page 30: Mercurial

Separate Clones X

projekt-clone $ hg pushpushing to /Users/zappi/projektsearching for changesadding changesetsadding manifestsadding file changesadded 3 changesets with 3 changes to 1 files

projekt-clone $ cd ../projekt

Page 31: Mercurial

Separate Clones XIprojekt $ hg glog -r 4:o changeset: 8:7f6e7b845983|\ tag: tip| | parent: 7:7678996dbc36| | parent: 5:876ee0430735| | user: Markus Zapke-Gründemann <[email protected]>| | date: Fri Oct 15 14:10:32 2010 +0200| | summary: Merge mit Eltern-Klon.| || o changeset: 7:7678996dbc36| | user: Markus Zapke-Gründemann <[email protected]>| | date: Fri Oct 15 13:41:24 2010 +0200| | summary: Markup für Überschrift hinzugefügt.| || o changeset: 6:7b61da41bfce| | parent: 3:70e6670ff187| | user: Markus Zapke-Gründemann <[email protected]>| | date: Fri Oct 15 13:40:52 2010 +0200| | summary: Weitere Überschrift hinzugefügt.| |@ | changeset: 5:876ee0430735| | user: Markus Zapke-Gründemann <[email protected]>| | date: Fri Oct 15 13:47:02 2010 +0200| | summary: Überschrift hinzugefügt.| |o | changeset: 4:4347c2e33c9e|/ user: Markus Zapke-Gründemann <[email protected]>| date: Fri Oct 15 13:46:24 2010 +0200| summary: Text von Kafka eingefügt.|

Page 32: Mercurial

Separate Clones XII

projekt $ hg identify -ni876ee0430735 5

$ hg up1 files updated, 0 files merged, 0 files removed, 0 files unresolved

$ hg identify -ni7f6e7b845983 8

Page 33: Mercurial

Zusammenfassung

$ hg serve # Webserver starten

$ hg clone # Repository klonen

$ hg out # Changesets ausgeben, die zum Eltern-Klon gehen

$ hg in # Changesets ausgeben, die vom Eltern-Klon kommen

$ hg pull # Changesets vom Eltern-Klon holen

$ hg heads # Köpfe anzeigen

$ hg glog # Geschichte als Baum (graphlog Extension)

$ hg merge # Zwei Revisionen zusammenführen

$ hg push # Changesets zum Eltern-Klon senden

Page 34: Mercurial

graphlog Extension

$ vim ~/.hgrc

$ cat ~/.hgrc[ui]username = Markus Zapke-Gründemann <[email protected]>

[extensions]graphlog =

Page 35: Mercurial

Mercurial Workflows I

Mit „named branches“ arbeiten

branch / update / merge / commit

Tags nutzen

tag / tags

Page 36: Mercurial

Mercurial Workflows II

Code ohne zentrales Repository austauschen

export / import

bundle / unbundle

clone / push / pull

History manipulieren

backout

clone / export / import

Page 37: Mercurial

Links

http://mercurial.selenic.com/

http://hgbook.red-bean.com/

http://hginit.com/

http://mercurial.selenic.com/wiki/QuickReferenceCardsAndCheatSheets

http://bitbucket.org/

Page 38: Mercurial

LizenzDieses Werk ist unter einem

Creative CommonsNamensnennung-Weitergabe unter gleichen Bedingungen

3.0 Unported Lizenzvertraglizenziert.

Um die Lizenz anzusehen, gehen Sie bitte zu http://creativecommons.org/licenses/by-sa/3.0/

oder schicken Sie einen Brief anCreative Commons,

171 Second Street, Suite 300,San Francisco, California 94105, USA.


Recommended