Subversion SVN
Grundlagen eines Versionsverwaltungssystems
Lothar Joerger
TeamOS/2 Köln/Bonn
Was ist Subversion?
- Versions-Management-System
- Content-Management-System
- Data-Base
- Report-Utility
- SVN und CVS sind Open-Source
- Die Anwendung ist einfach und erfordert keinen aufwendigen Schulungsaufwand
Was sind die Funktionen von CVS/SVN ?
- Versionskontrolle jeder Datei in einem Projekt
- Protokollierung der Änderungen zwischen zwei Versionen
- Historie aller Änderungen
- Historie welche Änderungen von "Wem" vorgenommen wurden
- Signierung eines Versionsstandes als "Release"
- Es können mehrere Entwicklungszweige angelegt werden
- Parallel gemachte Änderungen werden automatisch zusammengeführt
Was ist damit gemeint?
- Meine Dateien liegen (unlöschbar) in einer Datenbank
- Jede Änderung wird protokolliert und die Versionsnummer automatisch erhöht
- Man kann jederzeit feststellen wer, was, wann und warum geändert hat
- Es kann jede Version wiederhergestellt werden
- Es können mehrere Personen gleichzeitig mit allen Daten arbeiten
- Jede Änderung wird automatisch abgeglichen sofern sie nicht zum Konflikt führt
Anwendungsbeispiel
- Mehrere Anwender arbeiten mit den gleichen Dokumenten
- Jeder Anwender darf jedes Dokument verändern
- Jeder Anwender hat gleichzeitig Zugriff auf jedes Dokument
- Es kann nur immer ein Anwender zur gleichen Zeit ein Dokument verändern
- Anwender müssen absprechen, wer mit welchem Dokument zu einem bestimmten Zeitpunkt arbeiten darf
- Jeder Anwender muss jeden anderen Anwender fragen, welche Änderung vorgenommen wurde
Probleme mit Fileservern
- Es kann nicht festgestellt werden, wer z.Z. ein Dokument geöffnet hat
- Wird ein Dokument zwei mal geöffnet und bearbeitet, bleibt nur die letzte Sicherung erhalten
- Es wird nicht automatisch protokolliert was geändert wurde
- Wird eine Datei gelöscht oder unvollständig gespeichert, sind die Daten verloren
- Eine Versionskontrolle ist nur manuell möglich
Probleme lösen mit CVS oder SVN
- Jedes Dokument kann jederzeit von jedem bearbeitet werden
- Konflikte entstehen nur, wenn in einer Datei von mehreren gleichzeitig der gleiche Inhalt verändert wird
- In einer Text-Datei kann der Inhalt für jedes Zeichen aufgelöst werden
- In einer Binär-Datei kann der Inhalt nur auf die gesamte Datei aufgelöst werden. CVS und SVN können in diesem Fall den Konflikt nicht auflösen
- Jede Änderung wird protokolliert
- Die Versionsnummer wird automatisch erhöht
- Jeder Anwender kann jederzeit feststellen welche Inhalte sich geändert haben
Unterschied Text- und Binär-Datei
- Eine Text-Datei ist eine Folge von Zeichen (String)
- Ein String kann an jeder beliebigen Stelle erweitert oder reduziert werden
- Die Stellen, an dem ein String sich verändert, kann eindeutig festgestellt werden
- Mehrere Änderungen an einem String können automatisch zusammengeführt werden
- Ein Konflikt entsteht erst, wenn an der gleichen Stelle unterschiedliche Änderungen vorgenommen werden
- Dieser Konfikt muss manuell gelöst werden.
- Binär-Dateien können nicht als ein String aufgelöst werden sondern sind Felder mit fester Zuordnung
- Änderungen können nicht automatisch zusammengeführt werden
Warum ist Subversion besser als CVS?
- Enthält alle wichtigen Features von CVS
- Verzeichnisse lassen sich nachträglich umbenennen
- Commits finden atomar statt
- Unter Unix kann mit symbolischen Links gearbeitet werden
- Kommt besser mit binären Daten zurecht
Grundbegriffe
- Repository
- Module
- Working Copy
- Version / Release
- Checkout / Update / Add / Delete / Commit / Revert
- Merge / Conflict / Resolve Conflict
- Branch / Merge Branch
- Tag
Repository
- Ein Verzeichnis, auf den der SVN-Server Zugriff hat
- Enthält das Master-Copy der Datenbank
- Wächst mit der Anzahl der Änderungen
- Es werden immer nur die Änderungen gespeichert
- Es wird kein spezielles Dateisystem vorausgesetzt
- Das "Repository" Verzeichnis kann beliebig kopiert und verschoben werden
Module / Checkout / Working Copy
- Ein Modul ist eine definierte Anzahl von Verzeichnissen und Dateien, die zu einem Projekt gehören
- Das Modul/Projekt kann nach seiner Erschaffung beliebig wachsen
- Das Modul ist im SVN-Repository gespeichert
- Um an den Inhalt eines Moduls zu kommen, muss der Inhalt durch ein "Checkout" ausgelesen werden
- Ein "Checkout" liefert defaultmäßig immer den aktuellen Versionsstand aller Dateien
- Es kann aber auch jeder beliebige ältere Versionstand durch "Checkout" ausgelesen werden
Working Copy
- In einem Repository können beliebig viele Module sein
- Ein ausgelesenes Modul befindet sich als "Working Copy" auf der lokalen Festplatte
Update / Add / Commit
- Ein Modul wurde durch "Checkout" ausgelesen und findet sich als "Working Copy" auf der lokalen Festplatte
- Ein "Update" liest die letzten Änderung aus dem "Repository" aus
- Auch Dateien, die im "Working Copy" verändert wurden, werden auf den neusten Stand gebracht ("Merge"), solange kein "Conflict" vorliegt
- Änderungen am "Working Copy" können durch ein "Commit" in das "Repository" "eingechecked" werden
- Beim "Commit" muss eine Protokoll-Mitteilung eingegeben werden
- Eine neue Datei oder ein neues Verzeichnis kann durch "Add" im "Repository" hinzugefügt werden
Delete / Revert
- Dateien oder Verzeichnisse können aus dem "Repository" mit "Delete" entfernt werden
- Durch "Delete" gelöschte Dateien oder Verzeichnisse werden nicht physikalisch gelöscht
- Ein "Revert" stellt den letzten "Checkout"-Zustand einer Datei im "Working Copy" wieder her
- Hierfür ist keine Verbindung zum "Repository" nötig
Merge / Conflict / Resolve Conflict
- Ein "Merge" wird automatisch von CVS oder SVN durchgeführt
- Durch ein "Merge" werden die hinzugefügten Inhalte in eine Datei übernommen
- Bei einem "Conflict" wurde der Inhalt einer Datei an einer Stelle schon von jemanden anderen verändert
- CVS oder SVN können nicht entscheiden, welche Änderung die richtige ist
- Ein "Conflict" muss manuell aufgelöst werden
- Diesen Vorgang nennt man "Resolve Conflict"
Branch / Merge Branch
- Als einen "Branch" bezeichnet man einen Entwicklungszweig
- Durch einen "Branch" ist es möglich, ein Modul in zwei Richtungen zu entwickeln
- Es können beliebig viele Zweige in einem Modul existieren
- Es ist möglich, einen "Branch" wieder mit dem Hauptzweig durch einen "Branch Merge" zusammenzuführen
Tag
- Durch ein "Tag" wird allen Dokumenten in einem Modul zum Zeitpunkt des "Tag" ein eindeutiger "Symbol-Name" gegeben
- Durch einen "Tag" ist es später einfacher, einen bestimmten Versionstand der Entwicklung aus dem Repository auszulesen
- Bsp: Am Ende eines Entwicklungsabschnitts wird der "Tag" RELEASE 1.0 vergeben
- Hierdurch ist man später sehr schnell in der Lage, eine bestimmte Version eines Entwicklungsabschnittes wieder herzustellen
- Einem Modul können beliebig viele "Tags" zugeordnet werden.
Zusammenfassung Teil 1 - Grundlagen
- CVS und SVN ermöglichen eine automatische Versionskontrolle und helfen bei der Protokollierung und Koordinierung eines Entwicklungsprozesses
- Eine Versionskontrolle ist mit jeder Art von Datei möglich
- Ein Change-Management ist mit jeder Art von Source- bzw. Text-Datei möglich
- Es können niemals Daten verloren werden
- In Gruppen kann jeder jede Datei bearbeiten ohne jemanden zu behindern
- Es ist möglich festzustellen, wer/was/wann verändert hat
- Der Entwicklungsprozess kann automatisch protokolliert werden
Ausblick auf Teil 2 - Praxis
- SVN läuft als Server auf Linux, Windows, OS/2 usw.
- Ein SVN-Client ist als Java-Applet auf "jedem" OS lauffähig
- Das Web-Interface läuft auf "jedem" Webbrowser
- Es wird gezeigt wie man den SVN-Server auf Linux, Windows und OS/2 installiert und einrichtet
- Der Web-Client und der Java-Client wird unter OS/2 vorgeführt
- Der Windows-Explorer-Client "Tortoise-CVS" wird unter Windows vorgeführt
ENDE
- Danke für ihre Aufmerksamkeit