我最近向一个文件提交了信息。只有几行高度机密的代码。我需要完全从subversion存储库中删除此信息。如何在不恢复和丢失更改的情况下做到这一点?只在一个档案里?那么,是否有可能删除对该文件的所有引用,然后重新提交正确的文件?
我想你不得不
- 记录错误提交和每个后续提交作为一个或多个补丁
- 转储存储库
- 创建新的存储库
- 将错误提交之前的所有修订从转储导入到存储库
- 按顺序重新应用每个补丁,(并在提交前删除几行机密信息)
SVN提供了一个名为svndumpfilter
的命令,它允许您转储存储库并从中排除路径。然后,将该转储文件加载到新的存储库中,该文件将消失。
svnadmin dump /path/to/repos > dump.file
svndumpfilter exclude path/to/remove < dump.file > newdump.file
svnadmin load /path/to/newrepos < newdump.file
唯一的解决方案是在服务器端过滤存储库。你应该使用这样的命令:
svnadmin create /path/to/newrepos
svnadmin dump /path/to/repos --incremental | svndumpfilter excdlude path/to/remove | svnadmin load /path/to/newrepos
你能等到Subversion 1.8出来吗?这就是实现高要求的obliterate命令的时候(当然,除非他们决定将其移动到Subversion 1.9或2.0)。
。对吧?
您唯一可以做的就是关闭存储库,执行svnadmin dump
,使用svndumpfilter
过滤它以删除更改,并使用svnadmin load
重新加载存储库。这可以在单个管道中完成,但根据您的存储库大小,这可能意味着关闭几个小时。
我已经做过好几次了。这一点也不好玩,尤其是当你不得不在凌晨2点做这件事的时候,因为当你的开发人员忙于使用它的时候,你不能关闭你的存储库。