Möchten Sie Revisionen aus meinem SVN-Repository löschen?


33

Die letzten Revisionen in meinem Code-Repo sind beschädigt und haben meine App destabilisiert. Ich möchte zu einer früheren Version zurückkehren.

Ich möchte jedoch nicht einfach "Zurücksetzen" für meine Arbeitskopie verwenden. Eigentlich möchte ich meine Head-Revision und mehrere Revisionen vor meinem Repo löschen und dadurch mein Repo auf eine frühere Revision zurücksetzen, die dann zur Head-Revision wird. Weiß jemand, wie ich das machen würde?


1
Sie können alte Revisionen nicht wirklich löschen. Alles, was Sie tun können, ist, die Änderungen rückgängig zu machen und dies zu bestätigen, wie von Felix erwähnt. Interessante Randnotiz, Git (sowie andere Lösungen zur Versionskontrolle) ermöglicht es Ihnen tatsächlich, Revisionen wirklich zu löschen ..
Davr

3
Ja, Sie müssen nur mit svnadmin auf das SVN-Repository zugreifen können. Siehe meine Antwort unten.
Martin

Davr ist technisch richtig. Was Sie beschreiben, ist, alle Revisionen außer den schlechten abzulegen und diese dann auf das alte Repo abzulegen. In meinen Augen ist das nicht das Gleiche wie das 'Löschen' einer Revision.
Sirex

Antworten:


12

Vielleicht hilft Ihnen dieser Link:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

Zitat:

  1. Wechseln Sie in das oberste Verzeichnis Ihrer Arbeitskopie (vorausgesetzt, Sie möchten die gesamte Arbeitskopie zurücksetzen).

  2. Führen Sie svn revertden Befehl aus, um die Dateien Ihrer Arbeitskopie auf den Status zurückzusetzen, in dem sie sich beim letzten Festschreiben / Auschecken befanden.

  3. Laufen Sie, um svn status -vzu sehen, welcher Revisionsnummer Ihre Arbeitskopie jetzt entspricht (es ist die höchste Revisionsnummer in der Liste, die svn status -vproduziert wird).

  4. Führen Sie Folgendes aus: svn merge -rXX:YYDabei XXhandelt es sich um die Nummer, die Sie im vorherigen Schritt erhalten haben, und YYum die Nummer der Revision, zu der Sie zurückkehren möchten.

  5. Getan! Die mögliche Ausnahme ist, dass Dateien in Ihrer Arbeitskopie, die bei der YYursprünglichen Überarbeitung nicht vorhanden waren, weiterhin vorhanden sind, da svn standardmäßig keine Elemente entfernt. Wenn Sie sie loswerden möchten, führen Sie svn del [filename]auf jedem von ihnen einen aus.

  6. Gut gemacht! Spielen Sie jetzt mit Ihrer Arbeitskopie, als ob all diese Zwischenbearbeitungen noch nie stattgefunden hätten. Und wenn Sie bereit sind, Ihre Anstrengungen zu unternehmen, verwenden Sie einfach wie gewohnt svn commit!


1
In Windows-Betriebssystemen führen svn merge -rXX:YY .Sie Option 4 aus. Vergessen Sie nicht, einen Punkt am Ende der Zeile einzufügen, um auf das aktuelle Verzeichnis zu verweisen. In TortoiseSVN gibt es eine Option zum umgekehrten Zusammenführen.
Shantha Kumara

3
Dies wird nicht auf eine "frühere Revision, die zur Hauptrevision werden würde" zurückgesetzt. Es macht die ältere Revision nicht zum HEAD. Es wird vielmehr ein neuer KOPF erstellt. Siehe Martins Antwort.
Matthew Flaschen

Ich habe die Antwort dahingehend abgeändert, dass Shanthas Bemerkung über die Nachlaufzeit aufgenommen wurde. Dies gilt auch für * nix.
Mike Kormendy

72

Das hat bei mir funktioniert. Vorausgesetzt, Sie haben die Revision 1234 als HEAD und möchten die letzten drei Commits wiederherstellen:

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo

12
+1. Sie sind der einzige, der beide die Frage verstanden und eine bestimmte Antwort gegeben hat.
Matthew Flaschen

6
Das ist technisch die richtige Antwort. Es sollte jedoch darauf hingewiesen werden, dass dies, abgesehen davon, dass es möglicherweise etwas kompliziert ist, auch alle ausgecheckten Kopien ungültig macht - Sie müssen also jeden benachrichtigen, der auch das Repo verwendet.
sleske

