webentwicklung-frage-antwort-db.com.de

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

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

  1. Ich habe mit der Änderung meines Projekts begonnen
  2. Eine Reihe von Änderungen an einer Reihe von Dateien vorgenommen
  3. Mir wurde klar, dass mein Ansatz falsch war und ich von vorne anfangen musste
  4. cd'd auf die oberste Ebene meines Projekts und habe einen "svn --recursive revert" durchgeführt. um meine lokale Sandbox auf den Status vor Änderungen zurückzusetzen.
  5. Erschrocken heulte ich, als mir klar wurde, dass in meinem Sandkasten eine Reihe anderer Änderungen ausstehend waren, und ich hatte sie alle ausgelöscht. (der svn-server war letzten Freitag ausgefallen, also konnte ich sie nicht einchecken und hatte sie am Wochenende vergessen)

Glücklicherweise hatte ich in diesem Fall vor dem Verlassen der Arbeit eine "svn diff> temp.txt" erstellt, und die temp.txt-Datei befand sich immer noch auf meiner Festplatte. Daher konnte ich diese Datei in "patch" einfügen und sie wiederherstellen Änderungen verloren.

Aber für meine zukünftige Referenz (d. H. Das nächste Mal, wenn ich den gleichen dummen Fehler mache) ... gibt es eine Möglichkeit, svn mitzuteilen, dass es eine "svn rückgängig machen" rückgängig machen soll? Bewahrt svn irgendwo eine Sicherung der lokalen/nicht eingecheckten Unterschiede auf?

91
Jeremy Friesner

Nein, (absolut)NEIN

Wenn Sie zu Subversion sagen, dass es eine Datei wiederherstellen soll, werden alle Änderungen vom Wind genommen. 

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/Softwareausnahme: Bei Verwendung von TortoiseSVN unter Windows wirft Revert zunächst die Dateien in den Papierkorb und setzt sie anschließend zurück. Sie können in den Papierkorb greifen, um die Dateien wiederherzustellen.

70
Peter Parker

Es gibt eine Lösung ... Gehen Sie in Ihren Papierkorb. Dort finden Sie die neueste Version der gelöschten Datei. Tortoise "wirft" jede zurückgespielte Datei in den Papierkorb.

98
shto

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

Nun, etwas ein bisschen mehr Subversion-spezifisch: Wenn Sie nicht für jede Änderung, die Sie vornehmen, einen Zweig erstellen möchten, können Sie ein paar Trunk lokal überprüfen 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, deren Auschecken welcher Änderung entspricht.

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

30
Vladimir

Kürzlich tat ich diesen Fehler, keine neuen Dateiänderungen (etwa 10) in SVN zu begehen, und alle verschwanden aufgrund meines dummen Fehlers. Was mich jedoch rettete, war die Option "Vorherige Versionen wiederherstellen" im Kontextmenü. Puh, das war eine Erleichterung und eine Lektion gelernt.

13
JProgrammer

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

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

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

Standardmäßig ist das Kontrollkästchen aktiviert, dh Dateien werden in den Papierkorb verschoben. Wenn Sie möchten (meistens möchten Sie dies nicht deaktivieren. Wenn Sie einen Grund haben, lass es mich wissen)

7
Manohar

Wenn Sie InteliJ verwenden, sind Sie eine glückliche Person. Im oberen Menü haben Sie eine Versionskontrolloption, unter der Sie die lokale Historie finden, in der Sie die gesamte Historie der ausgewählten Datei finden, einschließlich aller Operationen, die Sie mit dieser Datei ausgeführt haben (Update, Commit, Revert).

Viel Glück. Arkde

5
Aurelian Cotuna

Auch wenn Sie Ihren .NET-Code (.cs-Dateien usw.) wiederhergestellt haben und Ihre Anwendung vor dem Zurücksetzen erstellt haben. Nachdem Sie jedoch Änderungen vorgenommen haben, können Sie Änderungen an der Assembly-Datei mit einem der Reflektor-Tools zum Anzeigen von Code wiederherstellen.

4
scor4er

Ich habe die Lösung (Visual Studio + AnkhSVN) wiederhergestellt und verliere die Änderungen einiger Dateien. Ich kann die Datei nicht im Papierkorb finden.

BUT: Ich habe meine verlorenen Dateien mit Handy Recovery wiederhergestellt, d. H. SVN löscht meine Dateien beim Rücksetzen.

Verwenden Sie eine Datenwiederherstellungssoftware, um wiederhergestellte Dateien wiederherzustellen (z. B. trial Handy Recovery )

1

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

1
fyts

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

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

"Zum Glück hatte ich in diesem Fall vor dem Verlassen der Arbeit eine" svn diff> temp.txt "erstellt, und die temp.txt-Datei befand sich immer noch auf meiner Festplatte, sodass ich diese Datei in" patch "einfügen und wiederherstellen konnte meine verlorenen Änderungen. "

Ich kann mir vorstellen, dass es ein allgemeines Paradigma ist, 'svn diff' auszuführen, BEVOR Sie einen 'svn revert' durchführen. Wenn Sie sich daran gewöhnen, dies zu tun, selbst wenn der Diff gerade an das Terminal gesendet wird, haben Sie zumindest einen möglichen Weg, um Ihre verlorenen Änderungen wiederherzustellen.

0
shaneb