Wie kann ich auf eine ältere Version unseres Codes in Subversion zurückkehren?

StackOverflow https://stackoverflow.com/questions/814433

  •  03-07-2019
  •  | 
  •  

Frage

Ich arbeite an einem Projekt mit einem Freund, und ich möchte auf eine ältere Version unseres Codes zurück und setzen Sie ihn der Strom zu sein. Wie mache ich das?

Ich bin mit "anksvn" auf VS08.

Ich habe die Version, die ich auf meinem PC will, aber begehen das ist nicht bestanden haben; Die Botschaft, die ich erhalte, ist „Commit fehlgeschlagen, Datei oder das Verzeichnis nicht mehr aktuell ist.“

Ich habe auch das Subversion-Client auf meinem PC.

War es hilfreich?

Lösung

Im Grunde müssen Sie „Merge rückwärts“ - ein Diff zwischen der aktuellen und der vorherigen Version gelten die aktuelle Version (so am Ende mit einer Arbeitskopie wie die alte Version aufzublicken) und dann begehen nochmal. So zum Beispiel, um von Revision 150 (Strom) zurück zur Revision 140:

svn update
svn merge -r 150:140 .
svn commit -m "Rolled back to r140"

Die Subversion Red Book hat eine

Andere Tipps

Sie können nur neue Änderungen an dem Kopf der Subversion Geschichte begehen.

Der Grund, warum Sie nicht direkt etwas mit der guten Kopie tun können Sie auf Ihrem PC haben, ist, dass seine .svn Ordner wissen, dass es Code aus der Vergangenheit ist, erfordert so ein Update vor jedem begehen.

Finden Sie die gute Revisionsnummer und wiederherstellen

  1. Hier finden Sie die Versionsnummer der alten Kopie, die Sie wollen. Holen Sie sich Ihre aktuelle Revision mit:

    svn info --show-item revision
    # or
    svn log
    

    oder benutzen:

    svn update -r <earlier_revision_number>
    

    verschiedene ältere Versionen Ihres Projekts zu überprüfen, bis Sie die richtige Versionsnummer finden.

  2. Beachten Sie die gute Revisionsnummer (unter der Annahme 123 Beispiele unten) nach unten.

  3. Update auf die neueste Version:

    svn update
    
  4. Rückgängig alle Änderungen zwischen der Revision, die Sie wünschen und die neueste Version:

    svn merge -r HEAD:123 .
    svn commit "Reverted to revision 123"
    

    (das gleiche wie Jon Skeet Antwort oben.)

Wenn Sie die Versionsnummer nicht finden können,

Wenn Sie die alte Kopie nicht finden können, und Sie wollen einfach nur die Dateien begehen derzeit auf Ihrem PC:

  1. Erstellen Sie eine Kopie Ihrer guten Version (aber ohne .svn Ordner):

    cd ..
    rsync -ai --exclude=.svn  project/  project-good/
    
  2. Jetzt stellen Sie sicher, die neueste Version haben:

    cd project
    svn update
    # or make a fresh checkout
    svn checkout <url>
    
  3. Kopieren Sie Ihre gute Version über die Oberseite der Arbeitskopie.

    Dieser Befehl kopieren und löscht auch alle Dateien aus dem Arbeits Baum, der nicht in Ihrer guten Kopie, aber es wird die bestehenden .svn Ordner nicht beeinflussen.

    cd ..
    rsync -ai --exclude=.svn --delete  project-good/  project/
    

    Wenn Sie nicht rsync haben, können Sie cp -a verwenden, aber Sie müssen auch manuell alle unerwünschten Dateien löschen.

  4. Sie sollten in der Lage sein, zu begehen, was Sie jetzt haben.

    cd project
    svn commit "Reverted to good copy"
    

Verwenden Sie einfach diese Zeile

  

svn update -r yourOldRevesion

Sie können Ihre aktuelle Revision durch die Verwendung wissen:

  

svn info

Ein bisschen mehr die alte Schule

svn diff -r 150:140 > ../r140.patch
patch -p0 < ../r140.patch

dann die üblichen

svn diff
svn commit

Ich denke, das ist am besten geeignet:

Hat die Zusammenführung nach hinten, zum Beispiel, wenn der vereinbarte Code, um die Revision von enthält rev 5612-5616, es nur rückwärts verschmelzen. Es funktioniert in meinem Ende.

Zum Beispiel:

svn merge -r 5616:5612 https://<your_svn_repository>/

Es hat einen fusionierte Code zurück zur vorherige Revision enthalten würde, dann könnte man es begehen.

Das ist, was ich tat und arbeitete für mich.

Ich möchte die Änderungen rückgängig machen in mehreren verpflichtet, dass ich für bestimmte Zeiten gemacht und wollen zum vorherigen COMMIT-Punkt gehen.

  1. Zum Team -.> Verlauf anzeigen
  2. Rechtsklick auf den oder einen Bereich von Revisionen, die Sie ignorieren möchten.
  3. Wählen Sie den "Revert Changes" Option.

Dies wird einen Reverse-Merge ausführen, um die Änderungen in Ihrer Arbeitskopie rückgängig gemacht.

Sie einfach den Code überprüfen und begehen.

Rechtsklick auf der obersten Hierarchie Sie zurücksetzen wollen >> Revert oder Revert to Revision

