Redmine Produkte / Git verteilte Versionsverwaltung

Git ist ein verteiltes Versionsverwaltungssystem welches ursprünglich zur Verwaltung der Linux Kernel Sourcen entwickelt wurde. Es steht als Open Source Software unter der GNU General Public License für Webdesigner, DevOps, Entwickler und Co. zur Verfügung. Der Name kommt ursprünglich aus dem Englischen und bedeutet soviel wie Depp bzw. Idiot. Für die Namensgebung ist übrigends Linux Torvalds verantwortlich der mit dem Projekt Anfang 2005 gestartet war.

Funktionsweise von Git

Git unterscheidet sich im wesentlichen von anderen Versionsverwaltungssystemen darin, dass es sich um ein verteiltes, dezentrales System handelt (im Gegensatz zu CVS (=Concurrent Versions System)).

Verteilt bedeutet:

  • Jedes Teammitglied (z.B. der Entwickler) hat ein eigenes lokales Repository mit dem er arbeitet.
  • Er kann seine lokalen, überprüften Änderungen mit einem entfernten Repository synchronisieren.
  • Jedes Teammitglied hat also nicht nur die aktuelle Quellcode-Version, sondern eine Kopie des ganzen Repositories auf dem lokalen Rechner.

Vorteile dieser Herangehensweise:

  • Leichter Code-Austausch zwischen allen Beteiligten (Entwickler, Designer etc.)
  • Durch die Logs sind alle Arbeitsschritte nachvollziebar
  • Es ist möglich isoliert an einem Feature (-> Branching) zu arbeiten oder zusammen an einem Feature

Das lokale Repository besteht aus den folgenden drei Bereichen

  1. Arbeitsverzeichnis (Working directory) mit dem aktuellen Projektstand und den noch nicht übertragenen Änderungen mittels Commit.
  2. Index (Staging area) der als Zwischenstufe aller Commit-Änderungen agiert.
  3. Repository (welches alle Projektversionen beinhaltet und im Ordner .git gespeichert ist)

Workflow für die Arbeit mit Git

Es gibt zwei Arbeitsrichtungen die den Workflow bestimmen, der im Prinzip so verläuft:

  • Checkout: Beim Anlegen des Projekts wird das Projekt ins lokale Arbeitsverzeichnis ausgecheked (lokal durch git init oder entfernt durch git clone). Man arbeitet dann lokal mit der aktuellen Version (HEAD Revision).
  • Add & Commit: Hinzufügen von Änderungen erfolgen über den Befehl git add. Dadurch werden die lokal getätigten Änderungen in den Index (Staging area) verschoben. Mittels git commit wird die neue Version des Projekts im Repository erzeugt. Dabei erhält jedes Objekt (z.B. Datei, Commit etc.) zur Identifikation einen Hashwert. Was eine direkte Referenzierung ermöglicht.
  • Push: Die Änderungen befinden sich jetzt zwar im HEAD, aber noch nicht im entfernten Repository. Dorthin werden sie mittels des git push Befehls geschickt.
  • Pull: Änderungen, die im entfernten Repository vorgenommen wurden (z.B. von anderen Teammitgliedern) und auch lokal verwendet werden, holt man sich mit dem Befehl git pull.

Bedeutung für die Programmierung

Der Einstieg in Git fällt vielen Anwender oft schwer. Grund ist der große Funktionsumfang an wichtigen Kommandos. Allerdings bietet Git den Vorteil, dass es auch für ganz normale Dateien (z.B. Office Dokumente, Backups, Änderungshistorien etc.) verwendet werden kann und damit viele Möglichkeiten des verteilten Arbeitens bietet. Es zählt mittlerweile zu den etablierten Technologien im IT-Bereich wenn es um verteilte Versionierung geht und wird von zahlreichen Unternehmen standardmäßig eingesetzt. Zum Einstieg in Git empfiehlt es sich die offizielle Dokumentation zu lesen. Wir bieten ebenfalls Unterstützung für Git an.

Quellen: