Gibt es eine Möglichkeit, sich von einem versehentlichen "svn revert" zu erholen?

94

Ich habe es heute Morgen geschafft, mich in den Fuß zu schießen, indem ich Folgendes getan habe:

  1. Ich habe angefangen, an einer Änderung an meinem Projekt zu arbeiten
  2. Eine Reihe von Änderungen an einer Reihe von Dateien vorgenommen
  3. Mir wurde klar, dass mein Ansatz völlig falsch war und ich von vorne anfangen musste
  4. cd'd auf die oberste Ebene meines Projekts und machte eine "svn --recursive Revert". um meine lokale Sandbox auf den Status vor den Änderungen zurückzusetzen.
  5. Heulte entsetzt auf, als mir klar wurde, dass in meinem lokalen Sandkasten noch einige andere Änderungen ausstanden, und ich hatte sie alle ausgelöscht. (Der SVN-Server war letzten Freitag ausgefallen, sodass ich sie nicht einchecken konnte und sie über das Wochenende vergessen hatte.)

Glücklicherweise hatte ich in diesem Fall eine "svn diff> temp.txt" erstellt, bevor ich die Arbeit am Freitag verließ, und die temp.txt-Datei befand sich noch auf meiner Festplatte, sodass ich diese Datei in "patch" einspeisen und meine wiederherstellen konnte verlorene Änderungen.

Aber für meine zukünftige Referenz (dh wenn ich das nächste Mal den gleichen dummen Fehler mache) ... gibt es eine Möglichkeit, svn anzuweisen, ein "svn-Zurücksetzen" rückgängig zu machen? Bewahrt svn irgendwo ein Backup der lokalen / nicht eingecheckten Unterschiede auf?

Jeremy Friesner
quelle
34
IIRC TortoiseSVN verschiebt die zurückgesetzten Dateien in den Papierkorb, aber der ursprüngliche SVN-Befehlszeilenclient verfügt nicht über solche Nuancen.
Dario Solera
1
Ich kann die Datei nicht im Papierkorb finden. Habe ich kein Glück?
Dalcantara
5
Top Kommentar zum Papierkorb. Das hat mir gerade den Tag gerettet!
OrganicPanda
2
meine auch! ich danke dir sehr. Die zurückgesetzte Datei wurde gerade in meinem Papierkorb angezeigt und konnte wiederhergestellt werden.
Sladda
1
Du hast gerade meinen Hintern mit diesem Papierkorb gerettet !!!
Epirocks

Antworten:

79

Nein, (absolut) NEIN .

Wenn Sie zu Subversion sagen, dass eine Datei zurückgesetzt werden soll, sind alle Änderungen vom Wind verschwunden.

Nur dein Gedächtnis kann sie zurückbekommen.

Ausnahme: Neue Dateien, die Sie hinzugefügt haben, verlieren nur ihren Status "hinzugefügt", aber die Datei bleibt in diesem Verzeichnis, nur der Status ist unbekannt ("?")

Plattform- / Software-Ausnahme: Bei Verwendung von TortoiseSVN unter Windows wirft Revert die Dateien zuerst in den Papierkorb und setzt sie dann zurück. Sie können in den Papierkorb greifen, um die Dateien wiederherzustellen.

