Wie kann ich einen gelöschten Ordner in Subversion / TortoiseSVN "wiederherstellen"?

96

Wir haben versehentlich den Ordner "Tags" aus unserem Subversion-Repository gelöscht, in dem wir nur ein bestimmtes Tag löschen wollten. Was ist der einfachste Weg, um den Ordner "Tags" zurückzubekommen?

Wir verwenden TortoiseSVN als unseren Client und ich dachte, wenn ich zum Repo-Browser gehe und das Protokoll anzeige, wird es so etwas wie "Änderungen aus dieser Revision zurücksetzen" geben, ähnlich wie in einem ähnlichen Dialogfeld auf Ihrer Arbeitskopie. Aber es gibt dort keinen solchen Befehl ...

Borek Bernard
quelle

Antworten:

115

Kopieren Sie einfach den gelöschten Ordner aus einer früheren Version zurück.

Klicken Sie im Repository-Browser auf die Schaltfläche HEAD (oben rechts), um eine Revision anzuzeigen, in der Ihr Ordner noch vorhanden ist. Klicken Sie dann mit der rechten Maustaste auf diesen Ordner, wählen Sie "Kopieren nach ..." und geben Sie dort den Pfad ein, den Sie haben Der Ordner soll neu erstellt werden (wahrscheinlich derselbe Pfad, der sich bereits im Textfeld befindet).

Mikael Sundberg
quelle
4
Toller Tipp, danke. Ein TortoiseSVN-Gotcha - In diesem Dialogfeld "Kopieren nach ..." musste ich den Pfad von "example.com/svn/tags" in "tags1" und dann zurück ändern, damit die Schaltfläche "OK" aktiviert wurde.
Borek Bernard
2
Dies könnte für Tags in Ordnung sein, sollte aber nicht durchgeführt werden, um einen anderen Ordner wiederherzustellen, da Sie den Verlauf verlieren werden
slckin
3
Es hält die Geschichte, hat es auch getan.
Acdcjunior
Stellen Sie einfach sicher, dass Sie beim Anzeigen des Protokolls das Kontrollkästchen "Beim Kopieren / Umbenennen anhalten" deaktivieren, da TortoiseSVN andernfalls den Verlauf vor Ihrer Wiederherstellungsaktion (offensichtlich) nicht anzeigt ...
Oli,
Es hat total funktioniert. Hat viel Zeit gespart. Danke :)
dgupta3091
78

für die Kommandozeilen-Enthusiasten:

  • Suchen Sie zuerst die Revisionsnummer, unter der Sie gelöscht haben:

    svn log -v http://svnserver/path/to/folderContainingDeletedFolder
    

Angenommen, Sie stellen fest, dass das Verzeichnis in Revision 999 gelöscht wurde (übrigens: Es ist möglicherweise einfacher, die Revisionsnummer mit dem SVN-Repo-Browser zu finden.)

  • Kopieren Sie den Ordner aus der Revision minus 1

    svn copy http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder@998 http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder -m "undeleted folder"
    

voilà du bist fertig!

In Ihrem Fall könnte dies sein:

    svn copy http://svnserver/project/tags@998 http://svnserver/project/tags -m "undeleted folder"
raudi
quelle
1
Vielen Dank ... viel Zeit gespart
Dharani Kumar
Das hat gerade meinen Speck gerettet!
Axiopistie
Ich wollte nur bestätigen, dass der "svn copy" -Ansatz tatsächlich den gesamten Verlauf beibehält und für Ordner rekursiv ausgeführt wird, wobei der Ordner und alle untergeordneten Elemente wiederhergestellt werden.
WallStProg
11

Die meisten dieser Antworten werden bis zu einem gewissen Grad funktionieren, aber die richtige Antwort ist Daniels. Führen Sie eine umgekehrte Zusammenführung durch. Auf diese Weise behalten Sie den Versionsverlauf.

svn merge -r R1:R2

Dabei ist R1 die Revision, an der Sie sich befinden, und R2 die Revision, die die gelöschte Datei / den gelöschten Ordner enthält.

Meilen
quelle
1
Bei einer umgekehrten Zusammenführung sollte R1 die Revision sein, die Sie zurücksetzen möchten, wobei R2 die Revision davor ist.
Arleslie
2
Sie verlieren keine Geschichte mit svn copy.
Maxschlepzig
Für diejenigen von uns, die keine Kommandozeilen-Enthusiasten sind, siehe: tortoisesvn.net/docs/nightly/TortoiseSVN_en/…
Pascal
2
Würde dies nicht alle gelöschten Dateien / Ordner wiederherstellen? Würde dies funktionieren, wenn ich nur einen bestimmten gelöschten Ordner wiederherstellen möchte, aber keine anderen gelöschten Ordner?
ABl. 7,
8

Sie müssen eine umgekehrte Zusammenführung durchführen .

Einzelheiten dazu (und so ziemlich alles, was Sie jemals mit SVN tun möchten oder müssen) finden Sie im offiziellen Buch online .

Daniel
quelle
3

Nach Raudis Antwort, die nach dieser Überarbeitung für mich funktioniert hat.

Einige SVN-Clients benötigen möglicherweise die mit dem Revisionsparameter -r angegebene Versionsnummer, anstatt @ nach dem Ordner wie folgt zu verwenden:

svn copy svn://svnserver/project/tags svn://svnserver/project/tags **-r 998** -m "undeleted folder"
Paul
quelle
Wenn Sie aus einem noch vorhandenen Ordner wiederherstellen, -r <revision>funktioniert dies. Wenn Sie jedoch versuchen, den Ordner direkt wiederherzustellen, müssen Sie ihn verwenden @<revision>. Andernfalls wird angezeigt, dass die Datei nicht gefunden wurde.
Arleslie
2

Goto Repository BrowserIhrer repositoryrechten Maustaste auf den übergeordneten Ordner , in dem gelöschten Ordner vorhanden war. Wählen Sie nun Show Logim übergeordneten Ordner die vorherige Version aus, in der Sie den Löschvorgang ausgeführt haben. Sie haben eine Liste und klicken mit der rechten Maustaste auf den Ordner aus den Revisionsinformationen und wählen Update to this Revision.

Du bist fertig

Abdul Munim
quelle
Oh, ich verstehe, es war nicht im Dialogfeld "Protokoll anzeigen", sondern im Hauptfenster des Repo-Browsers. Mit diesem Befehl wird jedoch versucht, meine lokale Arbeitskopie zu aktualisieren, während ich dieses Problem direkt auf dem Server beheben möchte (Sie können sich vorstellen, dass das Auschecken von Hunderten von Tags mit jeweils Tausenden von Dateien nicht genau das ist, was ich möchte machen).
Borek Bernard
Es hat bei mir funktioniert. Die Kontextmenüoption (mit der rechten Maustaste) lautet "Änderungen aus dieser Revision zurücksetzen" und würde das Zusammenführen der Änderungen rückgängig machen.
hsg