【问题标题】:SVN undo delete before commitSVN在提交前撤消删除
【发布时间】:2010-12-19 16:35:12
【问题描述】:

如果您从 SVN 工作副本中删除了一个目录,但尚未提交,那么如何取回它并不明显。当您键入“svn undo d”时,Google 甚至建议将“svn undo delete before commit”作为常见查询,但搜索结果无济于事。

编辑:我想要一个适用于 subversion 1.4.4 的解决方案

【问题讨论】:

  • 是否有任何兄弟目录与您删除的未决更改的目录?如果是这样,从更高级别恢复时要小心,您可能会丢失更改。

标签: svn directory undo delete-directory


【解决方案1】:

您可以在提交之前删除文件夹并更新父目录:

rm -r some_dir

svn update some_dir_parent

【讨论】:

    【解决方案2】:

    对我有用的是

    svn revert --depth infinity deletedDir
    

    【讨论】:

    • 这对我来说非常有用(svn 1.7.10),其中 svn revert deletedDir 未能完成这项工作。很好的答案。
    【解决方案3】:

    要使其成为一个衬里,您可以尝试以下方法:

    svn status | cut -d ' ' -f 8 | xargs svn revert
    

    【讨论】:

    • 我可以创建名称中带有空格的目录。它可能会破坏 'cut' AFAIK。
    【解决方案4】:

    1) 做

    svn revert . --recursive
    

    2) 解析输出中的错误,例如

    "Failed to revert 'dir1/dir2' -- try updating instead."
    

    3) 为每个错误目录调用 svn:

    svn up dir1/dir2
    

    【讨论】:

    • 这是最准确的答案,非常感谢,对我帮助很大。
    • 除了恢复一切?你可能不想这样做。
    • 如果您有一个 SVN 认为已删除的整个文件夹,这将是最有意义的。我在检查工作副本时遇到了这个问题。一个文件夹已经存在,所以它被放置在冲突中并且没有被检出。这是另一个文件夹的链接。我重命名它并尝试svn up 来检查它,意识到冲突,svn resolved foosvn status 告诉我我有大约 10k 个文件标记为Dsvn upsvn revert 没有让他们回来,但这解决了问题。
    • +1 for --recursive 这有助于恢复已删除目录的内容。
    • 天哪,你拯救了我的夜晚!
    【解决方案5】:

    svn revert deletedDirectory

    Here's the documentation 用于svn revert 命令。


    编辑

    如果deletedDirectory 是使用rmdir 而不是svn rm 删除的,您需要这样做

    svn update deletedDirectory

    改为。

    【讨论】:

    • 那一定是新的,它在 SVN 1.4.4 中不起作用。 (这是我尝试的第一件事。)
    • 这是 1.4.4 所说的,顺便说一句: $ svn help revert revert:恢复原始工作副本文件(撤消大多数本地编辑)。用法:revert PATH... 注意:此子命令不需要网络访问,并解决任何冲突状态。但是,它不会恢复已删除的目录。
    • 1.6.6 在帮助中有相同的文本,但是当我测试它时它对我有用。请注意,如果您没有使用svn delete 删除目录,而是使用rmdir 将其删除,则需要改为svn update deletedDirectory
    • 我从本地 svn-ed 目录中删除了一个文件 (svn del)。 svn update 不起作用,但 svn revert 起作用了。我在 Mac 上使用 SynchroSVN。不过,感谢您的提示。
    • 根据链接,使用 svn -R revert 取消删除包含所有内容的整个目录,这可能是您想要的。没有 -R 的 svn revert 只是恢复目录,而不是内容。
    【解决方案6】:

    从您删除的目录的上一级执行(递归)还原操作。

    【讨论】:

    • 这将消除不必要的更改。
    • 这不适用于 Subversion 1.4.4(我刚刚尝试过)。 svn help revert 甚至说“这个子命令不需要网络访问,并解决任何冲突的状态。但是,它不会恢复删除的目录。”对不起,我应该指定版本。 1.4.4 是 Mac OS X 10.5 附带的。
    【解决方案7】:

    我能找到的最简单的解决方案是从工作副本中删除父目录(使用 rm -rf,而不是 svn delete),然后在祖父母中运行 svn update。例如,如果你删除了 a/b/c, rm -rf a/b, cd a, svn up。这让一切都回来了。当然,如果您要保留的父目录中没有其他未提交的更改,这只是一个很好的解决方案。

    希望下次我在谷歌上搜索这个问题时,这个页面会出现在结果的顶部。当然,如果有人建议一种更清洁的方法,那就更好了。

    【讨论】:

    • 假设父目录中没有子目录有待更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2012-01-07
    • 2016-01-11
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多