将项目更新为修订版本还原为修订版本

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

我明白,当你只想回顾一个旧的版本,但并没有真正改变版本库的时候,就使用更新版本。 当你真的搞砸了,并希望版本库中的最新版本与旧版本相同时,还原就是了。

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

更新到版本将只更新您工作副本的文件到您select的版本。 但是你不能继续修改这个版本,因为SVN会抱怨你的工作拷贝已经过时了

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

这两个情景的文件内容是相同的,但是在第一种情况下,你有一个未经修改的工作副本 ,你不能提交你的修改(因为你的工作副本不指向HEAD rev 100)你可以继续工作和提交

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

基础

工作副本中项目的版本号。 如果该项目已被本地修改,则表示该项目在没有进行本地修改的情况下出现的方式。

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

将项目更新到版本会更改此基本版本,从而使BASE过期。 当你尝试提交本地修改时,SVN会注意到你的BASE和版本库HEAD不匹配。 提交将被拒绝,直到你做一个更新(也可能是一个合并)来解决这个问题。

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

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

简单地说,“更新到”只会影响你的工作副本,但是“反向合并和提交”会影响存储库。

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

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

将您的工作副本更新到选定的修订版本。 如果您想让工作副本反映过去的某个时间,或者已经对存储库进行了进一步的提交,并且想要一次一个步骤地更新工作副本,则这很有用。 最好是更新工作副本中的整个目录,而不是一个文件,否则工作副本可能会不一致。 这是用来testing一个特定的rev目的,如果你的testing已经完成,你可以使用这个命令来testing另一个rev或使用SVN Update来获得HEAD

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

– 来自TSVN帮助文档

如果你更新你的工作副本到更早的版本,这只会影响你自己的工作副本,在你做了一些修改之后,你会失败,TSVN会提醒你更新你的版本到最新版本。如果你恢复到一个rev,你可以提交到repository.everyone会在更新之后回到rev。

乌龟参考文献:

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

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

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

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

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

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

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

@BaltoStar更新到修订语法:

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

 svn update -r30 

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