git ready

Lerne Git Commit für Commit
von Nick Quaranto, Übersetzung von Nico Gulden

Wie Git deine Daten speichert

eingetragen am 17 Feb 2009

Das ist eine sehr breite Übersicht über die Funktionsweise des Git Objektmodells, hauptsächlich basierend auf dem Git Community Book. Zukünftige Beiträge werden definitiv tiefer in das Objektmodell eintauchen, aber diese Information ist essentiell beim Lernen von Git. Die Bilder dieses Beitrags sind aus meiner Präsentation zu Open Source Collaboration with Git and GitHub.

Der einfachste Datenspeicher ist das Binärobjekt (Binary large object). Git speichert einfach die Inhalte einer Datei für die Verfolgungshistorie und nicht nur die Unterschiede zwischen den einzelnen Dateien jeder Änderung. Die Inhalte werden mit einem 40 Zeichen SHA1 hash des Inhaltes versehen, so dass deren Eindeutigkeit gewährleistet ist. So ziemlich jedes Objekt, sei es eine Übergabe (Commit), Baum oder ein Binärobjekt hat einen SHA, lerne also sie zu lieben. Glücklicherweise sind sie durch eine einfache Zeichenfolge aus sieben Zeichen referenziert, die in der Regel ausreichen die gesamte Zeichenkette zu identifizieren.

Ein grandioser Vorteil im Speichern der Inhalte besteht darin, dass Git bei zwei oder mehr Kopien der selben Datei intern nur eine Kopie vorhält. Ein Binärobjekt kann folgendermaßen dargestellt werden.

Das nächste Objekt ist ein Baum. Man kann ihn sich als Ordner oder Verzeichniss vorstellen: Bäume beinhalten andere Binärobjekte oder Bäume.

Das bringt uns schließlich zum wichtigsten Objekt: Die Übergabe (Commit). Man kann sich Übergaben (Commits) als Schnappschüsse vorstellen: Sie wissen wie der Baum zu einem bestimmten Zeitpunkt aussah. Darüber hinaus halten sie weitere Informationen wie Autor, Datum und Nachricht vor.

Übergaben (Commits) werden in gerichteten azyklischen Graphen organisiert. Für jene, die diese Vorlesung in Datenstrukturen verpaßt haben, es bedeuted, dass Übergaben (Commits) in eine Richtung “fließen”. Gewöhnlich ist diese Richtung einfach der Weg der Geschichte in deinem Repository, die recht einfach oder recht kompliziert sein kann, wenn du viele Zweige hast. Von einem umfassenden Standpunkt aus betrachtet, kann es wie folgt aussehen:

Das alles wird mit dem Werkzeug GitX offensichtlich. Ganz klar können hier die Übergabe-Objekte und ihre assoziierten Daten betrachtet werden.

Wenn du nun einige komische Terminologien in deinen Übergaben (Commits) findest, wirst ein wenig besser verstehen, wo sie herkommen und wie es funktioniert. Schau einfach mal in der interessanten Anleitung Git for Computer Scientists und in Scott Chacon’s Referat zu Getting Git rein.