SVN

aus dem StugA-Informatik-Wiki

Wechseln zu: Navigation, Suche

SVN (oder auch Subversion) ist ein Versionsverwaltungssystem.

Alle Dateien eines Projektes können so zentral auf einem Server gespeichert und an alle Projektteilnehmer verteilt werden.

Nach jeder Änderung an den Dateien kann ein Projektteilnehmer die geänderten Dateien als neue "Revision" hochladen. Hat ein anderes Projektmitglied die gleichen Dateien verändert versucht SVN diese Änderungen zu einer Datei zusammenzuführen. Dies gelingt allerdings nur dann, wenn die Projektmitglieder an unterschiedlichen Stellen in der Datei gearbeitet haben, ansonsten muss manuell nachgeholfen werden (mehr siehe conflicts). Alte Revisionen lassen sich, sofern eine Verbindung zum Server besteht, wieder herstellen. Ist eine dauerhafte Verbindung zum SVN-Server nicht gegeben empfehlen sich andere, sog. verteilte Versionierungssysteme, die keinen zentralen Server brauchen wie z.B. Git

Obwohl SVN meist nur zur Organisation von Quellcode genutzt wird macht es auch Sinn andere Sachen wie zum Beispiel LaTeX oder XML-Dokumente mit SVN zu verwalten, an denen mit mehreren Personen gearbeitet wird.

SVN unterstützt zwar die Möglichkeit auch Binärdateien zu vergleichen, allerdings sind diese in der Praxis meist so aufgebaut, dass SVN nicht in der Lage ist Änderungen an solchen Dateien richtig zusammenzuführen.

Inhaltsverzeichnis

[X] Repository

Im Repository sind die Daten von SVN gespeichert. Hier werden also alle Versionen aller Dateien sowie weitere Inforationen zu dein einzelnen Revisionen gespeichert.

Nur mit dem Repository lassen sich ältere Versionen wieder herstellen. Daher macht es durchaus Sinn von diesem in regelmäßigen Abständen ein Backup zu erstellen.

Wie man ein Repository z.B. auf einem E0-Rechner einrichtet siehe HowTo:SVN

[X] Branch/Tag/Trunk

Normalerweise orientiert man sich beim erstellen eines SVN-Repositories an dem Tag/Branching-System von Preforce. Man ist allerdings nicht gezwungen dies zu übernehmen und kann sich auch ein eigenes System ausdenken.

innerhalb des SVN-Repositories erstellt man zunächst meist 3 Verzeichnisse:

  • trunk
    • in diesem Verzeichnis befindet sich die aktuelle Arbeitskopie. Dies ist das Arbeitsverzeichnis, an dem meist gearbeitet wird.
  • tag
    • ein tag ist eine Kopie des trunk-ordners die erstellt wird um eine spezielle Revision zu Kennzeichnen. Ein Beispiel hierfür wäre, wenn man einen bestimmten Meilenstein erreicht hat und diesen als funktionierende Version hervorheben möchte, falls die aktuelle Version in trunk nicht mehr funktionsfähig ist und man es mit dem letzten Meilenstein vergleichen möchte.
 TIPP: Aus eigener Erfahrung empfehle ich euch, sobald ihr eine funktionierende 
Version habt einen Tag zu erstellen.
  • branch
    • ein branch ist ebenfalls eine Kopie des trunk-Ordners. Einen branch erstellt man immer dann, wenn man getrennt von der aktuellen Version arbeiten möchte. Dies ist zum Beispiel dann Sinnvoll, wenn man neue Features implementieren möchte, die Einfluss auf bestehenden Code haben oder wenn man teile des bestehenden Quellcodes neu schreiben möchte, an dem bestehenden Code aber noch weiter gearbeitet werden soll.

[X] update/commit

sobald ihr etwas geändert habt solltet ihr eure Änderungen auf den Server hochladen. Dies macht man in SVN mit dem Befehl

 svn commit

Ihr werdet dann aufgefordert einen Kommentar anzugeben. Hier solltet ihr kurz schreiben, was ihr geändert habt ohne dabei zu sehr ins Detail zu gehen. Es soll aber möglich sein später anhand dieser commit-Nachrichten herauszufinden, wo sich ein Fehler eingeschlichen haben könnte, wenn ein bereits funktionierendes Feature irgendwann nicht mehr funktioniert oder um herauszufinden, wann Text gelöscht wurde. Zudem sollen andere Entwickler an dem Kommentar sehen können, was als letztes geändert wurde.

wollt ihr euer lokal heruntergeladenen SVN-checkout auf dem aktuellen Stand halten benutzt den Befehl

 svn update

um eure Version mit dem aktuellen SVN-Repository abzugleichen.

[X] conflicts

Arbeitet ihr zu zweit an der gleichen Datei kann es zu einem Konflikt kommen. SVN versucht immer erst selbst Änderungen zu einer Version zusammenzuführen. Ist das nicht möglich, da zum Beispiel Änderungen an der gleiche Stelle in einer Datei durchgeführt wurden muss der Entwickler selbst diesen Konflikt lösen. Als Hilfsmittel erstellt SVN einen "diff" von der aktuellen Version im SVN-Repository zur lokalen Kopie. Vorher werden Kopien der zuletzt heruntergeladenen Version (<dateiname>.r<version>), der Version, die mit der aktuellen Version in Konflikt steht (<dateiname>.r<version>), sowie der aktuellen, lokalen Version erstellt (<dateiname>.mine).

um einen Konflikt aufzulösen benutzt man den Befehl

 svn resolve <dateiname>

anschließend muss man seine Änderungen noch hochladen mit einem

 svn commit
Persönliche Werkzeuge
Freizeit
Archive