Frage

Ich löschte eine Datei aus einem Repo und will jetzt ist es zurück zu setzen. Das Beste, was ich herausfinden kann, ist:

  • Update auf die Revision vor dem Löschen
  • kopieren Sie die Dateien an anderer Stelle
  • update to head
  • kopieren Sie die Dateien zurück
  • fügen Sie
  • commit

Das nur schlecht riecht und es verliert die ganze Geschichte zu booten. Es hat doch ein besserer Weg, dies zu tun. Ich habe bereits in SVN-Buch sieht aber nichts gefunden und jetzt suche den SVN-Tag nach unten Liste.

War es hilfreich?

Lösung

Verwenden Sie svn merge:

svn merge -c -[rev num that deleted the file] http://<path to repository>

So ein Beispiel:

svn merge -c -12345 https://svn.mysite.com/svn/repo/project/trunk
             ^ The negative is important

Für TortoiseSVN (ich glaube, ...)

  • Direkt im Explorer klicken, in TortoiseSVN -> Merge ...
  • Stellen Sie sicher, dass „eine Reihe von Revisionen Merge“ ausgewählt ist, klicken Sie auf Weiter
  • Im Textfeld „Revisionsbereich zusammenführen“, geben Sie die Revision, die die Datei
  • entfernt
  • Überprüfen Sie die "Reverse-merge" aktivieren, klicken Sie auf Weiter
  • Klicken Sie auf Merge

Das ist völlig ungetestet, aber.


Herausgegeben von OP : Dies funktioniert auf meiner Version von TortoiseSVN (die alten Art, ohne die nächste Taste)

  • Gehen Sie zu dem Ordner, Sachen aus wurde delated
  • Direkt im Explorer klicken, in TortoiseSVN -> Merge ...
  • in der Aus die Revision eingeben, der den Lösch
  • tat
  • im die Revision vor dem Löschen ein.
  • Klicken Sie auf "merge"
  • commit

Der Trick zu verschmelzen ist zurück . Ein großes Lob an sean.bright für mich in der richtigen Richtung!


Edit: Wir verwenden verschiedene Versionen. Die Methode, die ich beschrieben funktionierte perfekt mit meiner Version von TortoiseSVN.

Bemerkenswert ist auch, dass, wenn es in der mehrere Änderungen waren begehen Sie Reverse-Fusion sind, werden Sie die anderen Änderungen rückgängig machen wollen, sobald die Zusammenführung durchgeführt wird, bevor Sie zu begehen. Wenn Sie dies nicht tun, werden diese zusätzlichen Änderungen auch rückgängig gemacht werden.

Andere Tipps

Das Problem mit dem Tun als eine svn merge von Sean Heller vorgeschlagen ist, dass es weitere Änderungen in der gleichen Revision wie die Streichung vorgenommen wieder einführt. Ein svn copy ist ein gezielter Betrieb, dass nur die gelöschten Dateien betreffen.

Tortoise SVN verwenden Sie können eine Datei wieder aufleben lassen, die aus der Arbeitskopie Verzeichnis und aus späteren SVN Revisionen gelöscht wurde über eine svn Kopie wie folgt:

  • Wechseln Sie zu dem Arbeitskopie Ordner, der zuvor die Datei enthalten ist.
  • Rechtsklick auf den Ordner in Explorer zu TortoiseSVN. -> Show log
  • Rechtsklick auf die Versionsnummer unmittelbar vor der Revision, der die Datei gelöscht und wählen Sie „Browse-Repository“.
  • Rechtsklick auf die gelöschte Datei und wählen Sie „Kopieren Kopie zu arbeiten ...“ und speichern.

Die gelöschte Datei wird nun in der Arbeitskopie Ordnern. Um erneut hinzufügen zurück zum SVN, Rechtsklick auf die wiederhergestellte Datei und wählen Sie SVN Commit.

. NB: Diese Methode wird die Vorgeschichte der wiederhergestellten Datei erhalten, aber die Vorgeschichte in der TortoiseSVN zu sehen melden Sie sich sicher, „Stop auf Kopieren / Umbenennen“ in dem Log-Meldungen Dialog unkontrolliert vornehmen müssen

Für die Vollständigkeit, ist es das, was Sie in der SVN-Buch gefunden hätte, hätte man gewusst, was Sie suchen. Es ist, was Sie bereits entdeckt haben:

