Tag Archives: Versionsverwaltung

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:

Advertisements

SVN Merge mit Eclipse


Heute wollte ich das erste Mal mit Eclipse Änderungen aus einem getaggten Codestand in die HEAD Revision mergen. Die von Eclipse (Galileo) bereitgestellten Dialoge waren umfangreich aber nicht intuitiv. Mit ein bischen probieren ging es aber.  Also alles von vorn.

  1. Du hast ein Projekt, hast es produktiv gesetzt und getaggt (konkret hab ich maven verwendet und ein release gebildet).
  2. Dann stelltst Du fest, dass Du noch ein paar Änderungen in der Doku im getaggten Stand anpassen musst. Also Check out mit Tag und Anpassungen durchführen und einchecken.
  3. Jetzt willst Du diese Änderungen in den HEAD mergen.

Dabei wie folgt vorgehen:

  1. HEAD Stand auschecken oder update ausführen.
  2. Projektordner auswählen und Kontextmenü öffnen.
  3. Team/Merge auswählen
    SVN Merge Dialog in Eclipse (Galileo)
  4. Als URL wird im obigen Dialog der URL des Tag Folders im Remote Repository ausgewählt.
  5. Über Preview kann man sich die Änderungen vorher anschauen, die durchgeführt werden.
  6. Dann auf OK und die Änderungen werden auf der lokalen Kopie eingearbeitet.
  7. Über den gewohnten Dialog zur Synchronisation mit dem Repository kann dann entschieden werden, was germerged, was ignoriert und was noch zu ändern ist.

Das wars schon, viel Spass beim Selbstversuch – geht ganz einfach.