Subversion
Subversion ist eine Versionsverwaltung für Datenobjekte (Dateien, Quellcode, Doumente .....). Man kann damit viele Versionen von Dateien verwalten und auf die Entstehungsgeschichte der Dateien zugreifen. Das Prinzip von Subversion stellt das nachfolgende Sequenzdiagramm dar.
Die Lebenslinie "svnServer" stellt den Subversion-Server dar, meinPC ist der eigene PC, an dem man arbeitet.
- Zuerst checkt man sein eigenes Projekt vom Server aus. Dadurch erhält man eine lokale Kopie des Projekts. Das Kommando lautet
svn co ServerURL/projekt
. - Dann bearbeitet man sein Projekt. Neue Verzeichnisse und Dateien müssen unter Versionsverwaltung gestellt werden. Das geschieht mit dem Kommando
svn add neueDaten
. Will man Daten auf dem Server löschen, markiert man sie mit dem Kommandosvn del meineDaten
lokal als gelöscht. - Vor dem commit aktualisiert man seine lokale Arbeitskopie mit
svn update
. - Ist das Projekt beendet (z. B. die Praktikumsaufge fertig gelöst) überträgt man es auf den Server mit
svn ci -m "Text zur Version"
und erzeugt eine neue Version auf dem Server.
Befehl | Beschreibung | Beispiel |
---|---|---|
checkout | Holt die initialen Projektinformationen aus dem Repository. Dieser Befehl muss nur einmal ausgeführt werden. | svn co http://Adresse svn checkout svn://Adresse |
update | Aktualisiert die lokalen Daten aus dem Repository. | svn update |
add | Fügt neu erstellte Dateien der Versionsverwaltung hinzu. | svn add Ordner/Datei |
delete | Markiert Dateien als gelöscht. Die Änderung wird allerdings erst nach einem Commit wirksam. | svn del Ordner/Datei |
commit | Lädt lokale geänderte Dateien in das Repository hoch. Eine Nachricht sollte stets angegeben werden. | svn ci -m 'Was wurde geändert' |
help | Listet alle Befehle und weitere Hilfestellungen auf. | svn help |
copy | Kopiert Dateien oder Verzeichnisse im Repository | svn copy Quelle Ziel |
move | Verschiebt Dateien oder Verzeichnisse. | svn move Quelle Ziel |
merge | Bei Konflikten wird autoamtisch die Merge Funktionen aufgerufen. Hier kann gewählt werden, welche Version der Quellen in das Repository übernommen wird. Es kann auch eine manuelle Konfliktlösung gewählt werden. | |
propset | Setzt zusätzliche Eigenschaften auf Dateien oder Verzeichnisse. | svn propset svn:keyword "Author" datei.txt |
stat | Listet alle geänderten Dateien auf und zeigt neue nicht im Repository befindliche Dateien an. | svn stat |
info | Gibt Informationen über Pfad und Repository aus. | svn info |
log | Gibt logging-Infos aus. | svn log |
Subversion propset
Mit svn propset können Schlüsselworte in Dateien benutzt werden, die dann durch einen dem Schlüsselwort zugewiesenen Wert ersetzt werden.
Schlüsselwort | Abkürzung | Gedeutung |
---|---|---|
LastChangedDate | Date | Letztes Datum, an dem die Datei im Repository geändert wurde. |
LastChangedRevision | Revision oder Rev | Letzte Revision, in der die Datei im Repository geändert wurde. |
LastChangedBy | Author | Letzter Benutzer, der die Datei im Repository geändert hat. |
HeadURL | URL auf die letzte Revision der Datei im Repository. | |
Id | Kombination der anderen Schlüsselwörter. |
So werden die Schlüsselworte verwendet.
In einer Datei in der lokalen Kopie des Repository soll der Author angegeben werden. Wir schreiben in die Datei:
$Author$
Text in der Datei
weiterer Text in der Datei
Jetzt schalten wir mit nachfolgendem Kommando die propsets lokal ein.
svn propset -R svn:keywords "Date Rev Author" *
Damit sind die Schlüsselworte Date, Revision und Author rekursiv für alle Dateien eingeschaltet. Nach dem nächsten svn ci
steht in der lokalen Datei:
$Author: istabsdfe $
Text in der Datei
weiterer Text in der Datei
Ausführliche Infos zu SVN findet man unter:
http://svnbook.red-bean.com/de/1.7/
Probleme vermeiden
.svn-Dateien beachten
Die von Subversion verwalteten Elemente werden auf dem Server in einer Datenbank abgelegt. Subversion merkt sich die Dateien, die unter Versionsverwaltung stehen in lokalen Verzeichnissen mit dem Namen ".svn". Beim verschieben oder kopieren von lokalen Elementen kann man durch kopieren der, in der Regel, nicht sichtbaren .svn-Verzeichnisse Inkonsistenen erzeugen, die ein einchecken der Daten erschwert. Daher sollte stets mit svn copy bzw svn move gearbeitet werden.
Subversion Beispiel
Das Repository mit dem Namen "SVN Repository" enthält 3 Projekte. Ihr Name ist "Pr 1", "Pr 2" und "Pr 3". Im FBI könnte der Repository-Namen lauten:
https://subversion.h-da.de/svn/fbi/se3x/
Lokale Kopie erzeugen
Zu Beginn eines Projekts checkt man sein eigenes Projekt aus, z. B. mit dem Kommando:
svn co https://subversion.h-da.de/svn/fbi/se3x/Pr 1
Als Ergebnis erhält man eine lokale Kopie des Verzeichnisses "Pr 1". Dieses Verzeichnis ist leer, da wir noch keine Dateien unter Versionsverwaltung gestellt haben.
Lokale Kopie mit Inhalt füllen
Jetzt stellen wir 3 Dateien in das lokale Verzeichnis "Pr 1", die Dateien d1.java, d2.java und d3.java. Um diese Dateien unter Versionsverwaltung zu setzen, wechseln wir in das Verzeichnís Pr 1 und setzen die Dateien unter Versionsverwaltung mit dem Kommando:
svn add *.java
Zum Schluss committen wir die lokale Kopie und transferieren sie damit auf den Server. Das Kommando lautet:
svn ci -m "drei java-dateien hochgeladen"
SVN Repository nach dem commit
Nach dem commit enthält das Projekt Pr 1 auf dem SVN-Server die drei Java-Dateien. Die Projekte Pr 2 und Pr 3 sind durch Pünktchen angedeutet. Mit dem Kommando:
svn stat
kann man sich den Zustand der Dateien in der LOKALEN KOPIE des Repository ansehen.
Wie funktioniert Subversion beim parallelen Zugriff mehrerer Personen?
Wir nehmen wieder das SVN-Repository von dem Beispiel oben an. Das Repository enthält das Projekt Pr 1. In diesem Projekt sind die drei Dateien d1.java, d2.java und d2.java.
Zwei Entwickler checken das Projekt Pr 1 aus und bearbeiten es parallel.
svn co https://serverURL/SVN_Repository
Entwickler 1 bearbeitet die Datei d1.java. Er überträgt sie mit dem Kommando
svn ci -m "message 1"
auf den Server.
Entwickler 2 bearbeitet die Datei d2.java. Er aktualisiert seine lokale Kopie mit dem Kommando
svn update
Dann überträgt seine Daten mit dem Kommando
svn ci -m "message 2"
auf den Server.
Das SVN Repository auf dem Server enthält jetzt die Änderung von Entwickler 1 und von Entwickler 2 in einem Repository.