Mercurial #

Mercurial ist ein dezentrales Versionskontrollsystem (VersionsVerwaltung). Es ist unter http://www.selenic.com/mercurial/wiki/ zu finden. Die Standard-Dokumentation ist auf http://hgbook.red-bean.com/read/ zu finden.

einige Mercurial-Befehle #

  hg clone ssh://username@hg.javaproject.de/../groups/mercurial/repos/meinprojekt meinprojekt

Holt das angegebene Repository vom angegebenen Server. Es entsteht ein neues Verzeichnis "meinprojekt", in dem man dann arbeiten kann.

Die weiteren Befehle innerhalb des Repositories ausführen:

  hg status

Zeigt von mir selber geänderte Dateien (vorne 'M') und neue Dateien (vorne '?') an.

  hg add

Nimmt alle neue Dateien in die Versionsverwaltung auf. Beachtet dabei die Filter-Einstellungen in ".hgignore".

  hg commit -m "texttexttext"

Schreibt alle Änderungen in das lokale Repository.

  hg outgoing ssh://tbayen@hg.javaproject.de/../groups/mercurial/repos/meinprojekt

Zeigt die ausgehenden Unterschiede zwischen dem Repository auf dem Server und meinem eigenen Repository (d.h. dem ,was ich mit commit auch eingecheckt habe) an.

  hg incoming ssh://tbayen@hg.javaproject.de/../groups/mercurial/repos/meinprojekt

Wie outgoing, zeigt aber die neuen Änderungen auf dem Server an.

Diesen Befehl wieder eine Verzeichnisebene oberhalb des Repositories ausführen:

  hg push ssh://username@hg.javaproject.de/../groups/mercurial/repos/meinprojekt

schreibt alle Änderungen aus dem lokalen Repository in das entfernte Repository auf dem Server hg.javaproject.de, auf dem ich einen SSH-Zugang habe. Ist das das Repository, von dem ich mich geklont habe (der häufigste Fall), so reicht es, im Arbeitsverzeichnis zu bleiben und

  hg push

zu schreiben.

Man sollte übrigens vor dem push immer sicher sein, daß sich das Repository nicht inzwischen geändert hat. Das kann man mit "incoming" prüfen und, falls es eine Änderung gibt, ggf. vorher ein "pull" und "update", ggf. gefolgt von einem "merge" und "commit" machen. Bevor man Fremde Daten in sein Repository holt, ist natürlich ein "clone" als Kopie immer eine gute Idee.

Branches #

Mit "hg branch" kann man in Mercurial einen Branch definieren. (Das funktioniert so ähnlich wie in Subversion.) Ein Branch ist aus der Sicht von Mercurial nichts anderes als ein Head. Er wird allerdings nicht automatisch für merges vorgeschlagen. Ein Branch hat einen Namen (z.B. einen Release-Titel), anhand dessen man erkennen kann, wofür er gut ist. Gibt man bei "hg update" einen Branchnamen an, so landet man im aktuellsten Head dieses Branches.

Nachträgliche Änderungen, die mehrere Branches betreffen #

Ein Branch soll ja eigentlich Codeänderungen voneinander trennen. Natürlich gibt es auch Gründe, Änderungen in mehreren Branches vorzunehmen. Wenn ich also einen Bug habe, dessen Ursprung in der Vergangenheit liegt (also vor der Verzweigung), so gehe ich in die Version mit dem Bug zurück. Um diese festzustellen, kann ich mit

  hg annotate 

herausfinden, welche Zeile wann eingeführt bzw. das letzte Mal geändert wurde. Dann behebe ich den Bug und committe, so das ich einen neuen Head erhalte. Diesen merge ich dann mit beiden Branch-heads.

Branch separieren #

Wenn man mit "clone" ein Repository klont, kann man mit der "-b" Option dafür sorgen, das man nur einen Branch in den Klon übernimmt. Das sorgt dafür, das der Klon wirklich nur Daten dieses einen Branches enthält. Man kann allerdings immer noch Änderungen zwischen den beiden Repositories austauschen.

öffentliche Repositories #

Wer ein Repository veröffentlichen will, kann das mit dem "serve"-Befehl machen, er kann einen SSH-Zugang für die Projekt-Mitglieder einbauen und er kann einen Dienst wie https://bitbucket.org nutzen, der es einfach erlaubt, ein öffentliches Repository aufzusetzen.


Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-7) was last changed on 02-Dec-2011 21:05 by ThomasBayen