Element auf Revision aktualisieren vs Auf Revision zurücksetzen

161

Ich habe begonnen, Subversion mit TortoiseSVN zu verwenden. Wenn ich das Protokoll öffne und mit der rechten Maustaste auf eine alte Revision klicke, werden zwei Optionen angezeigt, die so klingen, als würden sie auf eine ältere Version zurückgesetzt: "Element auf Revision aktualisieren" und "Auf diese Revision zurücksetzen".

Ich verstehe, dass das Aktualisieren auf eine ältere Version verwendet wird, wenn Sie nur auf eine alte Version zurückblicken möchten, aber das Repository nicht wirklich ändern möchten. Zurücksetzen ist, wenn Sie es tatsächlich vermasselt haben und möchten, dass die neueste Version im Repository mit einer älteren Version identisch ist.

Angenommen, die HEAD-Revision ist 100 und ich kehre zu 95 zurück. Dadurch wird meine Arbeitskopie wieder zu 95 zusammengeführt. Dann kann ich diese Änderung in das Repository übernehmen, wodurch die Revision 101 korrekt erstellt wird. Wie ist das anders, wenn ich auf Revision 95 zurück aktualisieren würde? Kehrt es nicht immer noch die Änderungen gegenüber den letzten Revisionen um? Ich bin verwirrt darüber, wie sich der Status meiner Arbeitskopie nach dem Zurücksetzen oder Aktualisieren auf eine ältere Revision unterscheidet.

Eric Anastas
quelle

Antworten:

205

Durch Aktualisierung auf Revision werden nur Dateien Ihrer Arbeitskopie auf die von Ihnen gewählte Revision aktualisiert. Sie können jedoch nicht weiter an dieser Überarbeitung arbeiten, da SVN sich darüber beschwert, dass Ihre Arbeitskopie veraltet ist .

Wenn Sie auf diese Revision zurückgreifen, werden alle Änderungen in Ihrer Arbeitskopie rückgängig gemacht, die nach der ausgewählten Revision vorgenommen wurden (in Ihrem Beispiel Rev. 96,97,98,99,100). Ihre Arbeitskopie befindet sich jetzt im geänderten Zustand .

Der Dateiinhalt beider Szenarien ist derselbe. Im ersten Fall haben Sie jedoch eine unveränderte Arbeitskopie und können Ihre Änderungen nicht festschreiben (da Ihre Arbeitskopie nicht auf HEAD Rev. 100 zeigt). Im zweiten Fall haben Sie eine modifizierte Arbeitskopie, die auf Kopf und zeigt Sie können weiter arbeiten und sich verpflichten

Peter Parker
quelle
1
OK, sagen wir, ich aktualisiere auf Revision und meine Arbeitskopie enthält keine Daten mehr. Nichts hindert mich daran, die Dateien zu ändern. Was ist, wenn ich eine der Dateien ändere und versuche, sie festzuschreiben? Ich vermute, Subversion wird den Konflikt sehen und mich zwingen, die neueste Version im Repository in meiner geänderten Arbeitskopie zusammenzuführen, bevor ich sie abschicke.
Eric Anastas
5
Wenn Sie versuchen, ein Element mit einer älteren BASE-Revision als HEAD festzuschreiben, erhalten Sie die Meldung "Festschreiben fehlgeschlagen: Ihre Arbeitskopie ist wahrscheinlich veraltet"
Peter Parker,
wie tun update tound revert to/frombehandeln lokale Änderungen (unbestätigte Änderungen)?
BaltoStar
Beide Methoden behalten lokale Änderungen bei, jedoch können lokale Änderungen in beiden Fällen zu Konflikten führen, und im umgekehrten Fall werden die Änderungen aus dem Rollback mit allen lokalen Änderungen anderer Benutzer gemischt. Speichern Sie also mindestens einen Patch Ihrer Änderungen oder verpflichten Sie sich zu einem Zweig.
Peter Parker
31

Um zu verstehen, wie sich der Status Ihrer Arbeitskopie in beiden Szenarien unterscheidet, müssen Sie das Konzept der BASE-Revision verstehen :

BASE

