2008-12-04 4 views
17

Wir haben eine Situation, in der jemand einen Commit zu unserem SVN-Server vermasselt hat. Viele Dateien wurden gelöscht usw.Wie ändere ich den HEAD zu einer früheren Revision

Frage: Was ist die Technik, um die vorherige (zum schlechten Commit) Revision die HEAD Revision zu machen? Ich habe hier eine Diskussion über SO gesehen, um dies für 1 Datei zu tun, aber wir möchten es so machen, dass das letzte Commit nie passiert ist. Irgendwelche Ideen?

Alle diese Antworten scheinen korrekt zu sein. Ich habe die Antwort von abatishchev als die richtige Antwort markiert, einfach weil ich Tortoise SVN benutze und es ist die Methode, die ich tatsächlich benutzt habe.

Antwort

9

Vielleicht können Sie lügen zeigen, überprüfen vorige Revision (n-1), wählen Sie im Kontextmenü Rückgängig zu dieser Revision und die Änderungen zu übernehmen (es wird wird n + 1, wobei n Strom schlecht Kopf)

+1

http://stackoverflow.com/questions/217190/how-to-quarantine-a-specific-subversion-revision –

+3

Das hat nicht für mich funktioniert. Als ich meine lokalen Änderungen in eine frühere Version zurückverwandelte und versuchte, mich zu verpflichten, sagte mir svn, dass ich nicht committen kann, bis ich meine Arbeitskopie aktualisiert habe, um den Zweck zu besiegen:/ – Sinaesthetic

1

Sie können dies mit svnadmin dump und svnadmin load tun. Es ist eine brutale Art, es zu tun, aber ich glaube, das ist der einzige Weg, es zu tun.

Die Antworten auf diese Frage helfen können: Nuking huge file in svn repository

+0

Dies wird workingcopies brechen, die auf dem Kopf Revision sind, da sie das Repository nicht weiß, etwa auf eine Version von einer Version nicht aktualisieren kann. –

19

Der sauberste Weg undo changes

Sie svn merge würde verwenden können, um die Änderung in der Arbeitskopie, die auf „rückgängig machen“ und dann die Commit lokale Änderung am Repository. Alles, was Sie tun müssen, ist eine umgekehrte Differenz anzugeben. (Sie können dies tun, indem --revision 303:302 angibt, oder durch eine gleichwertige --change -303.)

Ich weiß, es nicht „machen es wie das letzte begehen nie passiert“ in dem Sinne, dass begehen ist immer noch ein Teil der Geschichte, aber ich glaube, es ist besser, dieses schlechte Commit in der Geschichte zu halten.
Es könnte einige laufende Arbeiten enthalten, die abgefragt/verglichen werden können, um einfach ein neues korrektes Commit zu erstellen.


Auch wenn:

  • die SVN (1.5) Handbuch erwähnt eine Zukunft obliterate Befehl, der die Aufgabe, Informationen dauerhaft zu löschen erreichen würde, und
  • Erwähnung svndumpfilter als mögliche Abhilfe (dass Es bietet die Möglichkeit, diese Dumpfile-Daten schnell und einfach zu ändern, indem es als pfadbasierter Filter fungiert.)

... Es ist Besser, nicht zu versuchen, ein SCM-Werkzeug in etwas zu verdrehen, das es eigentlich gar nicht machen soll.
Historisierung (zusammen mit Parallelisierung mit Verzweigung) sind die zwei Hauptmerkmale eines SCM.

+0

Wir haben kein Problem, den Commit zu halten, nur den HEAD auf die richtige Code-Basis zu aktualisieren. Ich werde es versuchen. Vielen Dank. – jwalkerjr

0

Sie können bestimmte Revisionen bearbeiten, wenn Sie also keine intervenierenden Operationen speichern möchten, könnten Sie das betreffende Verzeichnis svn rm und dann die alte Version svn cp. Siehe Peg and Operative Revision section of the book

+0

Dies ist nicht der richtige Weg. Der richtige Weg ist eine umgekehrte Zusammenführung, wie VonC sagt. – kauppi

0

TortoiseSVN verwenden, wenn Sie nur das Repository in der Version vor der säumige wollen sehen, begehen:

  • Öffnen Sie die URL mit dem TortoiseSVN Repository Browser.
  • Notieren Sie die Revisionsnummer dieses Commits und ändern Sie HEAD zu dieser Nummer - 1, indem Sie auf die Schaltfläche oben rechts klicken.

enter image description here

Verwandte Themen