Post on 23-Jan-2015
description
transcript
MercurialEin verteiltes VersionskontrollsystemMarkus Zapke-Gründemann
Ubucon 2010 Leipzig
Markus Zapke-Gründemann
Softwareentwickler seit 2001
Schwerpunkt: Web Application Development mit Python und Django
Freier Softwareentwickler und Berater seit 2008
www.keimlink.de
Übersicht
Verteilte Versionskontrollsysteme
Mercurial
Arbeiten mit Mercurial
Workflows
Links
Wer benutzt ein zentrales Versionskontrollsystem?
(CVS, SVN)
Wer arbeitet mit einemverteilten
Versionskontrollsystem?
Wer hat noch nie einVersionskontrollsystem
benutzt?
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
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)
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
Mercurial-Nutzer
Adium
Aptitude
Dovecot
Gajim
MoinMoin
Mozilla
NetBeans
Python
RabbitMQ
Vim
Xen
hg
Mercurial einrichten
$ vim ~/.hgrc
$ cat ~/.hgrc[ui]username = Markus Zapke-Gründemann <info@keimlink.de>
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."
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…
Geschichte schreiben$ hg stM README
$ hg commit -m "Pangramm hinzugefügt."
$ hg logchangeset: 1:91987b4bd926tag: tipuser: Markus Zapke-Gründemann <info@keimlink.de>date: Fri Oct 15 12:28:26 2010 +0200summary: Pangramm hinzugefügt.
changeset: 0:3c1440dc196cuser: Markus Zapke-Gründemann <info@keimlink.de>date: Fri Oct 15 12:15:08 2010 +0200summary: Erster Commit.
Zeitreisen I$ hg logchangeset: 3:70e6670ff187tag: tipuser: Markus Zapke-Gründemann <info@keimlink.de>date: Fri Oct 15 12:37:31 2010 +0200summary: Lorem ipsum.
changeset: 2:55069244c9a4user: Markus Zapke-Gründemann <info@keimlink.de>date: Fri Oct 15 12:36:20 2010 +0200summary: Markup hinzugefügt.
changeset: 1:91987b4bd926user: Markus Zapke-Gründemann <info@keimlink.de>date: Fri Oct 15 12:28:26 2010 +0200summary: Pangramm hinzugefügt.
changeset: 0:3c1440dc196cuser: Markus Zapke-Gründemann <info@keimlink.de>date: Fri Oct 15 12:15:08 2010 +0200summary: Erster Commit.
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
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
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
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
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
Separate Clones II
projekt-clone $ hg outcomparing with /Users/zappi/projektsearching for changeschangeset: 4:7b61da41bfceuser: Markus Zapke-Gründemann <info@keimlink.de>date: Fri Oct 15 13:40:52 2010 +0200summary: Weitere Überschrift hinzugefügt.
changeset: 5:7678996dbc36tag: tipuser: Markus Zapke-Gründemann <info@keimlink.de>date: Fri Oct 15 13:41:24 2010 +0200summary: Markup für Überschrift hinzugefügt.
Separate Clones III
projekt-clone $ hg incomparing with /Users/zappi/projektsearching for changeschangeset: 4:4347c2e33c9euser: Markus Zapke-Gründemann <info@keimlink.de>date: Fri Oct 15 13:46:24 2010 +0200summary: Text von Kafka eingefügt.
changeset: 5:876ee0430735tag: tipuser: Markus Zapke-Gründemann <info@keimlink.de>date: Fri Oct 15 13:47:02 2010 +0200summary: Überschrift hinzugefügt.
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 <info@keimlink.de>date: Fri Oct 15 13:47:02 2010 +0200summary: Überschrift hinzugefügt.
changeset: 5:7678996dbc36user: Markus Zapke-Gründemann <info@keimlink.de>date: Fri Oct 15 13:41:24 2010 +0200summary: Markup für Überschrift hinzugefügt.
Separate Clones Vprojekt-clone $ hg glog -r 4:o changeset: 7:876ee0430735| tag: tip| user: Markus Zapke-Gründemann <info@keimlink.de>| 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 <info@keimlink.de>| date: Fri Oct 15 13:46:24 2010 +0200| summary: Text von Kafka eingefügt.|| @ changeset: 5:7678996dbc36| | user: Markus Zapke-Gründemann <info@keimlink.de>| | 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 <info@keimlink.de>| date: Fri Oct 15 13:40:52 2010 +0200| summary: Weitere Überschrift hinzugefügt.|
Separate Clones VIprojekt-clone $ cd ../projektprojekt $ hg glog -r 3:@ changeset: 5:876ee0430735| tag: tip| user: Markus Zapke-Gründemann <info@keimlink.de>| date: Fri Oct 15 13:47:02 2010 +0200| summary: Überschrift hinzugefügt.|o changeset: 4:4347c2e33c9e| user: Markus Zapke-Gründemann <info@keimlink.de>| date: Fri Oct 15 13:46:24 2010 +0200| summary: Text von Kafka eingefügt.|o changeset: 3:70e6670ff187| user: Markus Zapke-Gründemann <info@keimlink.de>| date: Fri Oct 15 13:37:31 2010 +0200| summary: Lorem ipsum.|
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 <info@keimlink.de>date: Fri Oct 15 14:10:32 2010 +0200summary: Merge mit Eltern-Klon.
Separate Clones VIIIprojekt-clone $ hg glog -r 4:@ changeset: 8:7f6e7b845983|\ tag: tip| | parent: 5:7678996dbc36| | parent: 7:876ee0430735| | user: Markus Zapke-Gründemann <info@keimlink.de>| | date: Fri Oct 15 14:10:32 2010 +0200| | summary: Merge mit Eltern-Klon.| || o changeset: 7:876ee0430735| | user: Markus Zapke-Gründemann <info@keimlink.de>| | 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 <info@keimlink.de>| | date: Fri Oct 15 13:46:24 2010 +0200| | summary: Text von Kafka eingefügt.| |o | changeset: 5:7678996dbc36| | user: Markus Zapke-Gründemann <info@keimlink.de>| | 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 <info@keimlink.de>| date: Fri Oct 15 13:40:52 2010 +0200| summary: Weitere Überschrift hinzugefügt.|
Separate Clones IXprojekt-clone $ hg outcomparing with /Users/zappi/projektsearching for changeschangeset: 4:7b61da41bfceuser: Markus Zapke-Gründemann <info@keimlink.de>date: Fri Oct 15 13:40:52 2010 +0200summary: Weitere Überschrift hinzugefügt.
changeset: 5:7678996dbc36user: Markus Zapke-Gründemann <info@keimlink.de>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 <info@keimlink.de>date: Fri Oct 15 14:10:32 2010 +0200summary: Merge mit Eltern-Klon.
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
Separate Clones XIprojekt $ hg glog -r 4:o changeset: 8:7f6e7b845983|\ tag: tip| | parent: 7:7678996dbc36| | parent: 5:876ee0430735| | user: Markus Zapke-Gründemann <info@keimlink.de>| | date: Fri Oct 15 14:10:32 2010 +0200| | summary: Merge mit Eltern-Klon.| || o changeset: 7:7678996dbc36| | user: Markus Zapke-Gründemann <info@keimlink.de>| | 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 <info@keimlink.de>| | date: Fri Oct 15 13:40:52 2010 +0200| | summary: Weitere Überschrift hinzugefügt.| |@ | changeset: 5:876ee0430735| | user: Markus Zapke-Gründemann <info@keimlink.de>| | date: Fri Oct 15 13:47:02 2010 +0200| | summary: Überschrift hinzugefügt.| |o | changeset: 4:4347c2e33c9e|/ user: Markus Zapke-Gründemann <info@keimlink.de>| date: Fri Oct 15 13:46:24 2010 +0200| summary: Text von Kafka eingefügt.|
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
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
graphlog Extension
$ vim ~/.hgrc
$ cat ~/.hgrc[ui]username = Markus Zapke-Gründemann <info@keimlink.de>
[extensions]graphlog =
Mercurial Workflows I
Mit „named branches“ arbeiten
branch / update / merge / commit
Tags nutzen
tag / tags
Mercurial Workflows II
Code ohne zentrales Repository austauschen
export / import
bundle / unbundle
clone / push / pull
History manipulieren
backout
clone / export / import
Links
http://mercurial.selenic.com/
http://hgbook.red-bean.com/
http://hginit.com/
http://mercurial.selenic.com/wiki/QuickReferenceCardsAndCheatSheets
http://bitbucket.org/
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.