将项目更新为修订版本并恢复为修订版本

时间:2009-07-31 21:17:15

标签: svn tortoisesvn

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

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

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

6 个答案:

答案 0 :(得分:201)

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

还原到此版本将撤消工作副本中所选更改后所做的所有更改(在您的示例中为96,97,98,99,100) 您的工作副本现在处于已修改状态

两个scenarions的文件内容相同,但是在第一种情况下,您有一个未修改的工作副本并且您无法提交您的更改(因为您的工作副本未指向HEAD rev 100)在第二种情况下你有一个修改过的工作副本指向头部,你可以继续工作和提交

答案 1 :(得分:31)

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

  

BASE

     

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

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

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

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

答案 2 :(得分:5)

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

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

如果你“更新”到旧版本,那么存储库没有改变:在你的例子中,HEAD版本仍然是100.你不必提交任何东西,因为你只是搞乱你的工作副本。如果您对工作副本进行了修改并尝试提交,您将被告知您的工作副本已过期,并且您需要在提交之前进行更新。如果在同一个存储库上工作的其他人执行“更新”,或者如果您签出第二个工作副本,那么它将是r100。

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

答案 3 :(得分:4)

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

如果要永久撤消之前的更改,请改为使用还原为此版本

- 来自TSVN帮助文档

如果您将工作副本更新为较早的版本,这只会影响您自己的工作副本,在您进行更改后想要提交,您将会失败,TSVN会提醒您先将WC更新到最新版本 如果您恢复为rev,则可以提交到repository.everyone在更新后将返回到rev。

答案 4 :(得分:2)

乌龟参考文献:

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

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

还原到此版本 恢复到早期版本。如果您做了一些更改,然后确定您真的想要回到修订版N的内容,那么这就是您需要的命令。您的工作副本中的更改将被撤消,因此在您提交更改之前,此操作不会影响存储库。请注意,这将撤消所选修订后所做的所有更改,将文件/文件夹替换为早期版本。

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

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

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

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

答案 5 :(得分:1)

@BaltoStar更新到修订语法:

http://svnbook.red-bean.com/en/1.6/svn.ref.svn.c.update.html

svn update -r30

其中30是修订号。希望这有帮助!