76 Stimmen

Rollen Sie das gesamte SVN-Repository auf eine ältere Revision zurück

Ich habe mein SVN-Repository durcheinander gebracht und muss jetzt das gesamte Repository von Revision 28 auf 24 zurücksetzen und möchte keinen Umgang mit Diffs oder Konflikten haben. Gibt es einen schnellen und einfachen Weg, dies zu tun? Ich konnte zuvor einzelne Dateien problemlos mit dem Merge-Befehl zurücksetzen - aber in diesem Fall möchte er alle Dateien wieder in das Repository von Revision 28 hinzufügen, obwohl ich sie eigentlich nur löschen möchte.

Ich benutze die Befehlszeile auf einem Linux-System (Bash).

Danke

EDIT

Danke für all die Hilfe! Ich habe es behoben, indem ich:

svnadmin create /svnroot/.fixed
svnadmin dump -r 1:24 /svnroot/ --incremental > dump.svn
svnadmin load /svnroot/.fixed < dump.svn

Dann habe ich das alte Repository an einen Backup-Ort verschoben und das Repository.fixed in das Repository umbenannt.

Nochmals vielen Dank!

26voto

Justin Love Punkte 4367

Überprüfen Sie svnadmin dump/load. Es erstellt eine Textdatei mit jeder Version Ihrer Dateien. Es ist möglicherweise möglich, alles über oder unter einem bestimmten Punkt zu löschen und neu zu importieren.

Siehe zum Beispiel Migration von Repository-Daten an anderer Stelle

25voto

luapyad Punkte 3819

Ein "umgekehrter" Merge könnte das sein, was Sie benötigen. Siehe Abschnitt "Änderungen rückgängig machen" des SVN-Buchs.

Zum Beispiel: svn merge -r 28:24 [Pfad zu SVN]

14voto

fuenfundachtzig Punkte 7162

Wenn Sie Zugriff auf den SVN-Server haben, können Sie einfach path/db/current bearbeiten, die alte Revisionsnummer, zu der Sie zurückkehren möchten (hier: 24) dort eingeben und nicht mehr benötigte Revisionsdateien (d.h. 25, 26, 27, 28) aus path/db/revs/0/ entfernen. Zumindest hat dies für mich heute funktioniert, nachdem ich versehentlich ein Verzeichnis im Repository entfernt hatte.

13voto

Sander Rijken Punkte 21069

Wenn Sie wirklich 'Beweise' löschen müssen, dass die Dateien jemals existierten, müssen Sie die oben beschriebenen svndump/svnload-Aktionen ausführen.

In einer 'normalen' Situation, in der Sie einen Fehler gemacht haben, müssen Sie einen Reverse-Merge durchführen. Dadurch wird sichergestellt, dass die Änderungen nach r24 rückgängig gemacht, unterschieden usw. werden können.

Der folgende Befehl sollte funktionieren, um Ihre Änderungen rückgängig zu machen (Sie müssen das Ergebnis des Merges übernehmen, um den Merge im Repository widerzuspiegeln)

svn merge -r 28:24

6voto

MarcH Punkte 17384

Wenn Sie keine Administratorrechte haben, können Sie keine alten Überarbeitungen löschen, ABER Sie können sie immer noch extrem gut verstecken mit nur einem erstaunlich einfachen "svn copy" Befehl (nickf und JesperE haben dies bereits erwähnt, aber auf eher kryptische Weise)

svn delete protocol://svnserver/some/resource
svn copy protocol://svnserver/some/resource@24 protocol://svnserver/some/resource

Und das war's, Revisionen 25 bis 28 sind vollständig aus dem svn log verschwunden. Es ist überhaupt kein Hack, es ist ein sicheres und (kaum ...) dokumentiertes Feature.

Wenn "resource" ein Verzeichnis ist, müssen Sie es aus der letzten URL entfernen:

svn copy protocol://svnserver/some/directory@24 protocol://svnserver/some/

(sonst würden Sie es in sich selbst kopieren)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X