SVN撤消提交前删除


135

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

编辑:我想要一个解决方案,可以在Subversion 1.4.4中工作


您有待更改的目录删除了吗?如果是这样,请从较高级别还原时要小心,您可能会丢失更改。
罗素

Answers:


145

svn revert deletedDirectory

这是svn revert命令的文档


编辑

如果deletedDirectory是使用rmdir和不是删除的svn rm,则需要

svn update deletedDirectory

代替。


3
那必须是新的,在SVN 1.4.4中不起作用。(这是我尝试的第一件事。)
LaC

4
这就是1.4.4所说的,顺便说一句:$ svn help revert恢复:恢复原始的工作副本文件(撤消大多数本地编辑)。用法:还原PATH ...注意:此子命令不需要网络访问,并且可以解决所有冲突的状态。但是,它不会还原已删除的目录。
LaC

1
1.6.6在帮助中具有相同的文本,但是当我对其进行测试时,它对我有用。请注意,如果您不是svn delete用来删除目录,而是使用来删除它rmdir,则需要使用来删除svn update deletedDirectory
Michael Hackner 09年

我已经从本地svn-ed目录中删除了一个文件(svn del)。svn更新不起作用,但svn revert起作用。我在Mac上使用SynchroSVN。但是,感谢您的提示。
karim

5
按照链接,使用svn -R revert取消删除包含所有内容的整个目录,这可能就是您想要的。不带-R的svn revert仅还原目录,而不还原目录。
n13

156

1)做

svn revert . --recursive

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

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

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

svn up dir1/dir2

12
这是最准确的答案,非常感谢,您对我有很大帮助。
greenoldman 2011年

1
除了还原所有内容?您可能不想这样做。
2013年

1
如果您拥有SVN认为已删除的整个文件夹,则这才最有意义。我在检查工作副本时遇到了这个问题。一个文件夹已经存在,因此它被置于冲突中并且未被检出。它是到另一个文件夹的链接。我重命名了它,并试图svn up让它签出,意识到了冲突,svn resolved foo然后svn status告诉我我有大约1万个文件标记为Dsvn upsvn revert没有让他们回来,但这解决了问题。
simbabque 2014年

6
+1 --recursive,有助于恢复已删除目录的内容。
Melebius 2014年

1
哦,天哪,你救了我的夜晚!
ArturOlszak

32

对我有用的是

svn revert --depth infinity deletedDir

这对我非常有用(svn 1.7.10),其中svn revert deleteDir无法完成这项工作。极好的答案。
rtome 2015年

4

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


1
这将消除WAY多余的更改。
Michael Hackner 09年

这不适用于Subversion 1.4.4(我已经尝试过了)。svn help revert甚至说:“此子命令不需要网络访问,并且可以解决所有冲突的状态。但是,它不还原已删除的目录。” 抱歉,我应该指定版本。Mac OS X 10.5随附1.4.4。
LaC

4

要使其成为一个衬板,您可以尝试如下操作:

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

我可以在名称中创建带有空格的目录。可能会破坏“剪切”的AFAIK。
丹尼斯·巴门科夫

1

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

希望下次我在Google上搜索此问题时,此页面将位于结果的顶部。当然,如果有人建议使用更清洁的方法会更好。


假设父级中没有子目录具有未决的更改。
罗素

0

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

rm -r some_dir

svn update some_dir_parent

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.