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


95

今天上午,我通过以下操作设法使自己开枪射击:

  1. 开始对我的项目进行更改
  2. 对一堆文件进行了一堆编辑
  3. 意识到我的方法是完全错误的,并且我需要重新开始
  4. cd到我项目的顶层,并执行了“ svn --recursive revert”。将我的本地沙箱恢复到更改前的状态。
  5. 当我意识到本地沙箱中还有许多其他突出的变化使我惊恐万分时,我刚刚抹去了所有这些变化。(svn服务器上周五已关闭,因此我无法检入它们,并且在周末我忘记了它们)

幸运的是,在这种情况下,我在星期五下班前做了一个“ svn diff> temp.txt”,并且temp.txt文件仍然在我的硬盘上,因此我能够将该文件输入“ patch”并恢复我的文件。丢失的更改。

但是,作为我以后的参考(例如,下次我犯同样的愚蠢错误)...有什么办法告诉svn撤消“ svn还原”?svn可以在任何地方保留本地/未检入差异的备份吗?


34
IIRC TortoiseSVN将还原的文件移到回收站,但是原始SVN命令行客户端没有这种细微差别。
达里奥·索雷拉

1
我在回收站中找不到该文件。我不走运吗?
dalcantara 2012年

5
有关回收站的最高评论。那就救了我的一天!
OrganicPanda 2012年

2
我也是!非常感谢。还原的文件仅出现在我的回收站中,可以还原。
斯拉达达

1
您刚刚用这个回收站东西保存了我的背面!!!
Epirocks

Answers:


79

不,(绝对)

如果您对Subversion说应该还原文件,则所有更改都会随心所欲。

只有您的记忆才能使它们恢复原状。

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

平台/软件例外:在Windows上使用TortoiseSVN,“还原”首先将文件扔到回收站中,然后还原它们。您可以深入回收站以恢复文件。


10
上面的附录:版本控制仅在您实际提交文件时才对您有所帮助。如果您认为杀死您的工作副本会浪费数小时的工作,那么您的承诺就不够频繁了。
myron-semack 09年

1
同意...在这种情况下,svn服务器已关闭,这就是为什么我尚未提交未提交的更改的原因。:^(
Jeremy Friesner,2009年

13
是!!!根据您的操作系统和/或IDE,有一种恢复方法-在心脏病发作之前,请阅读以下其他答案!
HDave

2
事实并非如此,它比简单的“否”要复杂得多。使用恢复工具,或者如果幸运的话,文件位于回收站中。
RaphMclee 2014年

1
@RalphMclee:它取决于平台和svn客户端。TortoiseSVN会将还原的新文件保存在回收站中。这仅仅是一个例外。而且我怀疑恢复工具是否可以一致地重建文件的更改。记住起来更加容易和清楚:还原将破坏您的工作,请谨慎使用!
彼得·帕克

104

有一个解决方案...转到您的回收站,您将在此处找到已删除文件的最新版本。乌龟将其还原的每个文件“扔”到回收站。


2
顺便说一句,这也是为什么TortoiseSVN还原时显得如此缓慢的原因。当回收站已满时,将文件移动到回收站是非常缓慢的操作。您可以在“常规-对话框1” TortoiseSVN设置中禁用此功能。
Wim Coenen

8
谢谢男人,你救了我!我不小心进行了还原,几乎失去了2个星期的工作。幸运的是,我在回收站中找到了它。
2010年

2
@ArieLivshin,为什么您要工作两个星期而不作承诺?看来您需要了解有关分支的更多信息。
JoelFan

令人讨厌的ankhsvn并没有这么做
菲尔·黑尔

谢谢..非常有帮助。
Prem Singh Bist 2015年

32

并不是完全特定于Subversion,但是如果您使用的是Eclipse,则可以在本地历史记录中尝试运气。

现在,还有一些特定于Subversion的东西:如果您不想为所做的每个更改创建分支,则可以保留几个本地检出的主干(trunk-modif-1,trunk-modif-2。)。 )。每个“修改”都是在单独的树上完成的,您只需要保留一份清单,列出哪些签出对应于哪个修改。

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


3
仅供参考-通过右键单击上下文菜单“从本地历史记录还原”进入本地历史记录。
HDave

对于Eclipse部分,这是一个更具体的答案:stackoverflow.com/a/18220708/517705
Sk8erPeter '16

14

最近犯了这样的错误:没有将新文件更改(约10个)提交到SVN上,并且由于我的愚蠢错误而全部消失了。但是让我省钱的是上下文菜单中的Windows“还原以前的版本”选项。ew,这是一种解脱和汲取的教训。


谢谢!这使我免于重做工作!我以前从未见过Windows的此功能,但是它节省了我的培根!
NibblyPig 2012年

这样节省了几天的工作,我应该把欠我的6000美元寄给哪里?得到的教训……
HDave 2013年

谢谢你救了我。
Opax Web

我保留支持这种还原的检查点,因为它会破坏性能。最近,由于撤消功能存在问题,Eclipse删除了我的项目的一个文件夹,包括git存档,我希望我能打开它。但是,一个名为Recuva的Windows程序通过搜索已删除的文件空间来救了我。在恢复所有文件之前,我非常小心,不要向受影响的驱动器中添加其他内容,这使自从一周前进行最新备份以来,每个源文件都发生了更改。二进制文件大多无法恢复。
2014年

8

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

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

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

默认情况下,它被选中,这意味着文件被移动到回收站。如果您愿意(大多数情况下您不希望禁用此功能。如果有原因,请告诉我)


1
太棒了!...救了我
Janani Kumar

6

如果您使用的是InteliJ,那么您很幸运。在顶部菜单上,有一个“版本控制”选项,在该菜单下,您会找到“本地历史记录”选项,在这里您将找到所选文件的所有历史记录,包括对该文件执行的所有操作(update,commit,revert)。

祝你好运,阿克德


1
如果是新文件,则文件本身将被删除。在这种情况下,请从“项目”视图中选择文件所在的文件夹,然后选择“本地历史记录”。IntelliJ再次挽救了这一天。
Nufail 2013年

4

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


3

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


2

我还原了解决方案(Visual Studio + AnkhSVN),丢失了一些文件的更改。我在回收站中找不到文件。

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

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


1

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

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

“幸运的是,在这种情况下,我在星期五下班前做了一个“ svn diff> temp.txt”,并且temp.txt文件仍然在我的硬盘上,因此我能够将该文件输入“ patch”并恢复我丢失的零钱。”

我想这是在执行“ svn还原”之前执行“ svn差异”的常见范例。如果您习惯于这样做,即使差异只是回显到终端,您至少也有一种可能的方式来恢复丢失的更改。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.