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

时间:2009-08-18 15:17:52

标签: svn

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

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

3 个答案:

答案 0 :(得分:7)

想要你想要的是一种通常被称为“删除”的SVN功能,遗憾的是它仍未实现。

作为解决方法,您必须转储,过滤和放弃重新导入您的存储库。参见例如SVN常见问题How do I completely remove a file from the repository's history?中的条目。

顺便说一句:这是一个骗局:-)。 https://stackoverflow.com/questions/663584/subversion-permanently-remove-incorrectly-checked-in-directory-project

修改

  

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

据我所知,此案例中唯一的解决方案是(要求Google)重置您的资源库(请参阅this FAQ和此blog post)。这将完全删除存储库中的所有数据(包括当前数据和历史记录),就像您刚刚使用svnadmin create启动存储库一样。

显然,您首先需要备份资源库。

最好的解决方案可能是:

  • 使用snvsync创建您的仓库备份(这也将备份历史记录)
  • 在您的回购备份上进行转储/过滤/恢复舞蹈(见上文),以删除有问题的提交
  • 重置Google存储库
  • 再次使用snvsync(请参阅常见问题解答How do I import my existing source code?
  • 将您的已过滤回购广告恢复

答案 1 :(得分: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

然后备份你的/ 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

即,排除修订版1001。你不能做更精细的btw,必须排除整个修订。同样处理,备份原始存储库,验证新存储库中所需的所有内容都在那里。

答案 2 :(得分:2)

这有点工作,但幸运的是,周围有很好的解释,such as this one by Rob Gonda