Peter Parker
quelle
10
Nachtrag zu oben: Die Versionskontrolle hilft Ihnen nur, wenn Sie die Dateien tatsächlich festschreiben. Wenn Sie in der Lage sind, durch das Töten Ihrer Arbeitskopie Stunden der Arbeit zu töten, verpflichten Sie sich nicht häufig genug.
Myron-Semack
1
Einverstanden ... in diesem Fall war der SVN-Server ausgefallen, und deshalb standen noch nicht festgeschriebene Änderungen aus. : ^ (
Jeremy Friesner
13
Ja!!! Es gibt eine Möglichkeit, sich abhängig von Ihrem Betriebssystem und / oder Ihrer IDE zu erholen - lesen Sie die anderen Antworten unten, bevor Sie einen Herzinfarkt haben !!
HDave
2
Das stimmt nicht, es ist ein bisschen komplizierter als ein einfaches NEIN. Verwenden Sie ein Wiederherstellungstool oder wenn Sie Glück haben, befinden sich die Dateien im Papierkorb.
RaphMclee
1
@RalphMclee: Das hängt von der Plattform und dem SVN-Client ab. TortoiseSVN speichert zurückgesetzte neue Dateien im Papierkorb. Dies ist nur eine Ausnahme. Und ich bezweifle, dass ein Wiederherstellungstool die Änderungen Ihrer Dateien auf konsistente Weise rekonstruieren kann. Es ist viel einfacher und klarer, sich zu erinnern: Zurücksetzen wird Ihre Arbeit zerstören, verwenden Sie es vorsichtig!
Peter Parker
104

Es gibt eine Lösung ... Gehen Sie in Ihren Papierkorb. Dort finden Sie die neueste Version der gelöschten Datei. Schildkröte "wirft" jede Datei, die sie zurücksetzt, in den Papierkorb.

shto
quelle
2
Dies ist übrigens auch der Grund, warum TortoiseSVN beim Zurücksetzen so langsam erscheint. Das Verschieben einer Datei in den Papierkorb ist ein sehr langsamer Vorgang, wenn der Papierkorb voll ist. Sie können diese Funktion in den TortoiseSVN-Einstellungen "Allgemein - Dialoge 1" deaktivieren.
Wim Coenen
8
Danke Mann, du hast mich gerettet! Ich habe versehentlich Revert gemacht und fast 2 Wochen Arbeit verloren. Zum Glück habe ich es im Papierkorb gefunden.
Arie Livshin
2
@ArieLivshin, warum würdest du 2 Wochen ohne Verpflichtung arbeiten? Es scheint, dass Sie mehr über Zweige erfahren müssen.
JoelFan
Ärgerlicherweise macht ankhsvn das nicht
Phil Hale
Vielen Dank .. Sehr Hilfe voll.
Prem Singh Bist
32

Nicht wirklich Subversion-spezifisch, aber wenn Sie mit Eclipse arbeiten, können Sie Ihr Glück in der lokalen Geschichte versuchen.

Nun etwas Subversion-spezifischeres: Wenn Sie nicht bei jeder Änderung einen Zweig erstellen möchten, können Sie einige Trunk-Dateien lokal auschecken lassen (Trunk-Modif-1, Trunk-Modif-2). .). Jede "Änderung" wird in einem separaten Baum durchgeführt und Sie müssen nur eine Liste führen, welche Check-Outs welcher Änderung entsprechen.

Oder Sie könnten Git lokal verwenden, aber ich habe es nie versucht.

Vladimir
quelle
3
Zu Ihrer Information - Rufen Sie den lokalen Verlauf über das Kontextmenü "Aus lokalem Verlauf wiederherstellen" auf.
HDave
Für den Eclipse-Teil ist hier eine konkretere Antwort: stackoverflow.com/a/18220708/517705
Sk8erPeter
14

Vor kurzem ist dieser Fehler aufgetreten, keine neuen Dateiänderungen (ca. 10) auf SVN zu übertragen, und alle sind aufgrund meines dummen Fehlers verschwunden. Was mich jedoch gerettet hat, war die Windows-Option "Frühere Versionen wiederherstellen" im Kontextmenü. Puh, das war eine Erleichterung und Lektion gelernt.

JProgrammer
quelle
Danke dir! Dies ersparte mir die Wiederholung der Arbeitsstunden! Ich habe diese Funktion von Windows noch nie gesehen, aber sie hat meinen Speck gerettet!
NibblyPig
Wohin kann ich die 6000 Dollar schicken, die ich Ihnen dafür schulde, weil ich so Arbeitstage gespart habe? Lektion gelernt ...
HDave
Danke, es hat mir den Tag gerettet.
Opax Web
Ich halte den Checkpointing, der eine solche Wiederherstellung unterstützt, deaktiviert, da dies die Leistung beeinträchtigt. Vor kurzem hat Eclipse einen Ordner meiner Projekte einschließlich des Git-Archivs aufgrund eines Problems mit der Funktion "Rückgängig" gelöscht, und ich wünschte mir eher, ich hätte ihn aktiviert. Ein Windows-Programm namens Recuva hat mich jedoch durch Durchsuchen des gelöschten Dateibereichs gerettet. Ich habe sehr darauf geachtet, dem betroffenen Laufwerk keinen zusätzlichen Inhalt hinzuzufügen, bis ich alle meine Dateien wiederhergestellt hatte, und es gab mir jede Quelldatei, die seit meiner letzten Sicherung eine Woche zuvor geändert wurde. Binärdateien konnten größtenteils nicht wiederhergestellt werden.
Carl
8

