17

我们遇到了有人搞砸了对我们 SVN 服务器的提交的情况。很多文件被删除等等。

问题:使以前的(对错误的 Commit)修订成为 HEAD 修订的技术是什么?我在这里看到了关于 SO 为 1 个文件执行此操作的讨论,但我们想让它就像最后一次提交从未发生过一样。有任何想法吗?

所有这些答案似乎都是正确的。我将 abatishchev 的答案标记为正确答案只是因为我使用的是 Tortoise SVN,而且这是我实际使用的方法。

4

5 回答 5

19

最干净的方法是撤消更改

您可以使用 svn merge 来“撤消”工作副本中的更改,然后将本地修改提交到存储库。您需要做的就是指定反向差异。(您可以通过指定--revision 303:302或等效的 来做到这一点--change -303。)

我意识到它并没有“让它像最后一次提交从未发生过”,因为提交仍然是历史的一部分,但我相信最好将那个错误的提交保留在历史中。
它可能包括一些可以查询/比较的正在进行的工作,以便轻松地重新进行新的正确提交。


即使:

  • SVN(1.5)手册提到了一个未来的obliterate命令,它将完成永久删除信息的任务,并且
  • 提到svndumpfilter一个可能的解决方法(因为它提供了通过充当基于路径的过滤器来快速轻松地修改该转储文件数据的能力)

... 最好不要尝试将 SCM 工具扭曲成原本不打算做的事情。
历史化(以及带有分支的并行化)是 SCM 的两个主要特征。

于 2008-12-04T06:47:47.780 回答
9

也许您可以显示日志,检查以前的修订版(n-1),在上下文菜单中选择恢复到此修订版并提交更改(它将变为 n+1,其中 n 是当前的坏头)

于 2008-12-04T06:50:29.800 回答
1

您可以使用svnadmin dump和来做到这一点svnadmin load。这是一种蛮力的方法,但我相信这是唯一的方法。

这个问题的答案可能会有所帮助:Nuking huge file in svn repository

于 2008-12-04T06:42:57.960 回答
0

您可以 svn cp 特定版本,因此如果没有要保存的干预操作,您可以 svn rm 有问题的目录,然后 svn cp 旧版本。请参阅本书的 Peg 和 Operative Revision 部分

于 2008-12-04T06:53:55.677 回答
0

使用 TortoiseSVN,如果您只想查看提交之前版本的存储库:

  • 使用 TortoiseSVN 存储库浏览器打开 URL。
  • 请注意该提交的修订号,然后通过单击右上角的按钮将 HEAD 更改为该数字 - 1。

在此处输入图像描述

于 2017-10-17T07:42:22.447 回答