2012-04-03 148 views
0

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

  1. 是否有任何选项可以从SVN中删除文件夹而无需登录历史记录?
  2. 有没有SVN服务器下的任何选项来恢复这些文件?

感谢

回答

4

除非回购商严重损坏,否则所有删除都将显示在日志中。我的猜测是,您正在查询错误路径,可能是通过从工作副本发出svn log。该命令接受网址,以便您可以简单:的

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/[email protected] --revision 314:HEAD 

更新:尽管懒惰獾的奇怪索赔,修订历史是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命令读取。

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

+0

“所有删除将显示在日志中,除非回购严重损坏” - 只是错误... http:// **不是用于访问回购协议的单一协议 – 2012-04-03 14:01:37

+0

是的,有几个访问协议,这与你的“错误”断言有什么关系? – 2012-04-03 14:06:31

+1

@LazyBadger - Stack Overflow中的大多数答案都是关于版本控制相关的工具,所以你必须严肃地讲话......但我不明白。它是一个愚人节的笑话或什么东西? – 2012-04-03 14:53:30

1

我觉得从SVN删除没有它显示了在日志中如果删除发生SVN服务的背后(的唯一途径例如有人登录到服务器并删除了文件/目录从命令外壳)。

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

当然,如上所述,若删除happend,它mostr可能搞砸SVN记账,所以你可能有麻烦犯...

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

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

1

我的2美分:

  1. 状态只需复制回删除之前的存储库。所以看下面的例子。如果你这样做了下面的命令,被删除的文件夹/trunk/src/my/proj/client应恢复: svn copy http://my.company.com/svn/repo/trunk/src/my/proj/[email protected] http://my.company.com/svn/repo/trunk/src/my/proj/

实例库与文件结构:

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

有任何选项从SVN删除文件夹没有日志在 的历史?

可悲的是,是的 - 通过file:///协议访问回购无需任何身份验证

有下SVN服务器的任何选项来恢复这些文件?

是。你可以使用任何访问 SVN工具,找到最新版本,有这个文件夹仍然存在,并更新仅此文件夹中,问题在本地工作拷贝到此版本(你会得到“疏工作复制“作为结果)。提交WC的这种状态,新的修订和所有必须固定后(而下一事件将不会再次发生)

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

0

你可以使用svn日志检查,看看其他的活动在svn回购。

如果有人已经从服务器本身中删除了,那么你就搞砸了,你应该在某个时间段备份该存储库。以及没有问题,在你的团队中,有些人不会从服务器更新,因此他/她可能会删除这些文件。

可以恢复与

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

个人而言,我恨CVCS系统,我宁愿使用DVCS。

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