更新项目以修订与还原为修订


161

我已经开始将Subversion与TortoiseSVN一起使用。如果我打开日志并右键单击一个旧修订版,我会看到两个选项听起来像它们回滚到旧版本:“将项目更新到修订版”和“还原到该修订版”。

我了解到,当您只想回顾旧版本而不真正更改存储库时,将使用更新到较旧的版本。还原是指您实际搞砸并希望存储库中的最新修订版本与旧版本相同时。

因此,假设HEAD修订版为100,而我又还原为95。它将反向将我的工作副本合并回95。然后,我可以将该更改提交到存储库中,从而创建正确的修订版101?如果我要更新回版本95,会有什么不同?难道还不只是撤消上次修订的更改吗?我对还原或更新到较旧修订版后工作副本的状态有所不同感到困惑。

Answers:


205

更新到修订版只会将您的工作副本文件更新到您选择的修订版。但是您无法继续进行此修订,因为SVN会抱怨您的工作副本已过期

恢复到该修订版本将撤消工作副本中在选定修订版本之后所做的所有更改(在您的示例中,版本为96,97,98,99,100)。工作副本现在处于修改状态

两个方案的文件内容是相同的,但是在第一种情况下,您具有未修改的工作副本,并且无法提交更改(因为您的工作副本未指向HEAD rev 100);在第二种情况下,您具有的修改后的工作副本指向head和您可以继续工作并作出承诺


1
好的,所以说我更新到修订版本,并且我的工作副本中没有数据。没有什么阻止我更改文件。如果我更改其中一个文件并尝试提交该怎么办。我想Subversion将看到冲突,并迫使我在提交它之前将存储库中的最新版本合并到修改后的工作副本中。
埃里克·阿纳斯塔斯

5
如果您尝试与旧BASE-修订不是头对提交的项目,你会得到一个“提交失败:你的工作副本想必过时”
彼得·帕克

怎么办update torevert to/from治疗局部变化(未提交的更改)?
BaltoStar

两种方法都可以保持本地更改的完整性,但是在两种情况下,本地更改都可能导致冲突,而在还原的情况下,来自回滚的修改将与所有其他用户的本地更改混合在一起。因此,至少保存您所做修改的补丁或提交到分支。
彼得·帕克

31

要了解两种情况下工作副本的状态如何不同,您必须了解BASE版本的概念:

基础

工作副本中项目的修订号。如果项目已被本地修改,则是指该项目在没有那些本地修改的情况下的显示方式。

您的工作副本包含此BASE修订版中每个文件的快照(隐藏在.svn文件夹中),这意味着它是从存储库中最后一次检索时的快照。这解释了为什么工作副本占用2倍的空间,以及在没有网络连接的情况下如何检查甚至还原本地修改的可能性。

将项目更新到修订会更改此基本修订,使BASE过时。当您尝试提交本地修改时,SVN会注意到您的BASE与存储库HEAD不匹配。除非您进行更新(可能是合并)以解决此问题,否则提交将被拒绝。

恢复至修订版本不会更改BASE。从概念上讲,它与手动编辑文件以匹配早期版本几乎相同。


从接受的答案“两个方案的文件内容相同”。那为什么要打扰呢?这个答案解释了最终的差异,并解释了为什么在尝试提交时“更新”与“还原”与“还原”导致不同的行为。
Radarbob 2015年

怎么办update torevert to/from治疗局部变化(未提交的更改)?
BaltoStar

5

之后,工作副本中的文件看起来可能完全相同,但是它们的动作仍然非常不同-存储库处于完全不同的状态,并且在还原后,您将拥有与“更新”到旧版本不同的选项。 。

简要地说,“更新到”仅影响您的工作副本,但“反向合并并提交”将影响存储库。

如果您“更新”到旧修订版,则说明存储库没有更改:在您的示例中,HEAD修订版仍为100。您不必提交任何内容,因为您只是在弄乱工作副本。如果您对工作副本进行修改并尝试提交,则系统将告知您工作副本已过时,并且需要进行更新才能提交。如果在同一存储库上工作的其他人执行了“更新”,或者您签出了第二个工作副本,则它将为r100。

但是,如果您“反向合并”到旧修订版,则您的工作副本仍基于HEAD(假设您是最新的),但是您正在创建新修订版以取代不需要的更改。由于要更改存储库,因此必须提交这些更改。完成后,基于HEAD的所有更新或新工作副本将显示r101,其中包含您刚刚提交的内容。


5

将您的工作副本更新为选定的版本。如果您希望工作副本反映过去的时间,或者对存储库有进一步的提交,并且想一次更新您的工作副本,则很有用。最好在工作副本中更新整个目录,而不是仅更新一个文件,否则工作副本可能会不一致。这用于测试特定的修订版目的,如果您已完成测试,则可以使用此命令来测试另一个修订版,或使用SVN Update获取HEAD

如果要永久撤消以前的更改,请改用“ 还原到此修订版”

-来自TSVN帮助文档

如果将工作副本更新为较早的修订版,则只会影响您自己的工作副本,在进行某些更改并要提交后,您将失败,TSVN会提醒您首先将WC更新为最新版本。到一个版本,您可以提交到版本库。每个人都将在更新后返回到该版本。


2

乌龟参考的文字:

将项目更新为修订版 将您的工作副本更新为选定的修订版。如果您希望工作副本反映过去的时间,或者对存储库有进一步的提交,并且想一次更新您的工作副本,则很有用。最好在工作副本中更新整个目录,而不是仅更新一个文件,否则工作副本可能会不一致。

如果要永久撤消先前的更改,请改用“还原到此修订版”。

还原到该修订版 还原到较早的修订版。如果您进行了几处更改,然后确定您确实要返回到修订版N中的情况,则需要此命令。所做的更改将在您的工作副本中撤消,因此在您提交更改之前,此操作不会影响存储库。请注意,这将撤消在选定修订版本之后所做的所有更改,将文件/文件夹替换为较早的版本。

如果您的工作副本处于未修改状态,则在执行此操作后,您的工作副本将显示为已修改。如果您已经有本地更改,此命令会将撤消更改合并到您的工作副本中。

内部发生的事情是Subversion对所选修订版之后所做的所有更改执行反向合并,从而撤消了先前那些提交的影响。

如果在执行此操作后确定要撤消撤消并将工作副本恢复为以前的未修改状态,则应使用Windows资源管理器中的TortoiseSVN→还原,这将放弃此反向合并操作所做的本地修改。

如果您只是想查看早期版本的文件或文件夹的外观,请改用“更新到版本”或“将版本另存为...”。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.