Mercurial ist ein in Python geschriebenes Revision Control System. Befehle und Funktionen sind einfach zu erlernen.
Da es unabhängig vom einem Server arbeitet kann jeder lokal und auch ohne Internetverbindung Dokumente oder Quellcode damit verwalten. Trotzdem können Mercurial Repositories untereinander Informationen austauschen und so auch über weite Entfernungen zusammen arbeiten.
Mercurial ist komplett in Python geschrieben und lässt sich so einfach erweitern.
Viele bekannte Open Source Projekte setzen Mercurial ein. So zum Beispiel Aptitude, Dovecot, Gajim, Mozilla, OpenOffice, Python, Vim oder Xen.
6. Wer hat noch nie ein
Versionskontrollsystem
benutzt?
7. 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
8. 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)
9. 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
10. Mercurial-Nutzer
Adium Mozilla
Aptitude NetBeans
Dovecot Python
Gajim RabbitMQ
Google Vim
MoinMoin Xen
12. Mercurial einrichten
$ vim ~/.hgrc
$ cat ~/.hgrc
[ui]
username = Markus Zapke-Gründemann <info@keimlink.de>
13. Ein Repository einrichten
$ mkdir projekt
$ cd projekt
$ hg init
$ vim README
$ hg status
? README
$ hg add
adding README
$ hg st
A README
$ hg commit -m "Erster Commit."
14. Unterschiede feststellen
$ ls -A
.hg README
$ vim README
$ hg diff
diff --git a/README b/README
--- a/README
+++ b/README
@@ -1,1 +1,3 @@
Neues Projekt
+
+Zwei flinke Boxer jagen die quirlige Eva und…
15. Geschichte schreiben
$ hg st
M README
$ hg commit -m "Pangramm hinzugefügt."
$ hg log
changeset: 1:91987b4bd926
tag: tip
user: Markus Zapke-Gründemann <info@keimlink.de>
date: Fri Oct 15 12:28:26 2010 +0200
summary: Pangramm hinzugefügt.
changeset: 0:3c1440dc196c
user: Markus Zapke-Gründemann <info@keimlink.de>
date: Fri Oct 15 12:15:08 2010 +0200
summary: Erster Commit.
16. Zeitreisen I
$ hg log
changeset: 3:70e6670ff187
tag: tip
user: Markus Zapke-Gründemann <info@keimlink.de>
date: Fri Oct 15 12:37:31 2010 +0200
summary: Lorem ipsum.
changeset: 2:55069244c9a4
user: Markus Zapke-Gründemann <info@keimlink.de>
date: Fri Oct 15 12:36:20 2010 +0200
summary: Markup hinzugefügt.
changeset: 1:91987b4bd926
user: Markus Zapke-Gründemann <info@keimlink.de>
date: Fri Oct 15 12:28:26 2010 +0200
summary: Pangramm hinzugefügt.
changeset: 0:3c1440dc196c
user: Markus Zapke-Gründemann <info@keimlink.de>
date: Fri Oct 15 12:15:08 2010 +0200
summary: Erster Commit.
18. 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
19. 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
20. HTTP-Server
$ hg serve
listening at http://host.local:8000/ (bound to *:8000)
$ hg clone http://host.local:8000/ projekt
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
21. Separate Clones I
projekt $ cd ..
$ hg clone projekt projekt-clone
updating to branch default
1 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
22. Separate Clones II
projekt-clone $ hg out
comparing with /Users/zappi/projekt
searching for changes
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.
changeset: 5:7678996dbc36
tag: tip
user: Markus Zapke-Gründemann <info@keimlink.de>
date: Fri Oct 15 13:41:24 2010 +0200
summary: Markup für Überschrift hinzugefügt.
23. Separate Clones III
projekt-clone $ hg in
comparing with /Users/zappi/projekt
searching for changes
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.
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.
24. Separate Clones IV
projekt-clone $ hg pull
pulling from /Users/zappi/projekt
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
projekt-clone $ hg heads
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.
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.
25. Separate Clones V
projekt-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.
|
26. Separate Clones VI
projekt-clone $ cd ../projekt
projekt $ 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.
|
27. Separate Clones VII
projekt $ cd ../projekt-clone
projekt-clone $ hg merge
merging README
0 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: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.
28. Separate Clones VIII
projekt-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.
|
29. Separate Clones IX
projekt-clone $ hg out
comparing with /Users/zappi/projekt
searching for changes
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.
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.
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.
30. Separate Clones X
projekt-clone $ hg push
pushing to /Users/zappi/projekt
searching for changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 3 changes to 1 files
projekt-clone $ cd ../projekt
31. Separate Clones XI
projekt $ 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.
|
32. Separate Clones XII
projekt $ hg identify -ni
876ee0430735 5
$ hg up
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg identify -ni
7f6e7b845983 8
33. 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
34. graphlog Extension
$ vim ~/.hgrc
$ cat ~/.hgrc
[ui]
username = Markus Zapke-Gründemann <info@keimlink.de>
[extensions]
graphlog =
35. Mercurial Workflows I
Mit „named branches“ arbeiten
branch / update / merge / commit
Tags nutzen
tag / tags
36. Mercurial Workflows II
Code ohne zentrales Repository austauschen
export / import
bundle / unbundle
clone / push / pull
History manipulieren
backout
clone / export / import
38. Lizenz
Dieses Werk ist unter einem
Creative Commons
Namensnennung-Weitergabe unter gleichen Bedingungen
3.0 Unported Lizenzvertrag
lizenziert.
Um die Lizenz anzusehen, gehen Sie bitte zu
http://creativecommons.org/licenses/by-sa/3.0/
oder schicken Sie einen Brief an
Creative Commons,
171 Second Street, Suite 300,
San Francisco, California 94105, USA.