PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Versionierungssysteme (auch SCM genannt)

without comments

Nahezu jedes OpenSource-Projekt hat ein svn-Repository. Aber was genau ist das eigentlich? Und gibt es Alternativen?

SVN (Subversion) ist das wohl bekannteste Version Control System(VCS). Häufig wird diese Art von Software auch Source Configuration Management system (SCM) genannt. Das Hauptziel ist es, eine gemeinsame Platform für Quelltexte bereitzustellen, um mit vielen Personen gleichzeitig daran zu arbeiten, und dabei viele Probleme wie Inkonsistenzen, Versionsprobleme und gleichzeitigen Zugriff zu beseitigen.

In den Anfängen der Programmierung mußte man die Arbeit an einem Softwareprojekt immer gut organisieren, d.h. es mußte geplant werden, welche Person an welcher Datei arbeitet, man brauchte einen gemeinsamen Ordner, damit jeder alles lesen kann usw.  Und wie sollte es sein, häufig öffneten zwei Personen die selbe Datei, machten Änderungen, und beim Speichern überschrieb der eine die Änderungen des anderen. Auch mit Hilfe von Locks auf die Dateien war dieses Problem nicht wirklich zufriedenstellend lösbar.

Also überlegten sich kluge Köpf, einen Server-Dienst anzubieten, wo man seine Dateien „hochladen“(commit) kann. Jeder kann sich nun eine Kopie von diesem Server herunterladen(checkout) und an den Dateien arbeiten. Das interessante ist nun, dass beim erneuten Hochladen die Datei auf dem Server nicht überschrieben wird, sondern zusammengeführt (merge) wird. Außerdem hat man durch dieses System die Möglichkeit, auf ältere Versionen der Dateien zuzugreifen, denn der Server speichert die Änderungen mit, und zu jeder Änderung gehört auch ein Kommentar. Ungefähr 1980 kamen die ersten Umsetzungen RCS und SCCS für einzelne Dateien ans Licht. Das erste nutzbare System für die Softwareentwicklung und große Projekte wurde 1989 geboren: CVS (Concurrent Versions System).

Merging machen natürlich nur Sinn bei Textdateien, Binärdateien wie zB. Bilder müssen weiterhin überschrieben werden.

Seit dem Jahr 2000 wird Subversion als Nachfolger von CVS entwickelt, um konzeptionelle Fehler auszubügeln und das wichtigste, nämlich das mergen, zu verbessern. Durch Tags und Branches kann man nun auch besser verschiedene Zweige oder Releasestände/Versionen definieren.

Alle bisher besprochenen VCS waren zentralisierte Lösungen, es gibt also einen zentralen Server, der diesen Dienst zur Verfügung stellt. Heutzutage setzen sich langsam immer mehr die verteilte SCM durch, wie zB git oder Mercurial.

Aber genug Text, hier ein paar Screenshots aus meinem eclipse, in dem ich einen SVN-Client-Plugin installiert habe und so einfach via Menu Dateien ins svn commiten oder mir aktuelle Versionen aus dem svn holen kann:

eclipse

Falls man eine IDE nutzt, die kein svn-Plugin unterstützt, kann man das ganze auch direkt im Windows-Explorer erledigen mit Tortoise-SVN.

tortoise

diff

Linux-Fans empfehle ich das Video von Linus Torvalds zum Thema git, und warum es seiner Meinung nach das beste SCM ist:

Mehr Informationen zu VCS, ihren Funktionen und Zielen findet man bei Wikipedia schön zusammengefasst:

http://de.wikipedia.org/wiki/Versionsverwaltung

Eine sehr schöne Übersicht aller Features der bekanntesten 6 VCS:

http://versioncontrolblog.com/comparison/CVS/Git/Mercurial/Subversion/Visual+SourceSafe/BitKeeper/index.html

Wir nutzen in der Firma aktuell Subversion, privat nutze ich es ebenfalls.

Written by Michael Kliewe

Juni 21st, 2009 at 9:13 pm

Posted in PHP

Tagged with , , , ,

Leave a Reply

You can add images to your comment by clicking here.