想要从我的 SVN 存储库中删除修订

35 tortoise-svn version-control svn

我的代码存储库中的最新修订版已损坏并破坏了我的应用程序的稳定性。我想恢复到较早的版本。

但我不想简单地在我的工作副本上使用“revert”;我实际上想在我的回购中删除我的头部修订和之前的几个修订,从而将我的回购“恢复”到较早的修订,这将成为头部修订。有谁知道我会怎么做?

mar*_*tin 82

这对我有用。鉴于您将修订版 1234 作为 HEAD,并且您想要还原最后三个提交:

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo
Run Code Online (Sandbox Code Playgroud)

  • +1。你是唯一一个既理解问题又给出具体答案的人。 (13认同)
  • 只要您确保还将存储库 UUID 复制到新存储库(请参阅“svnadmin setuuid”,从旧存储库的“svn info”中的 UUID 复制),只有更新到您要删除的修订版的检出才会无效。 (8认同)
  • 这在技术上是正确的答案。但是,应该指出的是,这除了可能相当复杂之外,还会使所有签出的副本无效 - 因此您需要提醒任何也在使用该存储库的人。 (6认同)
  • 快速、简单、切中要害,实际上是海报所要求的。 (2认同)
  • 在新的存储库上,您可能需要修复文件权限或复制 hooks/conf 目录中的文件 (2认同)

Fel*_*lix 12

也许这个链接可以帮助你:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

引用:

  1. 切换到工作副本中的顶级目录(假设您要回滚整个工作副本)。

  2. 运行svn revert将工作副本的文件恢复到上次提交/签出时的状态。

  3. 运行svn status -v以查看您的工作副本现在对应的修订号(它是svn status -v生成列表中的最高修订号)。

  4. run svn merge -rXX:YYwhereXX是您在上一步中获得YY的编号, 是您要还原到的修订编号。

  5. 完毕!可能的例外是您的工作副本中YY最初进行修订时不存在的文件仍然存在,因为默认情况下 svn 不会删除内容。如果您想摆脱它们,请svn del [filename]对它们中的每一个运行 a 。

  6. 做得好!现在使用您的工作副本,就好像所有这些中间编辑从未发生过一样。当您准备好投入工作时,只需像往常一样使用 svn commit 即可!

  • 这实际上并没有恢复到“早期修订,这将成为主要修订”。它不会使旧版本成为 HEAD。相反,它创建了一个新的 HEAD。见马丁的回答。 (3认同)

小智 5

您可以使用转储/加载来实现此目的。

您还可以使用 svnsync 来备份某些修订版。

如果您有一个大存储库,则需要时间。


小智 5

我知道这是一个老问题,但是,我刚刚找到了如何使用 Windows/TortoiseSVN 做到这一点。

正如评论所建议的那样,您不能“删除”修订版,但您可以做的是制作一个与您要恢复的修订版相同的最新修订版。

  1. 签出要从中恢复修订的目录的存储库的 HEAD。
  2. 在 TortoiseSVN 中加载您想要恢复的最高级别目录的“显示日志”视图(例如“Trunk”)。
  3. 右键单击要删除的修订 注意:这是要删除的修订,而不是要还原到的修订。
  4. 选择“从该版本恢复更改”。
  5. 出现提示时单击“是”。
  6. 正常更新结帐,但更新为“HEAD”。
  7. 把它交回来。

然后,您将去找其他检查过它的人,让他们更新并确保删除任何新文件。

此外,您需要确保每个人都知道该修订是什么,并可能更新描述。


小智 5

对我来说(VisualSVN,30-HEAD)是这样工作的:

  del C:\Repositories\MyRepo\revs\0\30
  del C:\Repositories\MyRepo\revs\0\29
  del C:\Repositories\MyRepo\revs\0\28
  del C:\Repositories\MyRepo\revprops\0\30
  del C:\Repositories\MyRepo\revprops\0\29
  del C:\Repositories\MyRepo\revprops\0\28
  回声 27 > C:\Repositories\MyRepo\db\current