“svn delete”是否也永久删除了远程存储库中的文件?

时间:2013-07-17 02:53:18

标签: svn

我在http://foo.com/svn/myfoo有远程存储库 我有结帐myfoo repos并做svn delete directoryA/ directoryB/并提交它。

“svn delete”是否也在我的远程存储库中永久删除了这些东西?是否有可能在将来再次恢复directoryA / directoryB /?

谢谢。

2 个答案:

答案 0 :(得分:3)

所有文件都保存在SVN历史记录中,并且不会永久删除任何内容。 (事实上​​,如果你真的想在SVN上永久删除某些内容,那就太麻烦了。)

恢复的方法很简单,只需进行反向合并,或从旧版本中复制已删除的文件。

SVN's book

中有详细描述

答案 1 :(得分:1)

Subversion永远不会永久删除任何内容。这是它最大的力量和最大的弱点。不,对不起,我在想一些漫威漫画角色。

svn delete仅从树头的最新版本中删除信息。如果您在删除之前从修订版本中复制了该信息,则可以获取该信息。

首先,搜索通过svn log

删除的信息
$ svn log -v 
------------------------------------------------------------------------
r2 | david | 2013-07-16 23:14:23 -0400 (Tue, 16 Jul 2013) | 1 line
Changed paths:
   D /trunk/foo

我在修订版#2中删除了foo。我要做的是从修订版#1复制它:

$ svn cp -r1 svn://localhost/trunk/foo@1 .
A         foo
david@DaveBook.local:~/temp/work/trunk

现在,foo回来了。我会做一个提交:

$ svn commit -m"Undeleted 'foo'"

现在我的结果是:

$ svn log -v
------------------------------------------------------------------------
r3 | david | 2013-07-16 23:17:19 -0400 (Tue, 16 Jul 2013) | 1 line
Changed paths:
   A /trunk/foo (from /trunk/foo:1)

Undeleted 'foo'

因此,没有任何内容被永久删除。顺便说一下,反向合并会给我一个类似的结果:

$ svn merge -c -2 svn://localhost/trunk/foo

这反转了改变#2,它将取消删除foo并撤消我做的其他任何事情。