Die Versionsnummer eines Elements in einer Arbeitskopie. Wenn das Element lokal geändert wurde, bezieht sich dies auf die Art und Weise, wie das Element ohne diese lokalen Änderungen angezeigt wird.

Ihre Arbeitskopie enthält eine Momentaufnahme jeder Datei (in einem .svn-Ordner versteckt) in dieser BASE-Revision, dh wie beim letzten Abrufen aus dem Repository . Dies erklärt, warum Arbeitskopien doppelt so viel Platz beanspruchen und wie es möglich ist, lokale Änderungen ohne Netzwerkverbindung zu untersuchen und sogar rückgängig zu machen.

Durch Aktualisieren des Elements auf Revision wird diese Basisrevision geändert, sodass BASE nicht mehr aktuell ist. Wenn Sie versuchen, lokale Änderungen zu übernehmen, stellt SVN fest, dass Ihre BASE nicht mit dem Repository-HEAD übereinstimmt. Das Festschreiben wird abgelehnt, bis Sie ein Update (und möglicherweise eine Zusammenführung) durchführen, um dies zu beheben.

Zurücksetzen auf Revision ändert BASE nicht. Dies entspricht konzeptionell fast der manuellen Bearbeitung der Datei, um sie an eine frühere Version anzupassen.

Wim Coenen
quelle
Aus der akzeptierten Antwort "Der Dateiinhalt beider Szenarien ist gleich". Wieso sich die Mühe machen? Diese Antwort erklärt den ultimativen Unterschied und erklärt, warum "Aktualisieren" gegenüber "Zurücksetzen" beim Versuch, ein Commit durchzuführen, ein anderes Verhalten verursacht.
Radarbob
wie tun update tound revert to/frombehandeln lokale Änderungen (unbestätigte Änderungen)?
BaltoStar
5

Die Dateien in Ihrer Arbeitskopie sehen möglicherweise so aus genau das gleiche nach, aber sie sind immer noch sehr unterschiedliche Aktionen - das Repository in einem ganz anderen Zustand befindet, und Sie werden verschiedene Optionen zur Verfügung haben nach dem Zurücksetzen als „Aktualisierung“ auf eine alte Version .

Kurz gesagt, "Aktualisieren auf" wirkt sich nur auf Ihre Arbeitskopie aus, "Zusammenführen und Festschreiben rückgängig machen" wirkt sich jedoch auf das Repository aus.

Wenn Sie auf eine alte Revision "aktualisieren", hat sich das Repository nicht geändert: In Ihrem Beispiel ist die HEAD-Revision immer noch 100. Sie müssen nichts festschreiben, da Sie nur mit Ihrer Arbeitskopie herumspielen. Wenn Sie Änderungen an Ihrer Arbeitskopie vornehmen und versuchen, ein Commit durchzuführen, wird Ihnen mitgeteilt, dass Ihre Arbeitskopie veraltet ist, und Sie müssen sie aktualisieren, bevor Sie ein Commit durchführen können. Wenn jemand anderes, der an demselben Repository arbeitet, ein "Update" durchführt oder wenn Sie eine zweite Arbeitskopie auschecken, ist dies r100.

Wenn Sie jedoch eine alte Revision "rückgängig machen", basiert Ihre Arbeitskopie weiterhin auf dem HEAD (vorausgesetzt, Sie sind auf dem neuesten Stand). Sie erstellen jedoch eine neue Revision, um die unerwünschten Änderungen zu ersetzen. Sie müssen diese Änderungen festschreiben, da Sie das Repository ändern. Sobald alle Aktualisierungen oder neuen Arbeitskopien auf der Basis des HEAD durchgeführt wurden, wird r101 mit den Inhalten angezeigt, die Sie gerade festgeschrieben haben.

Zac Thompson
quelle
5

