102

今天早上,我通过执行以下操作成功地射中了自己的脚:

  1. 开始对我的项目进行更改
  2. 对一堆文件进行了一堆编辑
  3. 意识到我的方法全错了,我需要重新开始
  4. cd'd 到我项目的顶层并执行“svn --recursive revert”。将我的本地沙箱恢复到更改前的状态。
  5. 当我意识到我的本地沙盒中还有许多其他未完成的变化时,我惊恐地嚎叫着,而我刚刚将它们全部抹去。(上周五 svn 服务器宕机了,所以我没能签到,周末忘记了)

幸运的是,在这种情况下,我在周五下班前做了一个“svn diff > temp.txt”,而 temp.txt 文件仍在我的硬盘上,所以我能够将该文件输入“补丁”并恢复我的丢失的变化。

但是为了我将来的参考(即下次我犯同样的愚蠢错误)......有没有办法告诉svn撤消“svn revert”?svn 是否在任何地方保留本地/未签入差异的备份?

4

10 回答 10

106

有一个解决方案......去你的回收站你会发现那里有已删除文件的最新版本。乌龟将它还原的每个文件“扔”到回收站。

于 2009-12-16T08:37:55.400 回答
86

不,(绝对)

如果你对 Subversion 说它应该恢复一个文件,那么所有的更改都会随风而逝。

只有你的记忆才能把它们找回来。

例外:您添加的新文件,只会丢失其“已添加”状态,但文件将保留在此目录中,只有状态未知(“?”)

平台/软件异常:在 Windows 上使用 TortoiseSVN,Revert 首先将文件扔到回收站,然后再恢复它们。您可以深入回收站以恢复文件。

于 2009-10-05T17:36:19.687 回答
32

不是 Subversion 特定的,但如果您正在使用 Eclipse,您可以在本地历史中试试运气。

现在,一些更具体的 Subversion 的东西:如果你不想为你所做的每一个更改创建一个分支,你可以在本地检查几个主干(trunk-modif-1,trunk-modif-2.. .)。每个“修改”都在单独的树上完成,您只需要保留一个列表,其中列出了哪些签出对应于哪些修改。

或者你可以在本地使用 Git,但我从未尝试过。

于 2009-10-05T22:22:19.583 回答
14

最近犯了这个错误,没有在 SVN 上提交新的文件更改(大约 10 个),但由于我的愚蠢错误,它们都消失了。但救了我的是上下文菜单中的 Windows“恢复以前的版本”选项。唷,这是一种解脱和教训。

于 2011-11-17T10:12:38.673 回答
8

如果您使用的是svn command-line client ,则无法恢复文件。

但是如果你使用 TortoiseSVN 作为你的 svn 客户端,你可以恢复它们。TortoiseSVN 会自动将它们移动到您的回收站。您可以在意外还原后从那里恢复它们。

这是 TortoiseSVN 中的一个可配置选项。它位于设置 -> 对话框 1 -> 还原时使用回收站。

默认情况下它被选中,这意味着文件被移动到回收站。如果你愿意(大多数情况下你不想禁用它。如果你有理由,也请告诉我)

于 2015-09-14T19:45:09.123 回答
6

如果您使用 InteliJ,那么您就是一个幸运的人。在顶部菜单上,您有一个版本控制选项,在它下面您将找到本地历史记录选项,您可以在其中找到所选文件的所有历史记录,包括您对该文件执行的所有操作(更新、提交、恢复)。

祝你好运,阿克德

于 2012-03-02T09:00:39.020 回答
4

此外,如果您已恢复您的 .NET 代码(.cs 文件等)并且您在恢复之前构建了应用程序,但在您进行更改之后,您可以使用任何反射器工具从程序集文件中恢复更改以查看代码。

于 2012-09-17T15:48:50.450 回答
3

我非常幸运地在 Eclipse 的历史浏览器中找到了文件的本地更改日志(Local Revisions)。我一直在逐一检查差异,并在覆盖之前对文件进行了几次保存。

于 2018-02-08T15:39:43.940 回答
2

我恢复了解决方案(Visual Studio + AnkhSVN)并丢失了几个文件的更改。我在回收站中找不到文件。

但是:我使用 Handy Recovery 恢复了丢失的文件,即 SVN 只是在恢复时删除我的文件。

使用任何数据恢复软件来恢复恢复的文件(如试用Handy Recovery

于 2014-12-24T15:05:38.680 回答
1

不,SVN 不保留日志或备份(尽管其他答案中提到了 TortoiseSVN 的解决方案)。

但是,如果有人正在浏览答案并且没有注意到 OP 问题中的此评论:

“幸运的是,在这种情况下,我在周五下班前做了一个“svn diff > temp.txt”,而 temp.txt 文件仍在我的硬盘上,所以我能够将该文件输入“补丁”并恢复我丢失的变化。”

我想在你做一个'svn revert'之前做'svn diff'是一个常见的范例。如果您养成这样做的习惯,即使差异只是回显到终端,您至少有一种可能的途径来恢复丢失的更改。

于 2016-12-09T16:53:38.463 回答