Subversion ist das wohl am meisten eingesetzte Versionsverwaltungssystem neben CVS – ich verwalte quasi alles von Webseiten bis hin zu Software, die ich entwickle mit der Subversion Software.
Durch ein Mißgeschick ist jedoch schnell mal etwas gelöscht, eine falsche „nderung per comit ins Subversion übermittelt.
Ist erstmal etwas im Subversion gelöscht oder umbenannt ist, ist die gute Frage: Wie stelle ich den andere n Zustand wieder her, ohne dabei die Historie zu verlieren? (Denn sonst könnte man einfach eine alte Version auschecken und die Dateien in die aktuelle Version wieder aufnehmen.)
Die Lösung findet – natürlich – im Subversion Buch im Kapitel „typische Anwendungsfälle„.
Es gibt in der Tat sogar zwei Wege zum Ziel zu kommen:

  • Reverse Diff um einen ganzen Commit im Subversion rückgängig zu machen
  • svn copy um nur Teile eines commits überzukopieren (wenn man nicht alles rückgängig machen möchte)

Für den reverse diff sieht das Vorgehen in etwa so aus:
svn merge -c -1234 http://example.com/repo/trunk

Für eine Kopie (teilweises rückgängig machen) sieht das in etwa so aus
svn copy -r1233 -m „svn wiederherstellung“ http://example.com/repo/trunk/ordner/kaputt@1233 http://example.com/repo/trunk/ordner/

Dabei ist 1234 die Version in der etwas kaputt gemacht wurde, 1233 die wo noch alles in Ordnung ist.
In Eclipse geht das ganze auch mit GUI Unterstützung, z.B. in Subversive indem man „merge“ verwendet. Als „start revision“ wählt man die Version in der etwas kaputt gemacht wurde (in unserem Beispiel die 1234) und als „end revision“ die Version in der noch alles ok war. (Hier: 1233)
Und mit einem heilen Subversion Repository ist der Tag gerettet.