SVN rückgängig machen Löschen vor Festschreiben


135

Wenn Sie ein Verzeichnis aus einer SVN-Arbeitskopie löschen, es aber noch nicht festgeschrieben haben, ist es nicht offensichtlich, wie Sie es zurückerhalten können. Google schlägt sogar "svn rückgängig machen Löschen vor Festschreiben" als allgemeine Abfrage vor, wenn Sie "svn rückgängig machen d" eingeben, aber die Suchergebnisse sind nicht hilfreich.

edit: Ich hätte gerne eine Lösung, die in Subversion 1.4.4 funktioniert


Gibt es Geschwisterverzeichnisse zu dem Verzeichnis, das Sie mit ausstehenden Änderungen gelöscht haben? Wenn ja, seien Sie vorsichtig, wenn Sie von einer höheren Ebene zurückkehren, da Sie möglicherweise Änderungen verlieren.
Russell

Antworten:


145

svn revert deletedDirectory

Hier ist die Dokumentation für den svn revertBefehl.


BEARBEITEN

Wenn deletedDirectorymit rmdirund nicht gelöscht wurde svn rm, müssen Sie tun

svn update deletedDirectory

stattdessen.


3
Das muss neu sein, es funktioniert nicht in SVN 1.4.4. (Es war das erste, was ich versuchte.)
LaC

4
Dies ist, was 1.4.4 sagt, übrigens: $ svn help revert revert: Stellt die makellose Arbeitskopiedatei wieder her (machen Sie die meisten lokalen Änderungen rückgängig). Verwendung: PATH zurücksetzen ... Hinweis: Dieser Unterbefehl erfordert keinen Netzwerkzugriff und löst alle Konfliktzustände. Entfernte Verzeichnisse werden jedoch nicht wiederhergestellt.
LaC

1
1.6.6 hat den gleichen Text in der Hilfe, aber er hat bei mir funktioniert, als ich ihn getestet habe. Beachten Sie, dass , wenn Sie nicht verwenden , um svn deletedas Verzeichnis zu löschen, sondern es gelöscht verwenden rmdir, die Sie brauchen, svn update deletedDirectorystatt.
Michael Hackner

Ich habe eine Datei (svn del) aus einem lokalen svn-ed-Verzeichnis gelöscht. svn update hat nicht funktioniert, aber svn revert hat funktioniert. Ich habe SynchroSVN für Mac verwendet. Vielen Dank jedoch für die Tipps.
Karim

5
Verwenden Sie gemäß dem Link svn -R revert, um das gesamte Verzeichnis mit allen Inhalten wiederherzustellen, was wahrscheinlich das ist, was Sie wollen. svn revert ohne -R stellt nur das Verzeichnis wieder her, nicht den Inhalt.
n13

156

1) tun

svn revert . --recursive

2) Ausgabe für Fehler wie analysieren

"Failed to revert 'dir1/dir2' -- try updating instead."

3) Rufen Sie svn für jedes der Fehlerverzeichnisse auf:

svn up dir1/dir2

12
Dies ist die genaueste Antwort. Vielen Dank, Sie haben mir sehr geholfen.
Greenoldman

1
Nur dass das alles umkehrt? Vielleicht möchten Sie das nicht tun.
n13

1
Dies ist am sinnvollsten, wenn Sie einen gesamten Ordner haben, von dem SVN glaubt, dass er gelöscht wurde. Ich hatte das beim Auschecken einer Arbeitskopie. Ein Ordner war bereits vorhanden, daher wurde er in Konflikt gebracht und nicht ausgecheckt. Es war ein Link zu einem anderen Ordner. Ich benannte es um und versuchte svn up, es zum Auschecken zu bringen, erkannte den Konflikt, tat es svn resolved foound svn statussagte mir, ich hätte ungefähr 10.000 Dateien als markiert D. svn upund svn revertbekam sie nicht zurück, aber dies löste das Problem.
Simbabque

6
+1, mit --recursivedessen Hilfe der Inhalt gelöschter Verzeichnisse wiederhergestellt werden kann.
Melebius

1
Oh mein Gott, du hast meinen Abend gerettet!
ArturOlszak

32

Was für mich funktioniert hat ist

svn revert --depth infinity deletedDir

Dies funktionierte hervorragend für mich (svn 1.7.10), wo svn revert deletedDir den Job nicht erledigte . Hervorragende Antwort.
Tom

4

Führen Sie einen (rekursiven) Wiederherstellungsvorgang von einer Ebene über dem gelöschten Verzeichnis aus.


1
Dies wird viel mehr Änderungen als nötig auslöschen.
Michael Hackner

Das funktioniert nicht mit Subversion 1.4.4 (ich habe es gerade versucht). svn help revert sagt sogar: "Dieser Unterbefehl erfordert keinen Netzwerkzugriff und behebt alle Konfliktzustände. Entfernte Verzeichnisse werden jedoch nicht wiederhergestellt." Es tut mir leid, ich hätte die Version angeben sollen. 1.4.4 ist das, was mit Mac OS X 10.5 geliefert wird.
LaC

4

Um daraus einen Einzeiler zu machen, können Sie Folgendes ausprobieren:

svn status | cut -d ' ' -f 8 | xargs svn revert

Ich kann ein Verzeichnis mit Leerzeichen im Namen erstellen. Es kann AFAIK brechen.
Denis Barmenkov

1

Die einfachste Lösung, die ich finden konnte, bestand darin, das übergeordnete Verzeichnis aus der Arbeitskopie zu löschen (mit rm -rf, nicht svn delete) und dann svn update bei den Großeltern auszuführen. Wenn Sie beispielsweise a / b / c gelöscht haben, rm -rf a / b, cd a, svn up. Das bringt alles zurück. Dies ist natürlich nur dann eine gute Lösung, wenn Sie keine anderen nicht festgeschriebenen Änderungen im übergeordneten Verzeichnis haben, die Sie behalten möchten.

Hoffentlich steht diese Seite das nächste Mal, wenn ich diese Frage google, ganz oben auf den Ergebnissen. Es wäre natürlich noch besser, wenn jemand eine sauberere Methode vorschlagen würde.


Dies setzt voraus, dass im übergeordneten Verzeichnis keine Unterverzeichnisse vorhanden sind, für die Änderungen ausstehen.
Russell

0

Sie können den Ordner entfernen und das übergeordnete Verzeichnis aktualisieren, bevor Sie Folgendes festlegen:

rm -r some_dir

svn update some_dir_parent

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.