Subversion

Subversion ist ein Open Source Werkzeug zum Versionieren von Dateien. Besonders geeignet ist es für Textdateien, hier hat man alle Möglichkeiten, Versionen zu vergleichen, zu bearbeiten und miteinander zu kombinieren.

Zusammen mit dem Windows Client Tortoise SVN setzen wir es seit Jahren ein, vor allem für unsere Internet-Projekte.

Die wichtigsten Arbeitsschritte

  1. Neues Repository
    • In einer Shell im Subversion-Verzeichnis des Servers svnadmin create REPOSITORYNAME; anschließend ggf. Besitzer und Rechte anpassen.
    • Import: Repository mit Inhalt aus bestehendem Ordner füllen. Nach dem Import diesen lokalen Ordner nicht mehr weiter verwenden, da er nicht mit Subversion verwaltet wird, sondern Checkout in neuen, leeren Ordner:
  2. SVN Checkout: Arbeitskopie auf dem lokalen Rechner erstellen.
    Den SSH-Port trägt man in den Einstellungen (rechte Maustaste > TortoiseSVN > Settings > Network > SSH Client) ein:
    <path_to>\bin\TortoisePlink.exe -P <custom_ssh_port>
  3. Update: Arbeitskopie mit dem Repository abgleichen. :!: Diesen Schritt unbedingt vor jeder Neubearbeitung durchführen.
  4. Add: Markieren neu im Arbeitsordner erstellter Dateien für die Übertragung ins Repository → Commit
  5. SVN Commit: Änderungen aus der Arbeitskopie ins Repository übertragen.
    Hierbei kann es zu Konflikten kommen, wenn die Dateien in der Zwischenzeit von einem anderen Benutzer geändert wurden. Dann legt Subversion zusätzlich zur eigentlichen Datei zwei weitere im Arbeitsverzeichnis ab:
    • filename.rOLDREV ist die Grundlage, auf der die eigenen Änderungen basieren,
    • filename.rNEWREV ist die aktuelle HEAD revision im Repository,
    • filename ist die Datei mit den Änderungen des Benutzers.
  6. Dann gibt es bei .txt .html und ähnlichen (ASCII und damit menschenlesbaren) Dateien die Möglichkeiten Diff (Unterschiede ansehen) / Merge (Dateien zusammenführen). Bei binären Dateien (Graphik, Office usw.) muss man von Hand vergleichen, ggf. Änderungen zusammenführen und anschließend die Datei als Resolved markieren bzw. die Dateien .rOLDREV und .rNEWREV löschen. OpenOffice hat übrigens eine recht gute „Dateien vergleichen“-Funktion.
  7. Repository Backup: svnadmin hotcopy <path/to/repository> <path/to/backup> --clean-logs

Merge mit TortoiseSVN

TortoiseSVN ist ein extrem komfortabler SVN-Client für Windows, der sich in das Kontextmenü des Datei-Browsers einklinkt. Weitere Informationen und Download unter tortoisesvn.tigris.org.

Merge verschmilzt zwei bestimmte Revisionen auf verschiedenen Zweigen eines Projektes miteinander.

Ein sinnvoller Arbeitsablauf sieht für uns z.B. so aus: Für eine Website gibt es einen Hauptentwicklungszweig (trunk), in dem das gesamte Konzept von Navigation und Inhalt entwickelt wird. Um aber sofort einige Seiten online zu haben, wird davon ein Zweig abgeleitet (branch), in dem nur jeweils die bereits fertigen Seiten enthalten sind.

Hier werden alle Änderungen, die nur für die temporäre Internet-Seite gelten durchgeführt, z.B. alle Hyperlinks zu Seiten, die noch nicht zur Veröffentlichung geeignet sind, gelöscht, sodass es in der vorläufigen Version keine toten Links gibt.

Alle Änderungen, die für beide Zweige gelten sollen, werden im trunk gemacht und anschließend per Commit ins Repository übertragen (Log Message nicht vergessen!), damit sie eine eigene Revisionsnummer erhalten.

Ablauf

Genau die Änderungen dieser Revision können nun per Merge in den branch übernommen werden. Dazu geht man im Windows Explorer auf den Zielordner (branch), öffnet mit der rechten Maustaste das Kontextmenü und wählt TortoiseSVN / Merge….

Es öffnet sich ein Dialogfeld, in dem Pfad und Revisionsnummer von Quelle und Ziel eingegeben werden können:

From: 
__________		(Eingabefeld für Pfad zur Quelle, z.B. subversionpfad/projekt/06_www/trunk, 
			muss von Hand geändert werden, da hier standardmäßig der Zielordner eingetragen ist.
			Gewöhnlich wird man nur 'branch/' löschen müssen)	
Head Revision		(Radiobutton, Auswahl nicht empfehlenswert, sicherer mit Revisionnummer, s.u.)
Revision _______	(Radiobutton und Eingabefeld für Revisionsnummer der Quelle: Hier Nummer eingeben!)
To: 
Use "From:" URL		(Checkbox für Pfad zum Zielordner, Verwendung empfohlen)	
Head Revision		(Radiobutton: Auswählen)
Revision _______	(Radiobutton und Eingabefeld für Revisionsnummer des Ziels - normalerweise nicht erforderlich)
Test Merge (Dry Run) 		(Checkbox: ermöglicht im Voraus zu testen, ob es zu Konflikten kommen wird)

Bei Zweifeln bezüglich der richtigen Revisionsnummer kann man über Show Log aus dem Dialogfeld heraus die Logdateien ansehen. (Bei älteren SVN-Versionen ist die richtige Revisionsnummer die mit der gewünschten Änderung minus eins, da Subversion die Differenz zwischen dieser und der nächsten, also der geänderten für Merge verwendet.) Inzwischen gilt dies nicht mehr, was ja auch viel intuitiver ist. Außerdem können auch mehrere Revisionen auf einmal eingefügt werden. :!: Hierbei sollte man aber auf jeden Fall einen Test Merge durchführen, da es zu Konflikten führt, wenn dieselbe Datei in mehreren dieser Revisionen geändert wurde.

Bei Konflikten muss von Hand nachgearbeitet werden.

Enspricht das Ergebnis des Vorgangs dann den Absichten (im Browser testen), wird der geänderte Zweig per Commit ans Repository gesendet. Erst dadurch wird die Änderung wirksam. Um den Vorgang nachvollziehen zu können, ist eine Log Message nach dem Muster “rev.140 merged into branch: + änderung“ sinnvoll.

Probleme mit TortoiseSVN

Falls man beim Arbeiten mit Tortoise SVN folgende Fehlermeldung bekommt:

Berkeley DB error for filesystem '/subversion/<name_of_repository>/db' while opening
environment:
DB_RUNRECOVERY: Fatal error, run database recovery
bdb: PANIC: fatal region error detected; run recovery

nicht verzweifeln, sondern auf dem Server anmelden und (nicht als root!) folgenden Befehl ausführen:

svnadmin recover /subversion/<name_of_repository>

Falls es dabei Rechteprobleme mit dem Zugriff auf Datein geben sollte, dann diese mit chmod beheben und nocheinmal svnadmin recover ausführen.

vermischtes/subversion.txt · Zuletzt geändert: 2010/07/23 20:16 von Monika Schneiders
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0