2009-07-31 20 views
148

Ich habe begonnen, Subversion mit TortoiseSVN zu verwenden. Wenn ich das Protokoll öffne und mit der rechten Maustaste auf eine alte Revision klicke, sehe ich zwei Optionen, die sich anhören, als würden sie zu einer älteren Version zurückkehren: "Element auf Revision aktualisieren" und "Auf diese Revision zurücksetzen".Artikel auf Revision aktualisieren, auf Revision zurücksetzen

Ich verstehe, dass die Aktualisierung auf eine ältere Version verwendet wird, wenn Sie nur auf eine alte Version zurückblicken möchten, aber das Repository nicht wirklich ändern. Revert ist, wenn Sie tatsächlich vermasselt haben und möchten, dass die neueste Revision im Repository der alten Version entspricht.

Also sagen die HEAD-Revision ist 100 und ich wieder zurück auf 95. Es wird umgekehrt meine Arbeitskopie zurück auf 95 zusammenführen. Dann kann ich diese Änderung in das Repository, die Revision 101 korrekt erstellen würde Commit? Wie ist das anders, wenn ich zurück zu Revision 95 aktualisieren würde? Verändern sich die Änderungen der letzten Revisionen nicht noch? Ich bin verwirrt, wie sich der Zustand meiner Arbeitskopie nach einem Zurücksetzen oder Aktualisieren auf eine ältere Revision unterscheidet.

Antwort

190

Das Update auf die Revision aktualisiert nur die Dateien Ihrer Arbeitskopie mit der von Ihnen gewählten Revision. Aber Sie können nicht weiterarbeiten, um an dieser Revision zu arbeiten, da SVN sich beschweren wird, dass Ihre Arbeitskopie veraltet ist.

zu dieser Version zurück wird alle Änderungen in Ihrer Arbeitskopie rückgängig machen, die nach der gewählten Revision vorgenommen wurden (in Ihrem Beispiel rev. 96,97,98,99,100) Ihre Arbeitskopie ist jetzt in modifizierten Zustand .

Der Dateiinhalt beiden scenarions ist gleich, aber in ersten Fall haben Sie eine unmodifizierten Arbeitskopie und Sie können Ihre Änderungen nicht begehen (wie Ihr working verweist nicht auf HEAD 100 rev) in zweitem Fall haben Sie ein Arbeitskopie zu Kopf nach geändert und Sie können weiterarbeiten und verpflichten

+0

OK, also sagen, ich aktualisiere auf Revision und meine Arbeitskopie ist aus Daten. Nichts hält mich davon ab, die Dateien zu ändern. Was passiert, wenn ich eine der Dateien ändere und versuche, sie zu begehen? Ich denke, Subversion wird den Konflikt sehen und zwingt mich, die neueste Version im Repository in meine modifizierte Arbeitskopie zu verschmelzen, bevor ich sie abschicke. –

+5

Wenn Sie versuchen, ein Element mit einer älteren BASE-Revision als HEAD zu committen, erhalten Sie ein "Commit fehlgeschlagen: Ihre Arbeitskopie ist wahrscheinlich veraltet" –

+2

Große Antwort, danke. – haylem

4

Aktualisieren Sie Ihre Arbeitskopie auf die ausgewählte Revision. Nützlich, wenn Sie möchten, dass Ihre Arbeitskopie eine Zeit in der Vergangenheit widerspiegelt oder wenn weitere Commits an das Repository gesendet wurden und Sie Ihre Arbeitskopie Schritt für Schritt aktualisieren möchten. Es empfiehlt sich, ein ganzes Verzeichnis in Ihrer Arbeitskopie zu aktualisieren, nicht nur eine Datei, da Ihre Arbeitskopie sonst inkonsistent sein könnte. Dies wird verwendet, um einen bestimmten rev Zweck zu testen, ob Ihr Test gemacht hat, können Sie diesen Befehl verwenden, eine weitere Umdrehung zu testen oder SVN-Update verwenden, um HEAD

zu bekommen Wenn Sie dauerhaft eine frühere Änderung rückgängig machen möchten, Verwenden Sie Stellen Sie stattdessen auf diese Revision.

- von TSVN Hilfe doc

Wenn Sie zu einem frühen rev Ihrer Arbeitskopie aktualisieren, dies nur Ihre eigene Arbeitskopie beeinflussen wird, nachdem Sie etwas Änderung tun, und begehen will, werden Sie scheitern, TSVN wird Sie warnen, Ihr WC auf die neueste Revision zuerst zu aktualisieren Wenn Sie zu einem rev zurückkehren, können Sie commit to repository.everyone wird wieder auf den rev, nachdem sie ein Update durchführen.

5

Die Dateien in Ihrer Arbeitskopie könnten aussehen genau das gleiche nach, aber sie sind immer noch sehr unterschiedliche Aktionen - das Repository in einem ganz anderen Zustand befindet, und Sie werden nach dem Zurücksetzen verschiedene Optionen zur Verfügung haben, als " Aktualisierung "zu einer alten Revision.

Kurz gesagt betrifft "update to" nur Ihre Arbeitskopie, aber "reverse merge and commit" wirkt sich auf das Repository aus.

