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

我今天早上通过做了以下事情,

  1. 开始改变我的项目
  2. 对一堆文件做了一堆编辑
  3. 意识到我的做法是错的,我需要重新开始
  4. cd'd到我的项目的顶层,并做了“svn – recursion还原”。 将我的本地沙箱还原到其预先更改的状态。
  5. 当我意识到我当地的沙箱里还有其他一些突出的变化时,我惊恐万分,我刚刚抹去了所有这些变化。 (上个星期五svn服务器已经closures了,所以我没能检查他们,周末我忘记了他们)

幸运的是,在这种情况下,我在星期五离开工作之前完成了一个“svn diff> temp.txt”,而temp.txt文件仍然在我的硬盘上,所以我能够将该文件提供给“补丁”并恢复失去了变化。

但对于我未来的参考(即下一次我犯同样的愚蠢错误)…有什么办法告诉svn撤销“svn恢复”? svn是否保留了本地/未签到的差异备份?

不,(绝对)

如果你说Subversion它应该恢复一个文件,所有的变化都消失了。

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

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

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

有一个解决scheme…去你的回收站,你会发现有最新版本的删除文件。 乌龟“投掷”到回收站的每一个文件,它恢复。

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

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

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

最近做了这个错误,没有提交新的文件更改(大约10)到SVN,他们都因为我的愚蠢的错误而消失。 但是救了我的是上下文菜单中的“恢复以前的版本”选项。 唉,这是一个救济和经验教训。

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

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

这是TortoiseSVN中的一个可configuration选项。 它在设置 – >对话1 – >恢复时使用回收站。

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

如果你使用InteliJ,那么你是一个幸运的人。 在顶部的菜单上,你有一个版本控制选项,在它下面你会发现本地历史logging选项,你可以在其中find选定文件的所有历史logging,包括你对该文件所做的所有操作(更新,提交,还原)。

祝你好运,Arkde

另外,如果您还原了.NET代码(.cs文件等),并且在还原之前构build了应用程序,但是在做出更改之后,可以使用任何reflection工具从assembly文件中恢复更改以查看代码。

我恢复了解决scheme(Visual Studio + AnkhSVN),并丢失less数文件的变化。 我无法在回收站中find该文件。

但是:我恢复丢失的文件与方便恢复,即SVN只是删除我的文件恢复。

使用任何数据恢复软件恢复恢复的文件(如试用手持恢复 )

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

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

“幸运的是,在这种情况下,我在星期五离开工作之前完成了一个”svn diff> temp.txt“,而temp.txt文件仍在我的硬盘上,所以我能够将该文件送入”补丁“并恢复我失去了改变。“

我认为这是一个常见的范例,在您执行“svn还原”之前执行“svn diff”。 如果你养成这样做的习惯,即使差异只是回应到terminal,你至less有一个可能的途径来恢复你丢失的变化。