SVN:如何返回到以前的版本?

SVN:如何返回到以前的版本?,svn,Svn,我正在做的一个项目犯了一系列错误。如何恢复到已知的工作修订版并在此基础上进行构建?假设我在第15次修订,但我想回到第10次修订——然后继续学习第10次修订。我正在使用Zend Studio 我可以从命令行删除SVN中存在的修订吗?: svn up -r [revision_number] 其中,[revision_number]是要恢复到的版本 不,您不能删除SVN中已经存在的修订。三个选项: 反向合并:(最快,保留错误修订,添加新修订) SVN转储:(完全删除错误的修订) svnadmin

我正在做的一个项目犯了一系列错误。如何恢复到已知的工作修订版并在此基础上进行构建?假设我在第15次修订,但我想回到第10次修订——然后继续学习第10次修订。我正在使用Zend Studio

我可以从命令行删除SVN中存在的修订吗?

svn up -r [revision_number]
其中,[revision_number]是要恢复到的版本

不,您不能删除SVN中已经存在的修订。

三个选项:

反向合并:(最快,保留错误修订,添加新修订)

SVN转储:(完全删除错误的修订)

svnadmin dump $(REPO) -r 1:$(GOODREV) > dumpfile
svnadmin load $(NEWREPO) < dumpfile
# Now delete $(REPO), and use $(NEWREPO)
svnadmin dump$(REPO)-r1:$(GOODREV)>dumpfile
svnadmin load$(NEWREPO)
手工编辑:(删除错误修订、不安全、最后手段)

您可能需要这样做的唯一原因是,出于某种原因,您具有对存储库的文件级访问权限,但没有shell访问权限。请注意,这仅在SVN 1.6和1.7上进行了测试

  • 将您的工作副本更新为
    $(GOODREV)
    (如果保留在
    标题处,则在我们完成后将无法使用。)
  • 采取任何措施确保回购协议不受外部访问。如果它连接到web服务器,请立即断开连接。在此过程中,第三方访问回购协议可能会损坏回购协议
  • 支持你的回购协议。(永远不会受伤,以防万一出错。)
  • db/current
    中的数字更改为
    $(GOODREV)
    。确保不要改变
    LF
    行的结尾
  • 删除
    db/revs/*/*
    db/revprops/*/*/*
    中的所有编号文件(不是文件夹),这些文件都是>
    $(GOODREV)
  • 删除
    db/rep cache.db
  • 将您的工作副本更新为
    标题
    ,该标题现在应等于
    $(GOODREV)
  • 请注意,如果正在使用,还必须完成以下步骤:

  • 删除
    %APPDATA%\TortoiseSVN\logcache\*
  • 通过任务管理器杀死所有实例
    TSVNCache.exe
    。(通常有一个,但WinVista+上可能有2个,因为UAC安全性会阻止提升的应用程序与非提升的
    TSVNCache.exe
    交互。第一次从提升的应用程序打开
    另存为…
    对话框时,将生成提升的
    TSVNCache.exe

  • 这将修复由于OrtoiseSVN缓存与新的repo状态冲突而导致的奇怪日志显示。

    您只需使用

    svn up -r 10
    
    但正如Christoph所建议的,这将不允许您提交更改,因为SVN需要您在提交之前将工作副本更新到HEAD。你能做的是

    svn merge -r HEAD:10 yourFile
    svn ci yourFile -m "Reverting back to rev 10"
    

    从Ortoisesvn办公网站获取文档

  • 使用“修订日志”对话框
  • 使用“合并”对话框
  • 我使用方法2,在我这边做得很好


    @Ash-假设我更新回第10版,然后对其进行更改,然后提交。我会遇到任何问题,因为我是在第10版工作,但SVN已经在15吗?不,你将进入第16版。这应该不是一个问题。下次提交时,当您恢复到10时,修订版16将成为当前修订版。这将基本上绕过11-15中所做的一切。@Ash你确定吗?我很确定svn会把这当作一场冲突。当然,您可以接受所有更改都是正确的,但这不再是一个简单的提交。SVN希望您在提交之前将工作副本更新到HEAD,以便此过程不起作用。更好的分支来自一个已知的版本:svn cp svn cp如果您愿意,您可以重新命名newbranch。强烈建议您通过@Unsigned查找答案。公认的答案根本不是最佳解决方案。简言之,要反转错误的提交,应该使用反向合并,因为SVN也可以执行正确的合并跟踪。并且可以删除无效的修订,以Unsigned的答案为准。您能举一个填充了变量的合并的例子吗?
    svn merge -r HEAD:10 yourFile
    svn ci yourFile -m "Reverting back to rev 10"