首页 文章

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

提问于
浏览
159

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

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

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

6 回答

  • 2

    Update to revision 只会将您的工作副本的文件更新为您选择的修订版 . 但是你 cannot continue 可以处理这个版本,因为SVN会抱怨你的工作副本是 out of date .

    revert to this revision 将撤消工作副本中所有在所选修订版本之后所做的更改(在您的示例中为96,97,98,99,100)您的工作副本现在位于 modified state .

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

  • 199

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

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

    您的工作副本包含此BASE版本中每个文件(隐藏在.svn文件夹中)的快照,即 as it was when last retrieved from the repository . 这解释了为什么工作副本占用了2倍的空间,以及如何在没有网络连接的情况下检查甚至恢复本地修改 .

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

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

  • 1

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

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

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

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

  • 31

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

    如果要永久撤消先前的更改,请改用 Revert to this revision .

    • 来自TSVN帮助文档

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

  • 5

    乌龟参考文献:

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

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

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

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

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

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

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

  • 4

    @BaltoStar更新到修订语法:

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

    svn update -r30
    

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

相关问题