在我的SVN文件夹中有人删除了我们的项目源代码。使用SVN历史记录,我们无法识别删除这些文件的人员。项目与历史记录中显示的活动无关。
由于
答案 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)
不,如果文件夹没有反映在SVN日志中,则无法删除该文件夹。有权访问SVN服务器的管理员可以执行SVNADMIN DUMP
/ SVNADMIN LOAD
并使用SVNDUMPFILTER
删除变更集,但我认为这不是您所要求的...或者可能是发生了什么?
SVN存储库可以回滚到任何以前的版本,因此没有任何无法撤消的更改。如果你确定文件夹被删除而没有反映在SVN日志中,那么也许有人有一个仍然包含该文件夹的工作副本 - 你可以从那里得到它。
答案 3 :(得分:1)
我的2美分:
/trunk/src/my/proj/client
:
svn copy
http://my.company.com/svn/repo/trunk/src/my/proj/client@4710
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)
答案 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
解决方案也是可行的