Hauptseminar Versionsverwaltung

Aus THM-Wiki
Wechseln zu: Navigation, Suche
Dokumentation
Arbeitstitel Versionsverwaltung
Kurs Hauptseminar
Semester WS 10/11
Teilnehmer Ivo Benner



Geschichte der Versionsverwaltung

Da die Liste der Versionsverwaltungswerkzeuge recht lang ist werden hier in erster Linie nur die am meisten benutzten OpenSource Versionssysteme betrachtet und solche die zu diesen geführt haben.

SCCS - Source Code Control System (1972)

SCCS ist vermutlich DAS erste Versionsverwaltungswerkzeug. Es war in der Lage eine Versionshistory einzelner Dateien lokal in Form sogenannter Weaves zu speichern und wieder abzurufen. Die werden lokal mit prefix/suffix abgelegt.

RCS - Revision Control System (1982)

RCS unterscheided sich kaum von SCCS, wird jedoch heute noch aktiv weiterentwickelt vom GNU Projekt und ist heute in einigen Wikis als Dokument verwaltungssystem zu finden.

Der Hauptunterschied ist im wesentlichen der Wandel von Weaves zu Deltas. Das heisst das die aktuelle Revision einer Datei immer direkt zugänglich ist und alle vorherigen Revisionen als Deltas(Unterschiede) zu der aktuellen Revision abgelegt werden. Dadurch ergibt sich in den meisten Fällen eine deutlich bessere Performance gegenüber SCCS.

Der größte Nachteil von RCS und SCCS war das man damit nur einzelne Dateien verwalten konnte und nicht komplette Projekte mit vielen Dateien. Die Lösung dazu kam dann 1990 mit CVS.

CVS - Concurrent Versions System (1990)

CVS ist das erste Versionssystem das nicht nur lokal arbeiten konnte sondern auch Änderungen über einen zentralen Server zusammenführen konnte.

CVS bestand zu Beginn nur ein paar Skriptdateien die RCS auf mehrere Dateien angewendet haben um so eine Versionsverwaltung von ganzen Projekten zu ermöglichten. Später wurden die Funktionen von RCS dann in CVS integriert.

Da CVS auf RCS basierte und somit im Grunde immer noch Dateien einzeln betrachtet hatte es Probleme wenn Dateien zum Beispiel verschoben wurden. Dabei ging die komplette Versionshistory verloren.


SVN - Subversion (2000)

SVN wird oft als Nachfolger von CVS bezeichnet. Es betrachtet nun nichtmehr nur die Versionen einzelner Dateien sondern führt für das komplette Projekt eine Revisionsnummer die mit jeder Änderung um eins erhöhrt wird. Es ermöglich dadurch auch Dateien zu verschieben ohne die Versionshistory dieser Datei zu verlieren.

SVN hat noch einige weitere Verbesserungen gegenüber CVS vorgenommen und hatte für eine Zeit das Slogan: "CVS done right!".

Zu diesen Verbesserungen zählen: - Übertragung von Deltas anstatt ganzer Dateien dank lokaler Speicherung der ausgecheckten Revision. - Anhängen von Dateiattributen - Transaktionen (Alles oder Nichts Prinzip beim Committen)

SVN wird als Teil des Apache Projekts gepflegt und weiterentwickelt.

Git - Fast Version Control System (2005)

Git gehört zu den ersten wirklich populären verteilten OpenSource Versionswerkzeugen und hat sein Slogan: Fast Version Control System wirklich verdient.

Die initiale Version von Git wurde von Linus Torwalds binnen zwei Wochen geschrieben und hat als verteiltes System einen völlig anderen Ansatz als CVS oder SVN.

Viele ideen stammen von dem kommerziellen BitKeeper Versionsverwaltungswerkzeug das zwischen 2002 und 2005 für den Linux Kernel von Linus Torwalds eingesetzt wurde. Die Einführung eines kommerziellen Werkzeugs zur Entwicklung des freien Linux Kernels führte zu heftigen Diskussionen und letztendlich dazu dass Linux Torwalds seine Arbeit am Kernel kurz unterbrach um ein neues Versionsverwaltungssystem zu schreiben das frei, besser und schneller als BitKeeper sein sollte.

Heute wird Git von einer recht großen Community gepflegt.

Übersicht

= Lokale Systeme

  • SCCS
  • RCS

Zentralisierte Systeme

  • CVS
  • SVN

Verteilte Systeme

  • Bitkeeper (kommerziell)
  • Git
  • Mercurial (hg)
  • Bazaar

SVN/GIT/Mercurial in Aktion

Als Zeitreferenz wird im folgenden die 'real' Zeit des Unix 'time' Werkzeug verwendet.

Es sei darauf hingewiesen das diese Zeit unter umständen durch gleichzeitige IO zugriffe oder Prozessorlast verfälscht sein können. Zur reduzierung langsamer IO Zugriffe auf die Festplatte wurde ein ramfs (Dateisystem im RAM) eingebunden und die Tests darauf durchgeführt.

Diese Zeiten unterscheiden sich je nach Rechenleisutng und sind nur als vergleich untereinander anzusehen und nicht als absolute Werte.

Die Versionsverwaltungswerkzeuge wurden in der zur Zeit dieses Tests aktuellsten Version verwendet:

  • Subversion-1.6.15
  • Git-1.7.3.5
  • Mercurial-1.7.3

Erstellen eines lokalen Repositories

SVN time ----- Git time ----- Mercurial time
svnadmin create repo_path 0.005s git init 0.002s hg init 0.058s

Initialer Commit

Committen meherer Dateien

Als Beispielcode wurde die unter UNIX systemen oft verwendete Taschenrechner Programmiersprache bc-1.06 (teil des GNU-Projekts) genommen.

  • Committet werden 94 Dateien und 7 Verzeichnisse.
  • Die Gesamtgröße beträgt 1252kb.
SVN time ----- Git time ----- Mercurial time
svn import datapath file:///repopath -m "init" 0.193s git add -A 0.042s hg commit -A -m "init" 0m0.387s
git commit -m "init" 0.015s