2011-12-27 132 views
0

我最近将信息提交给一个文件。只有几行高度机密的代码。我需要彻底地从Subversion版本库中删除这些信息。我怎么能做到这一点,而不会恢复和失去变化?它只在一个文件中?那么,是否可以删除对该文件的所有引用,然后重新提交正确的文件?从Subversion提交中删除数据?

+0

root密码,是吧?你是否控制仓库? – 2011-12-27 17:09:55

+0

[SVN Obliterate!]的可能重复(http://stackoverflow.com/questions/560684/svn-obliterate) – 2011-12-27 17:13:41

+0

Yip,root密码。 *叹息* – coderama 2011-12-27 17:19:36

回答

1

我认为你必须

  • 记录不好的承诺和以后每犯一个或几个补丁
  • 转储库
  • 建立新仓库
  • 进口的所有修订在转储到存储库的错误提交之前
  • 依次重新应用每个补丁(并在提交之前删除几行秘密信息)
+0

这是唯一的解决方案。 – khmarbaise 2011-12-27 17:36:43

1

SVN提供一个名为svndumpfilter的命令,允许您转储存储库并从中排除路径。然后,将该转储文件加载到一个新的存储库中,该文件将会消失。

http://www.principia-it.co.uk/tools-n-tips/subversion/subversion-faq/7-subversion/10-how-do-i-permanently-remove-paths-from-my-repository

svnadmin dump /path/to/repos > dump.file 
svndumpfilter exclude path/to/remove <dump.file> newdump.file 
svnadmin load /path/to/newrepos < newdump.file 
0

唯一的解决办法是过滤在服务器端存储库。你应该使用像这样的命令:

svnadmin create /path/to/newrepos 

svnadmin dump /path/to/repos --incremental | svndumpfilter excdlude path/to/remove | svnadmin load /path/to/newrepos 
0

你能等到Subversion 1.8出来吗?那就是当高度要求的消除命令被执行时(当然,除非他们已经决定将它移到Subversion 1.9或2.0)。

不是吧?

您唯一能做的就是取下您的存储库,执行svnadmin dump,使用svndumpfilter对其进行过滤以删除更改,然后使用svnadmin load重新加载存储库。这可以在单个管道中完成,但取决于您的存储库大小,可能意味着停机几个小时。

我已经做了好几次了。这并没有什么乐趣,特别是当你必须在凌晨2点这么做的时候,因为当你的开发人员忙于使用它的时候你无法取下你的存储库。

+0

值得注意的是,消除仍然不在1.8.11,以防万一有人在这里结束并激动。 :) – dannysauer 2015-03-24 19:10:23