从SVN恢复已删除的文件夹

时间:2012-04-03 12:15:50

标签: svn tortoisesvn

在我的SVN文件夹中有人删除了我们的项目源代码。使用SVN历史记录,我们无法识别删除这些文件的人员。项目与历史记录中显示的活动无关。

  1. 有没有选项可以在没有登录历史记录的情况下从SVN删除文件夹?
  2. SVN服务器下是否有任何选项可以恢复这些文件?
  3. 由于

6 个答案:

答案 0 :(得分:4)

除非回购邮件被严重损坏,否则所有删除都将显示在日志中。我的猜测是你正在查询错误的路径,可能是通过从工作副本发出svn log。子命令接受一个URL,因此您可以简单地:

svn log https://example.com/svn/project/

而不是

svn log 

......或:

svn log https://example.com/svn/project/trunk/

当然,如果你知道目录路径并知道它仍然存在的修订号,你可以简单地说:

svn log https://example.com/svn/project/trunk/foo/bar@314 --revision 314:HEAD

更新:尽管Lazy Badger提出了令人惊讶的说法,但修订历史记录是Subversion的核心功能,并不依赖于存储库访问方法:

E:\test>svnadmin create myrepo

E:\test>svn checkout file:///E:/test/myrepo mywc
Checked out revision 0.

E:\test>svn mkdir mywc\mydirectory
A         mywc\mydirectory

E:\test>svn commit -m "Add a directory" mywc
Adding         mywc\mydirectory

Committed revision 1.

E:\test>svn delete mywc\mydirectory
D         mywc\mydirectory

E:\test>svn commit -m "Remove the directory" mywc
Deleting       mywc\mydirectory

Committed revision 2.

E:\test>svn log -r2 -v file:///E:/test/myrepo/
------------------------------------------------------------------------
r2 | ALVARO.GONZALEZ | 2012-04-03 17:00:34 +0200 (mar, 03 abr 2012) | 1 line
Changed paths:
   D /mydirectory

Remove the directory
------------------------------------------------------------------------

E:\test>

这是有道理的:无法跟踪更改会使Subversion完全无法用作版本控制工具。该评论者可能会将svn log中的日志与Apache维护的访问日志混淆,这是完全不同的事情,甚至无法通过Subversion命令读取。

提交到存储库的任何删除都将显示在修订日志中,无论它是如何提交的,除非(我已经指出)存储库本身已经损坏。

答案 1 :(得分:1)

如果删除发生在SVN服务的后面(例如,某人登录到服务器并从命令shell中删除了files /目录),我可以考虑从SVN中删除而不显示在日志中的唯一方法

如果是这种情况,您可以从服务器上的备份恢复文件/目录 - 假设服务器已备份。请注意,在这种情况下,您很可能可以访问早期版本的源(进行备份时),具体取决于人们最近提交到该目录的时间。

当然,如果删除发生如上所述,它可能会搞乱SVN簿记,所以你可能无法提交......

答案 2 :(得分:1)

  1. 不,如果文件夹没有反映在SVN日志中,则无法删除该文件夹。有权访问SVN服务器的管理员可以执行SVNADMIN DUMP / SVNADMIN LOAD并使用SVNDUMPFILTER删除变更集,但我认为这不是您所要求的...或者可能是发生了什么?

  2. SVN存储库可以回滚到任何以前的版本,因此没有任何无法撤消的更改。如果你确定文件夹被删除而没有反映在SVN日志中,那么也许有人有一个仍然包含该文件夹的工作副本 - 你可以从那里得到它。

答案 3 :(得分:1)

我的2美分:

  1. 没有
  2. 只需在删除之前复制存储库中的状态。请看下面的例子。如果执行以下命令,则应还原已删除的文件夹/trunk/src/my/proj/clientsvn copy http://my.company.com/svn/repo/trunk/src/my/proj/client@4710 http://my.company.com/svn/repo/trunk/src/my/proj/
  3. 包含文件结构的示例存储库:

        Repo: http://my.company.com/svn/repo/
        /trunk
          /src
             /my
               /proj
                   /server
                   /client (is deleted on revision 4711)
    

答案 4 :(得分:0)

您可以查看svn日志,查看svn repo上的其他活动。

如果有人从服务器本身删除然后你被搞砸了,你应该在某些事务上备份该存储库。没问题,在你的团队中,有些人不会从服务器进行更新,因此他/她可能会删除已删除的文件。

你可以用

恢复
svn up -r <with-older-version>.

我个人讨厌CVCS系统,我更喜欢使用DVCS。

但在我的组织中,我被迫使用CVCS。 :(

答案 5 :(得分:-2)

  

有没有选项可以在没有登录的情况下从SVN中删除文件夹   历史?

可悲的是,是的 - 使用file:///协议来访问没有任何身份验证的repo

  

SVN服务器下是否有任何选项可以恢复这些文件?

是。您可以使用任何可访问的svn-tools查找最新版本,此文件夹仍然存在仅在本地工作副本中更新此文件夹到这个版本(你将获得“稀疏工作副本”)。将此状态的WC作为新版本提交,并且必须在其之后修复(下一个事件不会再次发生)

注意:svn copy解决方案也是可行的