Recht das Projekt klicken> Ersetzen durch> Revision oder URL> Wählen Sie die spezifische Revision, die Sie wiederherstellen möchten.

begeht nun die lokale Update-Code-Version in das Repository. Dadurch wird die Code-Basis auf die spezifische Revision zurück.

Die meisten der bisherigen Antworten wurden unter Verwendung eines Reverse-Merge, und das ist in der Regel die richtige Antwort. Allerdings gibt es eine Situation (was nur mir passiert ist), wo es nicht ist.

Ich änderte versehentlich eine Datei mit Unix-Zeilenenden zu DOS-Zeilenenden, wenn eine kleine Änderung vorgenommen hat, und verpflichten sie. Dies ist leicht rückgängig gemacht, indem entweder die Zeilenende zu ändern und zu begehen wieder, oder durch einen Reverse-merge, aber es hat den Effekt, dass svn blame Liste meines bearbeiten als die Quelle jede Zeile der Datei. (Interessanterweise TortoiseSVN auf Windows nicht davon betroffen bekommen;. Nur über die Befehlszeile svn blame)

Wenn Sie die Geschichte erhalten wollen, wie svn blame berichtet, ich glaube, Sie müssen folgendes tun:

  • Löschen Sie die Datei und begehen.
  • Im Repository, die bisherige gute Kopie der Datei in den Kopf kopieren und begehen.
  • Wiederherstellen alle Bearbeitungen, die Sie behalten wollen zu.

Die Streichung ist ein wenig beängstigend, aber erinnern Sie sich immer die Datei im Repository gespeichert haben, so die Wiederherstellung es keine große Sache ist. Hier einige Code, um die Schritte zu erläutern. Es sei angenommen, dass xxx ist die Revisionsnummer der letzten guten Kopie.

svn rm svn+ssh://path/to/file
svn copy svn+ssh://path/to/file@xxx svn+ssh://path/to -m"Restore good copy"
svn update
<restore the edits>
svn commit -m"Restore edits"

Beachten Sie, dass für eine Kopie im Repository, das Ziel ein Verzeichnis sein muss, kein Dateiname.

Jon Skeet Antwort ist ziemlich genau die Lösung auf den Punkt gebracht, aber wenn Sie wie ich sind, könnten Sie eine Erklärung wollen. Die Subversion Handbuch nennt dies ein

Cherry-Pick Merge

Von den man-Seiten.

  
      
  1. Diese Form wird als ein 'Kirsche-Pick' fusionieren:   ‚-R N: M‘ bezieht sich auf die Differenz in der Geschichte der    Source Zweig zwischen Versionen N und M

         

    A ‚Rückwärtsbereich‘ kann verwendet werden, um Änderungen rückgängig zu machen. Wenn zum Beispiel    Quelle und Ziel beziehen sich auf den gleichen Zweig, ein früher begangen    Revision kann ‚rückgängig gemacht‘. In einem Rückwärtsbereich , ist N größer als M in    ‚-R N: M‘ oder die ‚-c‘ Option wird mit einer negativen Zahl verwendet: ‚-c -M‘    ist gleichwertig '-r M:'. Änderungen rückgängig machen wie dieses ist auch bekannt,    als eine 'umgekehrte merge' durchgeführt wird.

  2.   

  
      
  • Wenn die Quelle eine Datei ist, werden dann Unterschiede auf, dass angewandt   Datei (nützlich für frühere Änderungen Reverse-Fusion). Andernfalls,   wenn die Quelle ein Verzeichnis, dann der Zielstandardwert ist ‚‘.

         

    Bei normaler Verwendung sollte die Arbeitskopie auf dem neuesten Stand sein, an einem einzigen    Revision, ohne lokale Änderungen und nicht umgeTeilBäume.

  •   

Beispiel:

svn merge -r 2983:289 path/to/file
mit der Revision 289 vom Server -

Dies wird die lokale Kopie [2983] (in Ihrer Verantwortung, die nach dem Zitat oben, sollte mit dem Server synchronisiert werden) ersetzen. Die Veränderung geschieht vor Ort, was bedeutet, wenn Sie eine saubere Kasse haben, dann können die Änderungen, bevor sie begehen inspiziert werden.

Es gibt eine Menge gefährlicher Antworten auf dieser Seite. Beachten Sie, dass seit dem SVN-Version 1.6, ein Update zu tun -r Konflikte Baum führen kann, die sich rasch auf eine möglicherweise Daten eskaliert in kafkeresque Alptraum zu verlieren, wo Sie Informationen über Baum Konflikte sind googeln.

Der richtige Weg zu einer Version zurückzukehren ist:

svn merge -r HEAD:12345 .

Wo 12345 ist die Versionsnummer. Vergessen Sie nicht den Punkt.

Im Folgenden hat für mich gearbeitet.

hatte ich eine Menge von lokalen Änderungen und benötigen die in der lokalen Kopie und Kasse die letzte stabile Version im SVN zu verwerfen.

  1. Überprüfen Sie den Status aller Dateien, einschließlich der Dateien ignoriert.

  2. Grep alle Linien die neu hinzugefügten und ignoriert Dateien zu erhalten.

  3. ersetzen diejenigen mit //.

  4. und rm -rf alle Linien.

    svn status --no-ignore | grep '^ [I?] | sed "[? I] s / ^ //" | xargs -I {} rm -rf "{}"

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