假设存在以下情况:
- 一份被病毒感染的文件已提交到 Subversion 存储库中。
- 服务器上运行了一个反病毒扫描程序,并且还会扫描 Subversion 存储库。
反病毒扫描程序将删除受影响的版本或将其移至隔离区。其结果是存储库损坏了。
如果版本文件可以恢复(从隔离区)该如何解决这个问题?
我有一些要实现的目标:
- 不允许禁用或从目录中排除反病毒软件。
- 病毒感染的文件不得存储在存储库中。
- 存储库必须保持一致和可用。
对于这个小问题,最好的解决方案是什么?
假设存在以下情况:
反病毒扫描程序将删除受影响的版本或将其移至隔离区。其结果是存储库损坏了。
如果版本文件可以恢复(从隔离区)该如何解决这个问题?
我有一些要实现的目标:
对于这个小问题,最好的解决方案是什么?
来自FAQ:
有些特殊情况下,您可能想要销毁某个文件或提交的所有痕迹(例如某人意外提交了一份机密文件)。但这并不容易,因为Subversion被设计成永远不会丢失信息。修订版本是不可变的树形结构,它们相互依赖。从历史记录中删除一个修订版本将引起连锁反应,在所有后续的修订版本中造成混乱,并可能使所有工作副本无效。
然而,该项目计划在未来实现一个svnadmin obliterate命令,以永久删除信息(请参见问题516)。
与此同时,您唯一的选择是使用svnadmin dump命令导出您的存储库,然后通过svndumpfilter命令(排除错误路径)将转储文件传输到svnadmin load命令中。有关详细信息,请参见Subversion书籍的第5章。
如果您是以文件模式(每个源文件一个单独的仓库文件)创建存储库,则可以修复/编辑/替换受感染的文件。
如果您是以数据库模式创建的,则较为困难 - 您可以进行 svndump 然后 svncreate 一个新的存储库,但最好的方法可能是将 SVN 存储库从病毒扫描中排除。
“AV不允许被禁用或从目录中排除。”
与您的IT部门协商,将您的存储库添加到排除列表中。如果AV支持“仅限信息模式”,最好将其配置为在信息模式下与您的存储库一起使用。大多数情况下,这些旧病毒只是误报。添加预提交挂钩以对任何文件进行病毒扫描,并在被病毒标记时拒绝提交。
如果AV报告旧文件感染,请检查是否为误报。如果不是,则删除该文件并完全忽略其存在于您的历史记录中。