Versionsverwaltung mit Git


Gerade habe ich einen Artikel gelesen welcher in einer Zeile behauptet, es gäbe eine bessere Versionsverwaltung als SVN.

Im Artikel wird Git, eine Versionsverwaltung, vorgestellt. Die Entwicklung von Git wurde 2005 durch Linus Torwald begonnen. Es sollte einige Features zusätzlich zu SVN besitzen. Das Konzept lässt sich wie folgt zusammenfassen:

  1. Inhalte von Dateien werden in sogenannten Blob-Objekten gespeichert. Mit Blob ist ein binär gepacktes Format gemeint.  Zu jedem Blob wird ein SHA-1 Hash berechnet.
  2. Verzeichnisse werden als Tree-Objekte gespeichert. Zu jedem Tree-Objekt wird ein SHA-1 Hash gebildet welcher die Hash’s der im Verzeichnis entaltenen Dateien (Hash des zugehörigen Blob-Objektes) und Unterverzeichnisse (Hash’s der Tree Objekte) berücksichtigt.
  3. Bei jedem Commit wird eine Art Snapshot vom aktuellen Hash gespeichert. Jedem Commit Objekt ist ebenfalls ein Hash zugeordnet. Der Hash wird gebildet aus dem Hash des zugehörigen Tree Objektes und dem Hash des oder der Vorgänger Commit-Objekte. Damit enthält der Hash jedes Commit Objekt die gesamte Historie.

Ein Branch ist lediglich eine Referenz auf ein Commit Objekt. Wird ein Branch ausgescheckt werden die einzelnen Objekte als lokales Working Directory erstellt. Nur in der Wurzel befindet sich ein Verzeichnis .git mit Meta Infos. Bei Änderungen mit folgendem Commit wird ein neues Commit Objekt erzeugt und die Referenz des Branches auf das neue Commit Objekt verschoben (der Branch zeigt jetzt auf das neue Commit Objekt).

Das Konzept besitzt scheinbar folgende Features:

  • Es ist schnell
  • Es wird kein Server Repository benötigt, alle Änderungen erfolgen zunächst lokal. Es ist aber möglich ein Server Repository aufzusetzen. Dies ist bei wachsender Größe ohne Probleme möglich und der Normalfall.
  • Verschieben von Dateien kann größtenteils automatisch erkannt werden
  • Bei der Zusammenarbeit mit anderen Entwicklern genügt es wenn diese Leserechte auf das eigene, lokale Repository besitzen.
  • Jeder Branch stellt nur eine Refferenz auf ein Commit Objekt dar und ist sehr schnell angelegt
  • Es gibt einen Push und Pull Mechanismus. Wenn ein Entwickler einen neuen Stand erarbeitet hat, kann er über Pull die anderen Entwickler informieren. Diese holen sich seine Änderungen per Add-remote in ihr locales Repository und commiten wenn sie wollen. Beim Push würde der Entwickler wirklich seinen Code in ein anderes (nicht sein lokales) Repository rüberschicken. Dazu benötigt er auf dem Remote Rechner Schreibrechte. Wird bei größeren Projekten angewandt (Serverlösung).
  • Merging scheint sehr einfach zu funktionieren
  • Konflikte müssen weiterhin per Hand bereinigt werden
  • Es sind Commits auf Teile der Datei möglich. Heisst wenn ein Entwickler möchte, kann er von 3 durchgeführten Änderungen nur eine auswählen und diese Commiten und anschliessend die anderen beiden. Dazu gibt es einen interaktiven Mode.

Zum Abschluß noch eine kleine Anmerkung: Alles in diesem Blog Artikel beschriebene habe ich vom gelesenen Artikel abgeleitet. Ob die erwähnten Features wirklich so unterstützt werden habe ich noch nicht überprüft. Das werde ich aber noch nachholen und die Erkenntnisse in einem neuen Artikel zusammenfassen.

Toolunterstützung

  • Kommandozeile
  • GUI Tools
  • Eclipse Plugin

Quelle: artikel.bib

Verweise:

Post a comment or leave a trackback: Trackback URL.

Kommentare

  • FunThomas424242  On 9. Oktober 2010 at 23:30

    Wer auf den 2. Artikel zum Thema Git wartet der sei ein wenig vertröstet. Ich habe versucht Git im Sourceforge Projekt zu nutzen und bin damit zunächst noch nicht so klar gekommen. Allerdings habe ich auch konsequent den Consolen Modus umgangen und ausschließlich GUI Tools genutzt.
    Um die Console einzusetzen würde ich mir ein wenig Zeit reservieren um gleich alle Kommandos mal zu sichten. Genau diese Zeit fehlt mir aktuell aber da es noch so viele neue und interessante Themen auszuprobieren gibt.
    Da GIT aber scheinbar auf dem Vormarsch ist – wird es nicht lange dauern, dass ich noch ein Mal darauf zurück komme.

    Meine Meinung hat sich jedenfalls gefestigt – das ist das SCM der Zukunft.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: