Git

Git ist ein als Open Source verfügbares verteiltes Versionskontrollsystem, ist in der Programmiersprache C implementiert und steht unter dem u.g. Link - derzeit in der Version 1.6.6.1 - für verschiedene Plattformen zur Verfügung. Systeme für die Versionsverwaltung (VCS) haben die Aufgabe Änderungen an einer oder mehreren Datei(en) über die Zeit zu dokumentieren, so dass man zu jedem Zeitpunkt auf Änderungen und Versionen zugreifen kann.


Die Entwicklung von Git wurde im Jahre 2005 von Linus Torvald mit dem Ziel angestoßen, eine Alternative zu dem proprietären Versionskontrollsystem Bitkeeper zu realisieren, und die effiziente Kooperation der weltweit operierenden Entwickler des Linux Kernels zu bewirken. Darüber hinaus nutzen einige bekannte Projekte wie GNOME, Ruby on Rails oder Android das Versionskontrollsystem Git aufgrund seiner hohen Flexibilität und Geschwindigkeit. Ein Alternative zu Git ist das ebenfalls verteilte Versionskontrollsystem Mercurial.

Das Git-Konzept

Bei dem von Git realisierten Konzept der sogenannten verteilten Versionskontrolle steht jedem Anwender sein eigenes, lokales Repository (engl. Behälter) zur Verfügung, das dann eine vollständige Kopie des Projektes - über dessen gesamten Lebenszyklus hinweg - enthält. Das Git-Repository ist letztendlich eine Datenbank und stellt nicht nur eine Arbeitskopie aller Dateien im Repository zur Verfügung sondern auch eine Kopie des gesamten Repositories selbst. Die Architektur eines Repositories unterstützt wiederum zwei verschiedene Datenstrukturen - die Index- und die Objekt-Datenbank.

Die Objekt-Datenbank unterscheidet vier Arten von Objekten:

  • Blobs ( Binary Large Objects), so wird jede Version einer Datei eindeutig spezifiziert und mit zusätzlichen Informationen (z.B. Erstellungsdatum der Datei, Autor etc.) versehen - so kann jederzeit eine bestimmte Version wiederhergestellt werden.
  • Bäume kennzeichnen Datei-übergreifende Informationen in einem Verzeichnis wie Metadaten, Blob-Identifikatoren, Pfadnamen oder Unterverzeichnisse.
  • Commits speichern Metadaten der am Repository vorgenommenen Veränderungen.
  • Tags weisen einem Commit vom Anwender bestimmte Versionskennzeichnungen zu.
Die Objekt-Datenbank ist als Content addressable Storage System (inhaltsadressierbarer Speicher) organisiert. Dadurch wird jedem Objekt im Speicher ein vom Inhalt abhängiger und damit eindeutiger Name zugeordnet - hier wird der SHA-Algorithmus (SHA-1) verwendet. Damit wird eine Gruppe von sicheren Hash-Algorithmen (SHA, Secure Hash Algorithmen) gekennzeichnet und bei SHA-1 eine 40-stellige Hexadezimalzahl (object id) dargestellt. Damit wird immer die dieselbe objekt-id für einen identischen Inhalt berechnet. Das bedeutet in der Konsequenz, dass Git sich nicht an Datei- und Verzeichnisnamen orientiert, sondern anstelle dessen den Inhalt von Dateien verfolgt.

Die Verzeichnisstruktur eines Repositories wird durch den Index beschrieben - einer temporären Binärdatei. Damit wird dann letztendlich eine Version eines Projektes zu einem bestimmten Zeitpunkt erfasst. Der Index kann in Unterscheidung zu anderen Versionskontrollsystemen zwischen verschiedenen Schritten in der Entwicklung und der Bestätigung diesbezüglicher Änderungen durch Commits trennen. Das findet Anwendung beim Mergen (Zusammen-führen) von mehreren Versionen derselben Datei, da dadurch die gezielte Verifizierung und das Manipulieren von Dateien erst ermöglicht werden. In diesem Zusammenhang wird Git auch als ein System zur Inhaltsüberwachung und -verfolgung (Content Tracking System) bezeichnet.

Die Eigenschaften von Git

Eine Zusammenfassung der Eigenschaften von Git:

  • Es wird keine Client-Server-Architektur benötigt, da das Repository lokal verfügbar ist.
  • Für die Pflege des Repositories stehen komfortable Funktionen zur Verfügung.
  • Die Historie der Versionen sind verschlüsselt.
  • Kommunikationsprotokolle wie u.a. das SSH-Protokoll, das http-Protokoll und das FTP-Protokoll unterstützen den Datentransfer zwischen verschiedenen Repositories.
  • Es stehen Tools für das Zusammenwirken mit anderen Versionskontrollsystemen zur Verfügung wie beispielsweise für Subversion (git-svn), für Concurrent Version System (CVS) (git-cvsimport, git-cvsexport) u.a. zur Verfügung.
  • Es wird jede Version einer Datei gespeichert, und nicht nur deren Unterschiede.
  • Git kann zusätzlich zu CVS oder Subversion parallel auf einem System installiert sein.
http://git-scm.com

Informationen zum Artikel
Deutsch: Git
Englisch:
Veröffentlicht: 08.11.2013
Wörter: 608
Tags: #Software-Technologien
Links: Algorithmus, Android, Architektur, BLOB (binary large object), Client-Server-Architektur