Änderungen rückgängig machen

Gelöschte Objekte Resurrecting

Das Gleiche gilt, aus der jüngeren (und ausführlich) Version des Buchs:

Änderungen rückgängig machen

Gelöschte Objekte Resurrecting

Mit der Schildkröte SVN Kopierfunktion commited Änderungen rückgängig machen:

  1. Rechtsklick auf den übergeordneten Ordner, der die gelöschten Dateien / Ordner
  2. enthält
  3. Wählen Sie die "Show log"
  4. Wählen und Rechtsklick auf die Version vor dem die Änderungen / gelöscht wurde getan,
  5. Wählen Sie die Schaltfläche "Durchsuchen Repository"
  6. Wählen Sie die Datei / Ordner, die wiederhergestellt und der rechten Maustaste werden muss,
  7. Wählen Sie „Kopie“, die die Dateien / Ordner auf den Kopf Revision kopiert

Ich hoffe, das hilft

Ich scheine immer svn Kopie als Server-Betrieb zu verwenden, so nicht sicher, ob es mit zwei Arbeitsweg funktioniert.

Hier ist ein Beispiel einer gelöschten Datei in eine lokale Arbeitskopie des Projekts zur Wiederherstellung:

svn copy https://repos/project/modules/module.js@3502 modules/module.js

Während innerhalb des Projektverzeichnisses zu sein. Dies funktioniert auch für die Wiederherstellung ganze Verzeichnisse.

Wenn Sie Tortoise SVN verwenden, sollten Sie in der Lage sein, Änderungen rückgängig machen von nur dieser Revision in Ihrer Arbeitskopie (effektiv die Durchführung einer Reverse-merge), dann noch tun begehen die Datei erneut hinzuzufügen. Schritte zu folgen, sind:

  1. Wechseln Sie in den Ordner in der Arbeitskopie in dem Sie die Datei gelöscht.
  2. Zum Repo-Browser.
  3. Suchen Sie nach Revision in dem Sie die Datei gelöscht.
  4. In der Änderungsliste finden Sie die Datei gelöscht.
  5. Rechtsklick auf die Datei und wählen Sie „aus dieser Revision Änderungen rückgängig“.
  6. Das wird die Datei auf Ihrer Arbeitskopie wiederherzustellen, Geschichte zu halten.
  7. Übernehmen Sie die Datei, um sie hinzuzufügen, wieder in das Repository.

Mit Tortoise SVN :

  

Wenn Sie nicht Ihre Änderungen noch verpflichtet, können Sie einen Revert auf den übergeordneten Ordner tun, wo Sie die Datei oder das Verzeichnis gelöscht.

     

Wenn Sie bereits die gelöschte Datei begangen, dann können Sie das Repository-Browser verwenden, um die Revision zu ändern, wo die Datei existiert noch und dann verwenden Sie den Befehl Kopieren in ... aus dem Kontextmenü. Geben Sie den Pfad zu Ihrer Arbeitskopie als Ziel und die gelöschte Datei wird aus dem Repository in Ihrer Arbeitskopie kopiert werden.

Der einfachste Weg, ich in der Lage gewesen, Dateien wiederherzustellen, und nicht verlieren Revisionsgeschichte wird mit SVN kopieren , das merge Beispiel oben erscheint mir wie ein komplexer Weg, um die gleiche Sache zu erreichen. Warum ist es notwendig, zu fusionieren, wenn Sie einfach eine Revision wiederherstellen möchten?

Ich verwende den folgenden in diesem Fall, und es funktioniert ganz gut.

svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.cs

Ich scheine immer svn copy als Server-Betrieb zu verwenden, so nicht sicher, ob es mit zwei Arbeitsweg funktioniert.

Es soll möglich sein, nur Besuche die eine Datei, die Sie wiederherstellen möchten. Probieren Sie etwas wie svn co svn://your_repos/path/to/file/you/want/to/restore@rev wo rev ist die letzte Revision, bei der die Datei existiert.

Ich hatte genau dies vor einer Weile zu tun, und wenn ich mich richtig erinnere, mit der -r Option svn funktionierte nicht; Ich hatte die :rev Syntax zu verwenden. (Obwohl ich es rückwärts erinnert haben könnte ...)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top