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.
svnadmin create REPOSITORYNAME; anschließend ggf. Besitzer und Rechte anpassen.<path_to>\bin\TortoisePlink.exe -P <custom_ssh_port>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..rOLDREV und .rNEWREV löschen. OpenOffice hat übrigens eine recht gute „Dateien vergleichen“-Funktion.svnadmin hotcopy <path/to/repository> <path/to/backup> --clean-logsTortoiseSVN 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.
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.
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.