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

Eri*_*tas 161 svn tortoisesvn

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

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

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

Pet*_*ker 203

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

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

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

  • 如果您尝试使用旧版本而不是HEAD提交项目,则会出现"提交失败:您的工作副本可能已过期" (5认同)

Wim*_*nen 31

要了解两种方案中工作副本的状态是如何不同的,您必须了解BASE修订版的概念:

基础

工作副本中项目的修订号.如果项目已在本地修改,则表示项目的显示方式,而不进行本地修改.

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

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

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


pri*_*e23 5

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

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

-来自TSVN帮助文档

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


Zac*_*son 5

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

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

如果您"更新"到旧版本,则存储库未更改:在您的示例中,HEAD修订版仍为100.您不必提交任何内容,因为您只是在处理工作副本.如果您对工作副本进行了修改并尝试提交,您将被告知您的工作副本已过期,并且您需要在提交之前进行更新.如果在同一个存储库上工作的其他人执行"更新",或者如果您签出第二个工作副本,那么它将是r100.

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