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.
- Auf der Seite SwingApplikation.Projektumgebung steht ein bisschen was allgemeines zu dezentralen Versionskontrollsystemen und zu Mercurial von ThomasBayen.
- Eine Seite zu einem MercurialVersionControlServer hat JensKapitza geschrieben.
- Laut Vergleich Mercurial vs. GIT scheint mir Mercurial, momentan in der Version 1.3, hier die passende Wahl zu sein. --MarkusMonderkamp
- Eine deutsche Erklärung zu Mercurial: http://intevation.net/~thomas/mercurial-lt2006/#id2452004 -- ThomasThiessen
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.