ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

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

IIRC TortoiseSVN 将恢复的文件移动到回收站,但原始的 SVN 命令行客户端没有这样的细微差别。
我在回收站中找不到文件。我运气不好?
关于回收站的热门评论。那只是挽救了我的一天!
我也是!太感谢了。恢复的文件刚刚出现在我的回收站中,并且可以恢复。
你刚刚用这个回收站的东西救了我的屁股!!!

s
shto

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


顺便说一句,这也是 TortoiseSVN 在还原时看起来如此缓慢的原因。当回收站已满时,将文件移动到回收站是一项非常缓慢的操作。您可以在“常规 - 对话框 1”TortoiseSVN 设置中禁用此功能。
谢谢大佬,你救了我!我不小心做了 Revert 并且几乎失去了 2 周的工作。幸运的是,我在回收站中找到了它。
@ArieLivshin,你为什么要工作 2 周而不承诺?看来您需要了解更多有关分支的信息。
恼人的 ankhsvn 不这样做
谢谢..很有帮助。
P
Peter Parker

不,(绝对)不。

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

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

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

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


上述附录:版本控制仅在您实际提交文件时才对您有所帮助。如果你处于一个杀死你的工作副本会杀死几个小时的工作的位置,那么你的提交频率就不够高。
同意...在这种情况下,svn 服务器已关闭,这就是为什么我仍有未提交的更改未决。 :^(
是的!!!有一种方法可以根据您的操作系统和/或 IDE 进行恢复——在心脏病发作之前阅读下面的其他答案!
这不是真的,它比简单的NO要复杂一些。使用恢复工具,或者如果幸运的话,文件在回收站中。
@RalphMclee:这取决于平台和 svn 客户端。 TortoiseSVN 会将恢复的新文件保存在回收站中。这只是一个例外。而且我怀疑恢复工具可能会以一致的方式重建文件的更改。记住起来更容易也更清楚:revert 会破坏你的工作,小心使用它!
V
Vladimir

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

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

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


仅供参考 - 通过右键单击上下文菜单“从本地历史恢复”访问本地历史。
对于 Eclipse 部分,这里有一个更具体的答案:stackoverflow.com/a/18220708/517705
J
JProgrammer

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


谢谢!这使我免于重复数小时的工作!我以前从未见过 Windows 的这个功能,但它救了我的培根!
我可以把欠你的 6000 美元寄到哪里,这样节省了几天的工作时间?学过的知识...
我一直关闭支持这种恢复的检查点,因为它会破坏性能。最近,由于其 Undo 功能的问题,Eclipse 删除了我的项目文件夹,包括它的 git 存档,我宁愿打开它。但是,一个名为 Recuva 的 Windows 程序通过搜索已删除的文件空间拯救了我。在我恢复所有文件之前,我非常小心不要将其他内容添加到受影响的驱动器中,并且它给了我自一周前最近一次备份以来更改的每个源文件。二进制文件大多不可恢复。
M
Manohar

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

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

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

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


太棒了!...救了我
可悲的是,到 2021 年,情况似乎不再如此。 (虽然有设置选项,但之前更改的本地文件没有进入回收站)如果菜单选项有一个简单的“您确定要丢弃所有本地更改”提示,那就太好了就在提交选项的正上方,而且很容易搞砸……
A
Aurelian Cotuna

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

祝你好运,阿克德


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

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


f
fyts

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


P
Peter Barbanyaga

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

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

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


s
shaneb

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

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

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

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