2009-07-31 161 views
148

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

我知道当您只想回顾旧版本,但并未真正更改存储库时,将使用更新到较旧版本。当你真的搞砸了,并希望版本库中的最新版本与旧版本相同时,还原是。

所以说HEAD修订版本是100,我恢复到95.它会反向合并我的工作副本回95.然后,我可以提交更改到存储库,这将创建修订101正确?如果我要更新回修订版95,这有什么不同?它不仅仅能够扭转上次修订版的变化吗?我很困惑我的工作副本的状态在恢复或更新到旧版本之后有何不同。

回答

190

更新到修订版只会将工作副本的文件更新为您选择的修订版。 但你不能继续工作在这个版本上,因为SVN会抱怨你的工作拷贝是过期

回复到本次修订将撤消在你的工作副本被选中版本之后进行的更改(在你的榜样转。96,97,98,99,100) 你现在的工作副本处于修改状态

两个scenarions的文件内容是相同的,然而,在第一种情况下,你有一个修改的工作副本,你不能提交更改(如您的workingcopy没有指向HEAD修订100)在第二种情况下,你有一个修改工作副本指着头,你可以继续工作,并承诺

+0

好吧,说我更新到修订和我的工作副本数据不足。没有什么阻止我改变文件。如果我更改其中一个文件并尝试提交它,该怎么办?林猜测颠覆会看到冲突,迫使我在我提交之前将库中的最新版本合并到我修改后的工作副本中。 – 2009-08-01 19:48:33

+5

如果你尝试提交一个比HEAD更老的BASE-Revision的项目,你会得到一个“提交失败:你的工作副本可能已经过期” – 2009-08-02 10:35:27

4

将您的工作副本更新到选定的修订版。如果您希望让工作副本反映过去的某个时间,或者已经对存储库进行了进一步的提交,并且希望一次更新工作副本,则这很有用。最好在工作副本中更新整个目录,而不仅仅是一个文件,否则工作副本可能会不一致。 这是用来测试特定转速的目的,如果您的测试已经完成,你可以,如果你想永久撤销先前的更改使用此命令来测试另一个转或使用SVN更新得到HEAD

,请使用改为修改

- 从TSVN帮助文档

如果你更新你的工作拷贝到一个较早的转速,这不仅会影响自己的工作拷贝,你做一些改变后,想犯,你会失败,TSVN将提醒您更新您的WC到最新版本第一个 如果您恢复到rev,您可以提交到repository.everyone将在更新后回到rev。

5

在你的工作拷贝的文件可能一模一样后,但他们还是很不同的动作 - 仓库是在一个完全不同的状态,而不是“恢复后,你将必须提供给您不同的选择更新“到旧版本。

简而言之,“更新到”只会影响您的工作副本,但“反向合并和提交”将影响存储库。

如果您对旧版本进行“更新”,那么版本库并没有改变:在您的示例中,HEAD版本仍然是100.您不必提交任何内容,因为您只是搞乱了自己的工作复制。如果您对工作副本进行了修改并尝试提交,您会被告知您的工作副本已过时,并且在提交之前需要进行更新。如果在同一个存储库上工作的其他人执行“更新”,或者如果您签出另一个工作副本,则它将是r100。但是,如果您“反向合并”到旧版本,那么您的工作副本仍然基于HEAD(假设您是最新的) - 但是您正在创建一个新版本以取代不需要的变化。您必须提交这些更改,因为您正在更改存储库。完成后,基于HEAD的任何更新或新工作副本都将显示r101以及您刚刚提交的内容。

29

要了解你的工作拷贝的状态是如何在这两种情况不同,你必须了解BASE revision的概念:

BASE

工作副本中项目的版本号。如果该项目已被 本地修改,则这指的是 项目出现的方式,而没有那些 本地修改。

你的工作副本包含在这个基础版本的每个文件(隐藏在一个文件夹中的.svn)的快照,这意味着因为它是当从储备库最后检索。这就解释了为什么工作副本需要占用两倍的空间,以及如何在没有网络连接的情况下检查甚至恢复本地修改。

将项目更新到版本会更改此基础修订版本,从而使BASE过期。当您尝试提交本地修改时,SVN会注意到您的BASE与存储库HEAD不匹配。提交将被拒绝,直到您执行更新(可能还有合并)来解决此问题。

还原为修订版不改变BASE。它在概念上与手动编辑文件以匹配较早版本几乎相同。

2

从龟参考文本:

更新项目至版本 更新你的工作拷贝到选中的版本。如果您希望让工作副本反映过去的某个时间,或者已经对存储库进行了进一步的提交,并且希望一次更新工作副本,则这很有用。最好在工作副本中更新整个目录,而不仅仅是一个文件,否则工作副本可能会不一致。

如果您想永久撤销先前的更改,请改为使用还原到此修订版。

恢复到此修订版 恢复到以前的修订版。如果您已经进行了多项更改,然后决定确实想回到修订版N中的内容,则这是您需要的命令。这些更改在您的工作副本中被撤消,因此在您提交更改之前,此操作不会影响存储库。请注意,这将撤消在选定修订版之后所做的所有更改,并用早期版本替换文件/文件夹。

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

内部发生的事情是,Subversion执行所选修订后所做的所有更改的反向合并,撤消这些提交的效果。

如果在执行此操作后,您决定撤消撤消操作并将工作副本恢复到以前的未修改状态,则应该使用Windows资源管理器中的TortoiseSVN→恢复操作,这将放弃由此进行的本地修改反向合并行动。

如果您只想查看早期版本中文件或文件夹的外观,请使用“更新到修订”或“将修订保存为...”。