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

47

我正在进行的项目中出现了一系列错误。如何回滚到已知的可用版本并在此基础上继续工作?假设我当前在第15个版本,但我想回退到第10个版本 -- 并在第10个版本之后继续工作。我使用的是Zend Studio。

我能否删除SVN中存在的版本记录?


4
强烈建议您查看@Unsigned的回答。被采纳的答案并不是最佳解决方案。简而言之,要撤消您错误的提交,您应该使用反向合并,因为SVN可以进行正确的合并跟踪。同时,在Unsigned的回答中也提供了一种删除无效版本的方法。 - Adrian Shum
4个回答

66

从命令行中:

svn up -r [revision_number]

在这里 [revision_number] 代表你想还原到的版本号。

同时,不能删除已经存在于 SVN 中的版本记录。


1
@Ash - 假设我回退到版本10,然后对它进行更改,最后提交。由于我正在版本10上工作,但是SVN已经更新到15,我会遇到任何问题吗? - StackOverflowNewbie
1
不,您将提交第16个版本。 - Babak Naffas
1
@Ash 你确定吗?我很确定svn会将其视为冲突。当然,你可以接受所有更改都是正确的,但这不再是一个简单的提交了。 - Dunes
8
SVN要求你在提交前将工作副本更新至HEAD,因此这个过程行不通。最好从已知修订版本创建一个分支:svn cp http://myrepos/oldbranch@10 svn cp http://myrepos/newbranch ,然后如果需要的话可以将newbranch重命名。 - Christoph Strasen
例如?您在版本号的“r”和数字之间留空格还是不留?括号呢? - ahnbizcad
显示剩余2条评论

19

你可以直接使用更新到修订版

svn up -r 10

但是正如Christoph所建议的那样,这样做不能让您提交更改,因为SVN需要您将工作副本更新到HEAD才能提交。相反,您可以这样做:

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

你好。我该如何进行 SVN 合并,而不是单个文件,而是所有文件? - Raul Chiarella

14

有三种选择:

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

svn merge $(REPO)@$(GOODREV) $(WC)

SVN转储:(完全删除错误的版本)

svnadmin dump $(REPO) -r 1:$(GOODREV) > dumpfile
svnadmin load $(NEWREPO) < dumpfile
# Now delete $(REPO), and use $(NEWREPO)

手动编辑:(删除不良修订版本,不安全,最后的选择)

你可能需要这么做的唯一原因是,如果某种原因你可以访问存储库的文件级别,但没有 shell 访问权限。请注意,这仅在 SVN 1.6 和 1.7 上进行了测试。

  1. 将您的工作副本更新到 $(GOODREV)(如果保留在 HEAD,则在完成后它将无法使用)。
  2. 采取任何措施以保护存储库免受外部访问。如果它连接到 Web 服务器,请立即断开连接。在此过程中对存储库的第三方访问可能会造成损坏。
  3. 备份存储库。(永远不会有错,以防万一出了问题。)
  4. 更改 db/current 中的数字为 $(GOODREV)。确保不要更改 LF 行尾符。
  5. 删除 db/revs/*/*db/revprops/*/* 中所有大于 $(GOODREV) 的编号文件(而不是文件夹)。
  6. 删除 db/rep-cache.db
  7. 将您的工作副本更新到 HEAD,现在应等于 $(GOODREV)

请注意,如果您使用 TortoiseSVN,则还必须完成以下步骤:

  1. 删除 %APPDATA%\TortoiseSVN\logcache\* 中的所有文件。
  2. 通过任务管理器关闭所有实例的 TSVNCache.exe。(通常只有一个,但由于 UAC 安全性而可能存在 2 个:TSVNCache.exe,它防止提升的应用程序与非提升的 TSVNCache.exe 进行交互。第一次从提升的应用程序打开“另存为...”对话框时,将生成提升的 TSVNCache.exe。)

这将修复 TortoiseSVN 缓存与新存储库状态冲突导致的奇怪日志显示问题。


2
你能给一个填好变量的合并示例吗? - dougd_in_nc

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接