Aktualisieren Sie Ihre Arbeitskopie auf die ausgewählte Revision. Nützlich, wenn Ihre Arbeitskopie eine Zeit in der Vergangenheit widerspiegeln soll oder wenn weitere Festschreibungen im Repository vorgenommen wurden und Sie Ihre Arbeitskopie Schritt für Schritt aktualisieren möchten. Es ist am besten, ein ganzes Verzeichnis in Ihrer Arbeitskopie zu aktualisieren, nicht nur eine Datei. Andernfalls kann Ihre Arbeitskopie inkonsistent sein. Dies wird verwendet, um einen bestimmten Revisionszweck zu testen. Wenn Ihr Test abgeschlossen ist, können Sie diesen Befehl verwenden, um eine andere Revision zu testen oder SVN Update zu verwenden , um HEAD abzurufen

Wenn Sie eine frühere Änderung dauerhaft rückgängig machen möchten, verwenden Sie Auf diese Revision zurücksetzen stattdessen Auf zurücksetzen.

- aus dem TSVN-Hilfedokument

Wenn Sie Ihre Arbeitskopie auf eine frühere Version aktualisieren, wirkt sich dies nur auf Ihre eigene Arbeitskopie aus. Nachdem Sie einige Änderungen vorgenommen haben und eine Festschreibung vornehmen möchten, schlagen Sie fehl. TSVN weist Sie darauf hin, dass Sie Ihr WC zuerst auf die neueste Version aktualisieren müssen. Wenn Sie zurücksetzen Für eine Version können Sie ein Repository festlegen. Jeder Benutzer kehrt nach einer Aktualisierung zur Version zurück.

prime23
quelle
2

Der Text aus der Schildkrötenreferenz:

Element auf Revision aktualisieren aktualisieren Aktualisieren Sie Ihre Arbeitskopie auf die ausgewählte Revision. Nützlich, wenn Ihre Arbeitskopie eine Zeit in der Vergangenheit widerspiegeln soll oder wenn weitere Festschreibungen im Repository vorgenommen wurden und Sie Ihre Arbeitskopie Schritt für Schritt aktualisieren möchten. Es ist am besten, ein ganzes Verzeichnis in Ihrer Arbeitskopie zu aktualisieren, nicht nur eine Datei. Andernfalls kann Ihre Arbeitskopie inkonsistent sein.

Wenn Sie eine frühere Änderung dauerhaft rückgängig machen möchten, verwenden Sie stattdessen Auf diese Revision zurücksetzen.

Zu dieser Revision zurückkehren Zu einer früheren Revision zurückkehren. Wenn Sie mehrere Änderungen vorgenommen haben und dann entscheiden, dass Sie wirklich zu dem Zustand in Revision N zurückkehren möchten, ist dies der Befehl, den Sie benötigen. Die Änderungen werden in Ihrer Arbeitskopie rückgängig gemacht, sodass dieser Vorgang das Repository erst beeinflusst, wenn Sie die Änderungen festschreiben. Beachten Sie, dass dadurch alle nach der ausgewählten Revision vorgenommenen Änderungen rückgängig gemacht werden und die Datei / der Ordner durch die frühere Version ersetzt wird.

Wenn sich Ihre Arbeitskopie in einem unveränderten Zustand befindet, wird Ihre Arbeitskopie nach dem Ausführen dieser Aktion als geändert angezeigt. Wenn Sie bereits lokale Änderungen haben, führt dieser Befehl die rückgängig gemachten Änderungen in Ihre Arbeitskopie ein.

Intern geschieht, dass Subversion eine umgekehrte Zusammenführung aller nach der ausgewählten Revision vorgenommenen Änderungen durchführt, wodurch die Auswirkungen dieser vorherigen Commits rückgängig gemacht werden.

Wenn Sie nach dem Ausführen dieser Aktion entscheiden, dass Sie das Rückgängigmachen rückgängig machen und Ihre Arbeitskopie wieder in den vorherigen unveränderten Zustand versetzen möchten, sollten Sie TortoiseSVN → Im Windows Explorer zurücksetzen verwenden, um die lokalen Änderungen zu verwerfen, die durch diese Aktion zum umgekehrten Zusammenführen vorgenommen wurden.

Wenn Sie einfach nur sehen möchten, wie eine Datei oder ein Ordner bei einer früheren Revision aussah, verwenden Sie stattdessen Update to Revision oder Save Revision as ....

Liker777
quelle