1
schnell und einfach und auf den Punkt und tatsächlich, was das Plakat verlangt.
Nicht verbunden

7
Solange Sie sicherstellen, dass Sie auch die Repository-UUID auf das neue Repository kopieren (siehe "svnadmin setuuid", Kopieren von der UUID in "svn info" auf dem alten Repository), werden nur die Kassen auf die von Ihnen ausgeschnittenen Revisionen aktualisiert für ungültig erklärt werden.
Bryan Petty

1
Auf den neuen Repos müssen Sie möglicherweise Dateiberechtigungen korrigieren oder Dateien in den Hooks / Conf-Verzeichnissen
kopieren

5

Ich weiß, dass dies eine alte Frage ist, aber ich habe gerade herausgefunden, wie man dies mit Windows / TortoiseSVN macht.

Ein Kommentar schlägt vor, dass Sie eine Revision nicht "löschen" können. Sie können jedoch eine aktuellere Revision erstellen, die der Revision entspricht, zu der Sie zurückkehren möchten.

  1. Überprüfen Sie den HEAD des Repositorys für das Verzeichnis, aus dem Sie die Revision wiederherstellen möchten.
  2. Laden Sie in TortoiseSVN die Ansicht "Protokoll anzeigen" für das Verzeichnis der höchsten Ebene, das Sie wiederherstellen möchten (z. B. "Amtsleitung").
  3. Klicken Sie mit der rechten Maustaste auf die Version, die Sie entfernen möchten. HINWEIS: Dies ist die Version, die Sie entfernen möchten, und nicht die Version, zu der Sie zurückkehren möchten.
  4. Wählen Sie "Änderungen aus dieser Revision zurücksetzen".
  5. Klicken Sie an der Eingabeaufforderung auf "Ja".
  6. Aktualisieren Sie die Kasse wie gewohnt, aber auf "HEAD".
  7. Übernehmen Sie es zurück.

Sie müssen dann zu allen anderen Benutzern gehen, die es ausgecheckt haben, und sie zum Aktualisieren auffordern und sicherstellen, dass alle neuen Dateien entfernt werden.

Außerdem müssen Sie sicherstellen, dass jeder weiß, was diese Revision war, und möglicherweise die Beschreibung aktualisieren.


Wie unterscheidet sich das vom normalen "Zurücksetzen" -Verfahren?
Tomer W

Ein Zurücksetzen ändert nur Ihre Arbeitskopie in das, was sich im Repository befindet. Auf diese Weise kann der HEAD eines Berichts den Status eines vorherigen Commits widerspiegeln.
Martin

1
Vielen Dank dafür - Auf diese Weise die Schildkröte SVN war genau das, was ich brauchte, um eine fehlerhafte Festschreibung rückgängig zu machen :)
Dr. Andrew Burnett-Thompson

Es gibt auch einen Kontextmenüeintrag "Auf diese Version zurücksetzen " im Protokollfenster.
Uwe Keim

4

Zu diesem Zweck können Sie dump / load verwenden.

Sie können auch svnsync verwenden, um eine Sicherungskopie einer Revision zu erstellen.

Wenn Sie ein großes Repository haben, dauert es einige Zeit.


3

Bei mir (VisualSVN, 30-HEAD) funktioniert das:

  del C: \ Repositories \ MyRepo \ revs \ 0 \ 30
  del C: \ Repositories \ MyRepo \ revs \ 0 \ 29
  del C: \ Repositories \ MyRepo \ revs \ 0 \ 28
  del C: \ Repositories \ MyRepo \ revprops \ 0 \ 30
  del C: \ Repositorys \ MyRepo \ revprops \ 0 \ 29
  del C: \ Repositories \ MyRepo \ revprops \ 0 \ 28
  echo 27> C: \ Repositories \ MyRepo \ db \ current
  


Wie ist das besser als andere Antworten?
Toto

Es geht viel schneller.
Anton Golikhoff

0

Gehen Sie zum Terminal und navigieren Sie zum SVN-Repository: Geben Sie nun Folgendes ein

svn update -r "Versionsnummer, die Sie wiederherstellen möchten"


2
Willkommen bei Super User! Bitte lesen Sie die Frage noch einmal sorgfältig durch. Ihre Antwort beantwortet nicht die ursprüngliche Frage. OP sagt: "Ich möchte nicht einfach 'Zurücksetzen' für meine Arbeitskopie verwenden"
DavidPostill
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.