如何从Subversion中删除敏感信息?

Jad*_*ias 8 svn

我的代码的先前版本之一,存储在Subversion存储库中,有敏感信息.如何在保留所有其他版本的同时擦除它?

编辑:存储库是谷歌代码项目托管,所以我无法转储和恢复存储库=(

sle*_*ske 7

想要的是一个通常称为"删除"的SVN功能,遗憾的是仍未实现.

作为解决方法,您必须转储,过滤和重新导入存储库.请参阅SVN常见问题解答中的条目如何从存储库的历史记录中完全删除文件?.

顺便说一句:这是一个骗局:-). /sf/ask/46450911/

编辑:

存储库是Google Code Project Hosting,因此我无法转储和恢复存储库=(

据我所知,在这种情况下,唯一的解决方案是(要求Google)重置您的存储库(请参阅此常见问题解答和此博客文章).这将完全删除存储库中的所有数据(包括当前数据和历史记录),就像您刚刚使用了存储库一样svnadmin create.

显然,您首先需要备份存储库.

最好的解决方案可能是:

  • 使用创建repo的备份snvsync(这也将备份历史记录)
  • 在你的repo备份上做转储/过滤/恢复舞(见上文),以删除有问题的提交
  • 重置Google存储库
  • 将您的过滤回购再次使用snvsync(请参阅常见问题解答如何导入现有的源代码?)


nos*_*nos 7

除了完全转储之外,您无法删除提交给subversion的内容,擦除原始内容,并从转储中重新创建存储库.

如果要完全删除文件/路径,可以使用svndumpfilter执行此操作:

svnadmin dump /path/to/repository > svndump
svndumpfilter exclude path/to/sensitivefile > svndump-excluded
svnadmin create /tmp/newrepository
svnadmin load /tmp/newrepository < svndump-excluded
Run Code Online (Sandbox Code Playgroud)

然后备份你的/ path /到/ repository,并在验证一切正常后用/ tmp/newrepository替换它.

如果您只想排除单个修订版,则必须执行类似操作

svnadmin dump  -r 0:1000 /path/to/repository > svndump1
svnadmin dump  -r 1002:HEAD --incremental /path/to/repository > svndump2
svnadmin create /tmp/newrepository
svnadmin load /tmp/newrepository <svndump1
svnadmin load /tmp/newrepository <svndump2
Run Code Online (Sandbox Code Playgroud)

也就是说,排除了修订版1001.你不能做更精细的btw,必须排除整个修订.同样在这里,备份您的原始存储库,验证新存储库中所需的所有内容是否存在.