2008-08-30 12 views
73

Angenommen, ich habe einige schlechte Änderungen am Subversion-Repository vorgenommen. Dann begehe ich gute Veränderungen, die ich behalten möchte.Rollback von schlechten Änderungen mit Svn in Eclipse

Was wäre der einfachste Weg, diese schlechten Änderungen in Eclipse rückgängig zu machen und die guten Änderungen beizubehalten? Unter der Annahme, dass Dateien, die sich auf schlechte Änderungen beziehen, nicht dieselben sind wie diejenigen, die sich auf die guten Änderungen beziehen. Wie ändern sich die Dinge, wenn gute Änderungen an denselben Dateien vorgenommen wurden wie schlechte Änderungen?

Ich suche meist einen Weg, dies über Eclipse-Plugins (Subclipse oder Subversive) zu tun, aber auch Kommandozeilenbefehle sind interessant.

Antwort

30

Sie haben zwei Möglichkeiten, dies zu tun.

Die Quick and Dirty Ihre Dateien ist die Auswahl im Projekt-Explorer-Ansicht (ctrl verwenden), rechtsklicken Sie sie, wählen Replace with... und dann wählen Sie die beste Option für Sie, von Latest from Repository oder eine Branch Version. Nach dem Abrufen dieser Dateien ändern Sie sie (mit einem Leerzeichen, oder etwas zu beheben, Ihren Anruf und verpflichten sie, eine neuere Version zu erstellen.

Ein sauberer Weg ist Merge im Team-Menü wählen und navigieren Sie durch den Assistenten, der Ihnen helfen wird . die alte Version in der aktuellen Überarbeitung der Besserung

Beide Befehle ihre Befehlszeilenäquivalente haben. svn revert und svn merge

+0

Spätestens vom Repository ist das eine falsch eingecheckt, so dass ich nicht sehe, wo es hilfreich sein sollte. Abgesehen davon, Eclipse will Ihnen nicht mit diesem Problem helfen, da nur die Erwähnung Option verfügbar ist, wenn Sie mehrere Dateien auswählen (wahrscheinlich, weil ihre neuesten Versionen anders sind). – Macilias

1

der svnbook hat einen Abschnitt über, wie Subversion können Sie die Änderungen von einer bestimmten Revision zurückzukehren ohne Auswirkungen auf die Änderungen, die in nachfolgenden Revisionen aufgetreten sind:

http://svnbook.red-bean.com/en/1.4/svn.branchmerge.commonuses.html#svn.branchmerge.commonuses.undo

ich Eclipse-nicht viel nutzen, aber in TortoiseSVN können Sie dies aus dem aus dem Protokoll Dialog tun; Klicken Sie einfach mit der rechten Maustaste auf die Revision, die Sie zurücksetzen möchten, und wählen Sie "Änderungen von dieser Revision rückgängig machen".

Für den Fall, dass die Dateien, für die Sie "schlechte Änderungen" zurücksetzen möchten, in nachfolgenden Revisionen "gute Änderungen" hatten, ist der Prozess derselbe. Die Änderungen von der "schlechten" Revision werden rückgängig gemacht, wobei die Änderungen von "guten" Revisionen unberührt bleiben, jedoch könnten Sie Konflikte bekommen.

70

in Eclipse Ganymede (Subclipse)

Projekt auswählen/Datei, die schlechte Änderung enthält, und von Pop-up-Menü wählen:

Team -> Verlauf anzeigen

Revisionen zu diesem Projekt/die Datei bezogen wird, wird in Registerkarte Verlauf angezeigt.

Suche Revision wo "schlechte Änderungen" begangen wurden, und von Pop-up-Menü wählen:

Revert Änderungen von Version X

Diese Änderungen in der Datei fusionieren (n) innerhalb schlecht Revision geändert, mit Revision vor einer schlechten Revision.

Es gibt zwei Szenarien von hier:

  1. Wenn Sie keine Änderungen verpflichten für diese Datei (schlechte Revision ist letzte Revision für diese Datei), wird es einfach Änderungen in schlechter Revision gemacht entfernen. Diese Änderungen werden mit Ihrer Arbeitskopie zusammengeführt, sodass Sie sie übernehmen müssen.

  2. Wenn Sie einige Änderungen für diese Datei festgeschrieben haben (schlechte Revision ist keine letzte Revision für diese Datei), müssen Sie den Konflikt manuell lösen. Nehmen wir an, Sie haben die Datei readme.txt mit und die falsche Revisionsnummer ist 33. Außerdem haben Sie in Revision 34 einen weiteren Commit für diese Datei durchgeführt. Nachdem Sie Änderungen aus Revision 33 rückgängig gemacht haben, werden Sie in Ihrer Arbeit folgen Kopie:

readme.txt.merge-left.r33 - schlecht Revision

readme.txt.merge-right.r32 - vor schlechter Revision

readme.txt .w orking - Arbeitskopieversion (wie in r34, wenn Sie keine nicht festgeschriebenen Änderungen haben)

Original liesmich.txt wird als konfliktbehaftet gekennzeichnet und wird mit einigen zusammengeführt Version (wo Änderungen von schlechten Revision entfernt werden) enthalten Markierungen (< < < < < < < .Working etc). Wenn Sie nur Änderungen aus einer fehlerhaften Revision entfernen und danach Änderungen beibehalten möchten, müssen Sie nur die Markierungen entfernen. Andernfalls können Sie Inhalte aus einer der drei oben genannten Dateien in die Originaldatei kopieren. Was auch immer Sie sich entscheiden, wenn Sie fertig sind, markieren Konflikt gelöst durch

Team - Mark Gelöst

Temporäre Dateien werden entfernt und die Datei wird geändert markiert werden. Wie in 1 müssen Sie Änderungen bestätigen.

Beachten Sie, dass dadurch die Revision aus dem Überarbeitungsverlauf im SVN-Repository nicht entfernt wird. Sie haben einfach eine neue Revision vorgenommen, bei der Änderungen von einer fehlerhaften Revision entfernt werden.

10

Wenn Sie 1 Datei gleichzeitig ausführen möchten, können Sie in die Verlaufsansicht der Datei wechseln, vorausgesetzt, Sie haben ein Eclipse SVN-Plugin installiert. "Team-> Show History"

Suchen Sie in der Verlaufsansicht die letzte gute Version dieser Datei, klicken Sie mit der rechten Maustaste und wählen Sie "Get Contents". Dadurch wird Ihre aktuelle Version durch den Inhalt dieser Version ersetzt. Dann können Sie die Änderungen festschreiben, wenn Sie alles behoben haben.

5

In Eclipse Subversive:

Rechtsklick auf das Projekt> Team> Merge

Im Merge-Fenster wählen Sie die Revisionen Sie als normal zurückkehren möchten, sondern auch Checkbox "Reversed merge" aktivieren.

Zusammenführen wie normal.

0

Ich habe das gleiche Problem, aber CleanUp Eclipse-Option funktioniert nicht für mich.

1) installieren TortoiseSVN
2) Zum Windows-Explorer und klicken Sie rechts auf Ihrem Projektverzeichnis
3 Wahl CleanUp Option (durch Bruch-Blockier-Option-Kontrolle)

Es ist funktioniert.

Ich hoffe, das hilft jemandem.