Article,

Wird Git Subversion beerben?

, and .
Java Magazin, (2010)

Abstract

Im Artikel wird Git, eine neue Versionsverwaltung, vorgestellt. Git ist von Linus Torwald erdacht worden. 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 Refferenz 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. + Verschiebungen von Dateien können 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. Wir 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. Toolunterstützung + Kommandozeile + GUI Tools + Eclipse Plugin + ... Verweise: 1) http://youtube.com/watch?v=4XpnKHJAok8 2) http://git-scm.com/

Tags

Users

  • @funthomas424242

Comments and Reviews