Wenn Sie auf eine alte Revision "updaten", dann hat sich das Repository nicht geändert: In Ihrem Beispiel ist die HEAD Revision immer noch 100. Sie müssen nichts festlegen, da Sie nur mit Ihrer Arbeit herumspielen Kopieren. Wenn Sie Änderungen an Ihrer Arbeitskopie vornehmen und versuchen, diese zu übernehmen, wird Ihnen mitgeteilt, dass Ihre Arbeitskopie veraltet ist. Sie müssen diese aktualisieren, bevor Sie eine Festschreibung vornehmen können. Wenn jemand anderes, der an demselben Repository arbeitet, ein "Update" vornimmt, oder wenn Sie eine zweite Arbeitskopie auschecken, wird es r100 sein.

Wenn Sie jedoch eine alte Revision in umgekehrter Reihenfolge durchführen, basiert Ihre Arbeitskopie immer noch auf dem HEAD (vorausgesetzt, Sie sind auf dem neuesten Stand). Sie erstellen jedoch eine neue Revision, um die unerwünschten zu ersetzen Änderungen. Sie müssen diese Änderungen festschreiben, da Sie das Repository ändern. Sobald dies geschehen ist, zeigen alle Aktualisierungen oder neuen Arbeitskopien, die auf dem HEAD basieren, r101 mit den Inhalten an, die Sie gerade festgelegt haben.

29

um zu verstehen, wie der Zustand der Arbeitskopie in beiden Szenarien unterschiedlich ist, müssen Sie das Konzept der BASE revision verstehen:

BASE

Die Revisionsnummer eines Artikels in einer Arbeitskopie. Wenn der Artikel lokal modifiziert wurde, bezieht sich dies auf die Art und Weise, auf die das Element ohne diese lokalen Änderungen erscheint.

Ihre Arbeitskopie enthält einen Schnappschuss jeder Datei (in einem Svn Ordner versteckt) in dieser BASE Revision, was bedeutet, wie es war, als letztes aus dem Repository abgerufen werden. Dies erklärt, warum Arbeitskopien den doppelten Platz beanspruchen und wie Sie lokale Änderungen ohne Netzwerkverbindung untersuchen und sogar rückgängig machen können.

Artikel auf Revision aktualisieren ändert diese Basisrevision, wodurch BASE veraltet wird. Wenn Sie versuchen, lokale Änderungen zu übernehmen, wird SVN feststellen, dass Ihre BASE nicht mit dem HEAD des Repositorys übereinstimmt. Die Festschreibung wird verweigert, bis Sie eine Aktualisierung (und möglicherweise eine Zusammenführung) durchführen, um dies zu beheben.

Auf Revision zurücksetzen ändert sich nicht BASE. Es ist konzeptionell fast dasselbe wie die Datei manuell zu bearbeiten, um mit einer früheren Revision übereinzustimmen.

+0

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 "update" im Vergleich zu "revert" ein anderes Verhalten verursacht, wenn versucht wird, zu committen. – radarbob

+0

Wie werden 'update to' und 'revert to/from' lokale Änderungen behandelt (nicht festgeschriebene Änderungen)? – BaltoStar

2

Der Text von der Schildkröte Referenz:

Aktualisiere zu Revision Aktualisieren Sie Ihre Arbeitskopie der gewählten Revision. Nützlich, wenn Sie möchten, dass Ihre Arbeitskopie eine Zeit in der Vergangenheit widerspiegelt oder wenn weitere Commits an das Repository gesendet wurden und Sie Ihre Arbeitskopie Schritt für Schritt aktualisieren möchten. Es empfiehlt sich, ein ganzes Verzeichnis in Ihrer Arbeitskopie zu aktualisieren, nicht nur eine Datei, da Ihre Arbeitskopie sonst inkonsistent sein könnte.

Wenn Sie eine frühere Änderung dauerhaft rückgängig machen möchten, verwenden Sie stattdessen Zu dieser Revision zurückkehren.

Revert zu dieser Revision Revert zu einer früheren Revision.Wenn Sie mehrere Änderungen vorgenommen haben und dann entscheiden, dass Sie wirklich zurückgehen möchten, wie die Dinge in Revision N waren, ist dies der Befehl, den Sie benötigen. Die Änderungen werden in Ihrer Arbeitskopie rückgängig gemacht, sodass diese Operation das Repository nicht beeinflusst, bis Sie die Änderungen festgeschrieben haben. 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 vorgenommen haben, führt dieser Befehl die Rückgängig-Änderungen in Ihre Arbeitskopie zusammen.

Was intern passiert, ist, dass Subversion eine umgekehrte Zusammenführung aller Änderungen durchführt, die nach der ausgewählten Revision vorgenommen wurden, und den Effekt dieser früheren Commits rückgängig machen.

Wenn Sie nach dem Ausführen dieser Aktion beschließen, das Rückgängigmachen rückgängig zu machen und Ihre Arbeitskopie in den vorherigen unveränderten Zustand zurückzuversetzen, sollten Sie TortoiseSVN → Revert innerhalb von Windows Explorer verwenden, wodurch die lokalen Änderungen verworfen werden umgekehrte Zusammenführungsaktion

Wenn Sie einfach sehen möchten, wie eine Datei oder ein Ordner zu einer früheren Revision aussah, verwenden Sie stattdessen Update auf Revision oder Revision speichern unter ....