Hg: Changesets

Gegenüber zentralisierten Quellcodeverwaltungssytemen wie zum Beispiel Subversion (SVN, Open Source) oder Team Foundation Server (TFS, Microsoft) ist Mercurial (Hg) ein verteiltes System. Dies bringt einige Änderungen mit sich, was den Umgang damit angeht. Wann auch immer die Änderung an einer Datei dem Quellcodeverwaltungssystem anvertraut wird, spricht man bei Mercurial von einem Changeset. Ein solches Changeset, also eine Menge an Veränderungen, kann auch mehrere Dateien aus dem Arbeitsverzeichnis betreffen. Zentrale Systeme sprechen oft von Revisions, allerdings ist dieser Begriff auch im Hg-Umfeld gebräuchlich.

Aber nicht nur die Begriffe sind unterschiedlich, auch wenn man ein einzelnes Changeset identifizieren will, muss man bei einem verteilten System einen anderen Weg gehen. Denn es gibt keine zentrale Instanz, die irgendeine eindeutige Nummer liefern könnte.

Mercurial-Interaktion

Das liegt im Wesen des verteilten Systemes: Jeder Besitzer eines Clones kann eigenständig neue Changesets erzeugen. Wenn diese später zusammengeführt werden, würde eine lokal noch eindeutige Nummer nach der Zusammenführung mehrfach vorkommen. Damit wäre ein bestimmtes Changeset über eine solche (laufende) Nummer nicht mehr eindeutig identifizierbar. Die nebenstehende Skizze veranschaulicht einige der Möglichkeiten der Zusammenarbeit (klicke auf das Bild, um es zu vergrößern).

Daher gehen verteilte Systeme einen anderen Weg: Aus allen Daten, die zu einem Changeset gehören, errechnen diese einen Hashwert. Dieser Hashwert ist so etwas wie eine kryptografische Quersumme über die Daten des Changesets. Wer sich im Bitbucket die Commits unseres Beispiel-Repositories anschaut, erkennt dort in der Spalte „Revision“ eine Folge aus Ziffern und Buchstaben, z.B. 7c80f6bf902b für den ersten Commit. Dies ist genaugenommen nicht der ganze Hashwert, dieser lautet 7c80f6bf902b6e9c4f103ef5b311d06ca469eddb, aber diese lange Zeichenfolge muss man nicht immer verwenden. Oft reichen auch die ersten 4 Ziffern aus, zumindest solange das Repository noch nicht groß genug ist, dass die Hashwerte sich in diesen ersten 4 Stellen gleichen. Man muss immer nur so viel Stellen verwenden, wie nötig sind. Deshalb habe ich auch im ersten Artikel nur von den Changesets 583c und 6cde gesprochen.

Solche Hashwerte werden uns noch an weiteren Stellen begegnen, z.B. wenn wir bestimmte Stände markieren wollen. Dazu später mehr.

Bitbucket: Commits

[btcpayments address=“1HNv7eipZt9LHmmJnZT7VYjqdnUq7dmeKX“]

Ähnliche Artikel:

Schreibe einen Kommentar

Your email address will not be published.

siebzehn − 3 =