今天早上,我通过执行以下操作成功地射中了自己的脚:
开始对我的项目进行更改 对一堆文件进行了一堆编辑 意识到我的方法都是错误的,我需要重新开始 cd 到我的项目的顶层并执行“svn -递归还原。”将我的本地沙箱恢复到更改前的状态。当我意识到我的本地沙盒中还有许多其他未完成的更改时,我惊恐地嚎叫着,而我刚刚将它们全部抹去。 (上周五 svn 服务器宕机了,所以我没能签到,周末忘记了)
幸运的是,在这种情况下,我在周五下班前做了一个“svn diff > temp.txt”,而 temp.txt 文件仍在我的硬盘上,所以我能够将该文件输入“补丁”并恢复我的丢失的变化。
但是为了我将来的参考(即下次我犯同样的愚蠢错误)......有没有办法告诉svn撤消“svn revert”? svn 是否在任何地方保留本地/未签入差异的备份?
有一个解决方案......去你的回收站你会发现那里有已删除文件的最新版本。乌龟将它还原的每个文件“扔”到回收站。
不,(绝对)不。
如果你对 Subversion 说它应该恢复一个文件,那么所有的更改都会随风而逝。
只有你的记忆才能把它们找回来。
例外:您添加的新文件,只会丢失其“已添加”状态,但文件将保留在此目录中,只有状态未知(“?”)
平台/软件异常:在 Windows 上使用 TortoiseSVN,Revert 首先将文件扔到回收站,然后再恢复它们。您可以深入回收站以恢复文件。
不是 Subversion 特定的,但如果您正在使用 Eclipse,您可以在本地历史中试试运气。
现在,一些更具体的 Subversion 的东西:如果你不想为你所做的每一个更改创建一个分支,你可以在本地检查几个主干(trunk-modif-1,trunk-modif-2.. .)。每个“修改”都在单独的树上完成,您只需要保留一个列表,其中列出了哪些签出对应于哪些修改。
或者你可以在本地使用 Git,但我从未尝试过。
最近犯了这个错误,没有在 SVN 上提交新的文件更改(大约 10 个),但由于我的愚蠢错误,它们都消失了。但救了我的是上下文菜单中的 Windows“恢复以前的版本”选项。唷,这是一种解脱和教训。
如果您使用的是 svn 命令行客户端,则无法恢复文件。
但是如果你使用 TortoiseSVN 作为你的 svn 客户端,你可以恢复它们。 TortoiseSVN 会自动将它们移动到您的回收站。您可以在意外还原后从那里恢复它们。
这是 TortoiseSVN 中的一个可配置选项。它位于设置 -> 对话框 1 -> 还原时使用回收站。
默认情况下它被选中,这意味着文件被移动到回收站。如果你愿意(大多数情况下你不想禁用它。如果你有理由,也请告诉我)
如果您使用 InteliJ,那么您就是一个幸运的人。在顶部菜单上,您有一个版本控制选项,在它下面您将找到本地历史记录选项,您可以在其中找到所选文件的所有历史记录,包括您对该文件执行的所有操作(更新、提交、恢复)。
祝你好运,阿克德
此外,如果您已恢复您的 .NET 代码(.cs 文件等)并且您在恢复之前构建了应用程序,但在您进行了更改之后,您可以使用任何反射器工具从程序集文件中恢复更改以查看代码。
我非常幸运地在 Eclipse 的历史浏览器中找到了文件的本地更改日志(Local Revisions)。我一直在逐一检查差异,并在覆盖之前对文件进行了几次保存。
我恢复了解决方案(Visual Studio + AnkhSVN)并丢失了几个文件的更改。我在回收站中找不到文件。
但是:我使用 Handy Recovery 恢复了丢失的文件,即 SVN 只是在恢复时删除我的文件。
使用任何数据恢复软件来恢复已恢复的文件(如试用版 Handy Recovery)
不,SVN 不保留日志或备份(尽管其他答案中提到了 TortoiseSVN 的解决方案)。
但是,如果有人正在浏览答案并且没有注意到 OP 问题中的此评论:
“幸运的是,在这种情况下,我在周五下班前做了一个“svn diff > temp.txt”,而 temp.txt 文件仍在我的硬盘上,所以我能够将该文件输入“补丁”并恢复我丢失的变化。”
我想在你做一个'svn revert'之前做'svn diff'是一个常见的范例。如果您养成这样做的习惯,即使差异只是回显到终端,您至少有一种可能的途径来恢复丢失的更改。