Ich arbeite mit einem Freund an einem Projekt und möchte zu einer älteren Version unseres Codes zurückkehren und ihn auf den aktuellen Stand setzen. Wie mache ich es?
Ich benutze "anksvn" auf vs08.
Ich habe die gewünschte Version auf meinem PC, aber das Festschreiben schlägt fehl. Die Meldung lautet "Festschreiben ist fehlgeschlagen, Datei oder Verzeichnis sind veraltet".
Ich habe auch den Subversion-Client auf meinem PC.
svn merge -r HEAD:140
.Sie können neue Änderungen nur am Anfang des Subversionsverlaufs festschreiben.
Der Grund, warum Sie mit der guten Kopie, die Sie auf Ihrem PC haben, nichts direkt tun können, ist, dass es so ist
.svn
Ordner wissen, dass es sich um Code aus der Vergangenheit handelt. Daher ist vor jedem ein Update erforderlich.Finden Sie die gute Versionsnummer und kehren Sie zurück
Suchen Sie die Versionsnummer der gewünschten alten Kopie.
Holen Sie sich Ihre aktuelle Revision mit:
Um ältere Versionen Ihres Projekts zu überprüfen , verwenden Sie:
bis Sie die richtige Revisionsnummer finden.
Notieren Sie sich die gute Versionsnummer (unter der Annahme der folgenden
123
Beispiele).Update auf die neueste Version:
Machen Sie alle Änderungen zwischen der gewünschten Revision und der neuesten Version rückgängig:
(Das gleiche wie Jon Skeets Antwort oben.)
Wenn Sie die Versionsnummer nicht finden können
Wenn Sie die alte Kopie nicht finden können und nur die aktuell auf Ihrem PC befindlichen Dateien festschreiben möchten:
Erstellen Sie eine Kopie Ihrer guten Version (jedoch ohne
.svn
Ordner):Stellen Sie jetzt sicher, dass Sie die neueste Version haben:
Kopieren Sie Ihre gute Version über die Arbeitskopie.
Dieser Befehl kopiert und löscht auch alle Dateien aus dem Arbeitsbaum, die nicht in Ihrer guten Kopie enthalten sind, wirkt sich jedoch nicht auf die vorhandenen
.svn
Ordner aus.Wenn Sie nicht über rsync verfügen, können Sie es verwenden,
cp -a
aber Sie müssen auch unerwünschte Dateien manuell löschen.Sie sollten in der Lage sein, das zu tun, was Sie jetzt haben.
quelle
Verwenden Sie einfach diese Zeile
Sie können Ihre aktuelle Version kennen, indem Sie Folgendes verwenden:
quelle
Die Standardmethode zum Zusammenführen des gesamten Check-ins mit Merge funktioniert hervorragend, wenn Sie dies möchten. Manchmal möchten Sie jedoch nur eine einzelne Datei zurücksetzen. Es gibt keinen legitimen Weg, das zu tun, aber es gibt einen Hack:
Verwenden Sie den Export-Unterbefehl von svn:
SVN-Export http: // URL in Ihre Datei @ 123 / tmp / Dateiname
(Wobei 123 die Versionsnummer für eine gute Version der Datei ist.) Verschieben oder kopieren Sie dann diese einzelne Datei, um die alte zu überschreiben. Checken Sie die geänderte Datei ein und Sie sind fertig.
quelle
svn
?svn cat -r 123 path-in-your-working-copy > path-in-your-working-copy
Ein bisschen altmodischer
dann das übliche
quelle
Ich denke, das ist am besten geeignet:
Führen Sie die Zusammenführung beispielsweise rückwärts durch, wenn der festgeschriebene Code die Revision von Rev. 5612 bis 5616 enthält, und führen Sie sie einfach rückwärts zusammen. Es funktioniert an meinem Ende.
Zum Beispiel:
Es würde einen zusammengeführten Code enthalten, der auf die frühere Revision zurückgeht, dann könnten Sie ihn festschreiben.
quelle
Das habe ich getan und für mich gearbeitet.
Ich möchte die Änderungen in mehreren Commits, die ich für bestimmte Zeiten vorgenommen habe, rückgängig machen und zum vorherigen Commit-Punkt wechseln.
Dadurch wird eine umgekehrte Zusammenführung ausgeführt, wodurch die Änderungen in Ihrer Arbeitskopie rückgängig gemacht werden.
Überprüfen Sie einfach den Code und legen Sie fest.
quelle
Klicken Sie mit der rechten Maustaste auf die höchste Hierarchie, die Sie zurücksetzen möchten >>
Revert
oderRevert to Revision
quelle
Bei den meisten vorherigen Antworten wurde eine umgekehrte Zusammenführung verwendet, und das ist normalerweise die richtige Antwort. Es gibt jedoch eine Situation (die mir gerade passiert ist), in der dies nicht der Fall ist.
Ich habe versehentlich eine Datei mit Unix-Zeilenenden in DOS-Zeilenenden geändert, als ich eine kleine Änderung vorgenommen habe, und sie festgeschrieben. Dies kann leicht rückgängig gemacht werden, entweder durch Ändern der Zeilenenden und erneutes Festschreiben oder durch umgekehrtes Zusammenführen. Dadurch wird die
svn blame
Liste jedoch als Quelle für jede Zeile der Datei aufgelistet. (Interessanterweise ist TortoiseSVN unter Windows davon nicht betroffen, sondern nur die Befehlszeilesvn blame
.)Wenn Sie den von wie gemeldeten Verlauf beibehalten möchten,
svn blame
müssen Sie meines Erachtens Folgendes tun:Das Löschen ist ein wenig beängstigend, aber denken Sie daran, dass Sie die Datei immer im Repository gespeichert haben, sodass das Wiederherstellen keine große Sache ist. Hier ist ein Code zur Veranschaulichung der Schritte. Angenommen, dies
xxx
ist die Versionsnummer der letzten guten Kopie.Beachten Sie, dass für eine Kopie im Repository das Ziel ein Verzeichnis und kein Dateiname sein muss.
quelle
Klicken Sie mit der rechten Maustaste auf das Projekt> Ersetzen durch> Revision oder URL> Wählen Sie die spezifische Revision aus, die Sie zurücksetzen möchten.
Übertragen Sie nun die lokale Update-Code-Version in das Repository. Dadurch wird die Codebasis auf die spezifische Revision zurückgesetzt.
quelle
Auf dieser Seite gibt es viele gefährliche Antworten. Beachten Sie, dass seit SVN Version 1.6 ein Update -r zu Baumkonflikten führen kann, die schnell zu einem potenziell kafkeresken Albtraum führen, in dem Sie nach Informationen zu Baumkonflikten suchen.
Der richtige Weg, um zu einer Version zurückzukehren, ist:
Wobei 12345 die Versionsnummer ist. Vergiss den Punkt nicht.
quelle
Mit der älteren Version synchronisieren und festschreiben. Dies sollte den Trick tun.
Hier finden Sie auch eine Erklärung zum Rückgängigmachen von Änderungen.
quelle
Jon Skeets Antwort ist so ziemlich die Lösung auf den Punkt gebracht, aber wenn Sie wie ich sind, möchten Sie vielleicht eine Erklärung. Das Subversion-Handbuch nennt dies a
Cherry-Pick Merge
Aus den Manpages.
Beispiel:
Dadurch wird die lokale Kopie [2983] (die gemäß dem obigen Zitat mit dem Server synchronisiert sein sollte - in Ihrer Verantwortung) durch die Revision 289 vom Server ersetzt. Die Änderung erfolgt lokal. Wenn Sie also eine saubere Kaufabwicklung haben, können die Änderungen vor dem Festschreiben überprüft werden.
quelle
Folgendes hat für mich funktioniert.
Ich hatte viele lokale Änderungen und musste diese in der lokalen Kopie verwerfen und die letzte stabile Version in SVN auschecken.
Überprüfen Sie den Status aller Dateien, einschließlich der ignorierten Dateien.
Durchsuchen Sie alle Zeilen, um die neu hinzugefügten und ignorierten Dateien abzurufen.
Ersetzen Sie diese durch
//
.und rm -rf alle Zeilen.
svn status --no-ignore | grep '^ [? I]' | sed "s / ^ [? I] //" | xargs -I {} rm -rf "{}"
quelle