有没有办法从意外的“svn还原”中恢复?

时间:2009-10-05 17:24:36

标签: svn undo revert

今天早上,我设法通过以下方式射击自己:

  1. 开始改变我的项目
  2. 对一堆文件进行了大量编辑
  3. 意识到我的方法都错了,我需要重新开始
  4. cd到我项目的顶层并做了一个“svn --recursive revert”。将我的本地沙箱恢复到更改前的状态。
  5. 我惊恐地咆哮着,因为我意识到在我当地的沙箱里还有其他一些未完成的变化,我刚刚把它们全部抹掉了。 (上个星期五svn服务器已经关闭,所以我无法检查它们,周末我忘记了它们)
  6. 幸运的是在这种情况下我在星期五离开工作之前做了一个“svn diff> temp.txt”,而temp.txt文件仍然在我的硬盘上,所以我能够将该文件输入“补丁” “并恢复我失去的变化。

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

10 个答案:

答案 0 :(得分:98)

有一个解决方案...... 转到您的回收站,您将找到已删除文件的最新版本。 乌龟“扔”回收箱中的每个文件都会回收垃圾箱。

答案 1 :(得分:72)

不,(绝对)

如果你对Subversion说它应该还原一个文件,所有的变化都会被风吹走。

只有你的记忆可以让他们回来。

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

平台/软件例外:在Windows上使用TortoiseSVN,Revert首先将文件投入回收站,然后将其还原。您可以深入了解回收站以恢复文件。

答案 2 :(得分:30)

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

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

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

答案 3 :(得分:13)

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

答案 4 :(得分:7)

如果您使用 svn命令行客户端,则无法恢复文件。

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

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

默认情况下,它会被选中,这意味着文件会被移动到回收站。如果你想要(大多数时候你都不在乎禁用它。如果你有理由,请让我也知道)

答案 5 :(得分:5)

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

祝你好运, Arkde

答案 6 :(得分:4)

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

答案 7 :(得分:1)

我恢复了解决方案(Visual Studio + AnkhSVN)并丢失了少量文件的更改。我无法在回收站中找到该文件。

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

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

答案 8 :(得分:1)

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

答案 9 :(得分:0)

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

但是如果有人正在浏览答案而在OP的问题中没有注意到这个评论:

"幸运的是,在这种情况下,我做了一个" svn diff> TEMP.TXT"在星期五离开工作之前,temp.txt文件仍在我的硬盘上,所以我能够将该文件输入到#34; patch"并恢复我丢失的变化。"

我认为这是一个常见的范例,可以做到这一点。在你做“恢复”之前。如果你养成这样做的习惯,即使差异只是回应终端,你至少可以找到一条途径来恢复你丢失的变化。