Sie können die Dateien nicht wiederherstellen, wenn Sie den svn-Befehlszeilenclient verwenden .

Sie können sie jedoch wiederherstellen, wenn Sie TortoiseSVN als SVN-Client verwenden. TortoiseSVN verschiebt sie automatisch in den Papierkorb. Sie können sie von dort nach einem versehentlichen Zurücksetzen wiederherstellen.

Dies ist eine konfigurierbare Option in TortoiseSVN. Es befindet sich unter Einstellungen -> Dialog 1 -> Papierkorb beim Zurücksetzen verwenden.

Standardmäßig ist diese Option aktiviert. Dies bedeutet, dass Dateien in den Papierkorb verschoben werden. Wenn Sie möchten (meistens möchten Sie dies nicht deaktivieren. Wenn Sie einen Grund haben, lassen Sie es mich bitte auch wissen).

Manohar
quelle
1
Genial! ... hat mich gerettet
Janani Kumar
6

Wenn Sie InteliJ verwenden, sind Sie eine glückliche Person. Im oberen Menü haben Sie eine Option zur Versionskontrolle. Darunter finden Sie die Option für den lokalen Verlauf, in der Sie den gesamten Verlauf für die ausgewählte Datei finden, einschließlich aller Vorgänge, die Sie mit dieser Datei ausgeführt haben (Aktualisieren, Festschreiben, Zurücksetzen).

Viel Glück, Arkde

Aurelian Cotuna
quelle
1
Und wenn es eine neue Datei war, wird die Datei selbst gelöscht. Wählen Sie in diesem Fall den Ordner, in dem sich die Datei befand, in der Projektansicht aus und wählen Sie dann "Lokaler Verlauf". IntelliJ hat den Tag wieder gerettet.
Nufail
4

Auch wenn Sie Ihren .NET-Code (.cs-Dateien usw.) zurückgesetzt und Ihre Anwendung vor dem Zurücksetzen erstellt haben, aber nachdem Sie Änderungen vorgenommen haben, können Sie Änderungen aus der Assembly-Datei mit einem der Reflektor-Tools wiederherstellen, um Code anzuzeigen.

scor4er
quelle
2

Ich habe die Lösung zurückgesetzt (Visual Studio + AnkhSVN) und Änderungen an wenigen Dateien verloren. Ich kann die Datei nicht im Papierkorb finden.

ABER: Ich habe meine verlorenen Dateien mit Handy Recovery wiederhergestellt, dh SVN löscht meine Dateien einfach beim Zurücksetzen.

Verwenden Sie eine beliebige Datenwiederherstellungssoftware, um zurückgesetzte Dateien wiederherzustellen (z. B. Testversion von Handy Recovery ).

Peter Barbanyaga
quelle
2

Ich hatte großes Glück, ein lokales Änderungsprotokoll der Datei (Local Revisions) im Verlaufsbrowser in Eclipse zu finden. Ich hatte die Unterschiede nacheinander überprüft und vor dem Überschreiben einige Speicherungen in der Datei vorgenommen.

fyts
quelle
1

Nein, SVN führt kein Protokoll oder Backup (obwohl in den anderen Antworten eine Lösung für TortoiseSVN angegeben ist).

Aber falls jemand die Antworten durchsucht und diesen Kommentar in der Frage des OP nicht bemerkt hat:

"Glücklicherweise hatte ich in diesem Fall eine" svn diff> temp.txt "erstellt, bevor ich die Arbeit am Freitag verließ, und die temp.txt-Datei befand sich noch auf meiner Festplatte, sodass ich diese Datei in" patch "einspeisen und wiederherstellen konnte meine verlorenen Veränderungen. "

Ich stelle mir vor, es ist ein gängiges Paradigma, 'svn diff' zu machen, BEVOR Sie ein 'svn revert' machen. Wenn Sie sich angewöhnen, dies zu tun, haben Sie mindestens einen möglichen Weg, um Ihre verlorenen Änderungen wiederherzustellen, selbst wenn der Diff nur an das Terminal zurückgegeben wird.

Shaneb
quelle