【问题标题】:how to restore a locally deleted folder?如何恢复本地删除的文件夹?
【发布时间】:2025-12-05 19:45:02
【问题描述】:

本地删除一个文件,然后 svn update 恢复该文件的本地副本。但是,这似乎不适用于文件夹。有没有办法让它也适用于文件夹?

编辑: 这是控制台输出的样子:

C:\svn\Google Project Hosting\xulwin\xulrunnersamples>rmdir /S /Q treeview

C:\svn\Google Project Hosting\xulwin\xulrunnersamples>svn up
D    treeview
Updated to revision 50.

编辑2: 我已经使用 svn 两年多了,以前从来没有遇到过这个错误。但我没有更改任何设置。我唯一能想到的是,我今天在我的外部硬盘驱动器上使用 Tortoise SVN 创建了一个本地存储库,以备份一些不相关的旧东西。但这不应该是问题的原因,因为该行为同时发生在此本地存储库的本地副本和我来自 Google Project Hosting 的代码上。

编辑3: WTF 我突然不能再重现这个错误了。现在一切正常。但我没有改变任何东西。

编辑4: 在 EDIT1 中,该文件似乎被标记为已删除,但不是因为 svn commit 命令什么也没做。 Tortoise Check for modified 也没有列出任何内容。

注意:当问题仍然存在时,完全递归更新确实恢复了文件夹。

【问题讨论】:

  • 你试过用git吗?

标签: svn


【解决方案1】:

我今天用 svn 1.5.6 遇到了这个问题。 svn up --force the_dir_path 为我修好了。

重新创建:

$ svn up
Updated to revision X.
$ rm -rf the_dir_path
$ svn up
D the_dir_path
Updated to revision X.
$ svn up
Updated to revision X.
$ svn up --force the_dir_path
A ....
A ....
Updated to revision X.

【讨论】:

  • 对于每个试图按字面意思输入“dir”的人(比如我),应该将其替换为您想要返回的实际目录
  • 这是为我解决问题的唯一答案。还原、递归还原等不起作用。谢谢!
  • 使用 NetBeans 插件删除目录然后更新存储库对我不起作用,因为 NetBeans 并没有真正删除包括其“.svn”内容的目录。因此,通过终端执行此操作很重要。工作正常,谢谢。
  • 终于! “--force the_dir_path”是缺少的链接。非常感谢。我认为这也需要添加到堆栈上的其他几个问题。
  • 另一方面,唯一对我有用的是svn revert --depth infinity $missing_dir
【解决方案2】:

您可能想要使用 svn revert 命令,而不是通过删除项目然后更新以恢复它们的过程。使用 -R 开关递归还原文件/目录。

revert的svn帮助信息如下

revert: Restore pristine working copy file (undo most local edits).
usage: revert PATH...

  Note:  this subcommand does not require network access, and resolves
  any conflicted states.  However, it does not restore removed directories.

Valid options:
  --targets ARG            : pass contents of file ARG as additional args
  -R [--recursive]         : descend recursively, same as --depth=infinity
  --depth ARG              : limit operation by depth ARG ('empty', 'files',
                            'immediates', or 'infinity')
  -q [--quiet]             : print nothing, or only summary information
  --changelist ARG         : operate only on members of changelist ARG
                             [aliases: --cl]

Global options:
  --username ARG           : specify a username ARG
  --password ARG           : specify a password ARG
  --no-auth-cache          : do not cache authentication tokens
  --non-interactive        : do no interactive prompting
  --trust-server-cert      : accept unknown SSL server certificates without
                             prompting (but only with '--non-interactive')
  --config-dir ARG         : read user configuration files from directory ARG
  --config-option ARG      : set user configuration option in the format:
                                 FILE:SECTION:OPTION=[VALUE]
                             For example:
                                 servers:global:http-library=serf

【讨论】:

  • 删除一个文件夹,然后进行 svn 更新是清理该文件夹内的垃圾/临时文件的一种方便方法。
  • 如果文件夹被损坏,简单地删除和恢复它通常比尝试修复它更快。
  • Revert 不会重新创建已删除的文件夹
  • @PeterAjtai 是的,在答案中引用的手册中明确指出“但是,它不会恢复已删除的目录”!我认为这个答案没有帮助。
  • 这没有回答“如何恢复本地删除的文件夹?”的问题。并且不应被标记为正确答案。 @Bryan Drewery 在下面给出了正确答案。
【解决方案3】:

使用svn revert (-R) foldername 将其恢复。你已经使用svn rm 删除了它,svn up 不会为你重新创建它,因为它仍然被标记为已删除

【讨论】:

  • 他没有做svn rm,而只是rm。我也有这个问题,恢复并没有解决它。只有update --force 做到了。
  • @Laurent,谢谢(如果你还在这里),如果你有这个答案,我会投票的。
【解决方案4】:

我用于意外删除文件夹命令

SVN 更新

在父文件夹上

【讨论】:

    【解决方案5】:
    svn status|grep ^D|^Ct -c9-|xargs -n1 svn revert
    

    【讨论】: