可以从我的SVN存储库中完全删除文件吗?

时间:2009-07-10 18:55:05

标签: svn version-control tortoisesvn

我正在使用陆龟SVN进行我独自工作的项目,并且我已经(错误地)将一个巨大的文件提交到我的存储库(VC ++智能感知数据库)。现在我想从我的存储库中删除此文件以便于备份。

从我的项目中删除文件并进行提交(显然)并不能解决我的问题,因为该文件的先前版本仍在存储库中。有没有办法解决这个不涉及创建新存储库的问题?


修改

@ryansstack解决方案运行良好,就是我所做的(我在我的存储库所在的目录中运行命令):

首先,我创建了一个存储库的转储,过滤了这个巨大的文件:

svnadmin dump tcc | svndumpfilter exclude "/trunk/Image Segmentation/Image Segmentation.ncb"  > tcc.bak

然后我创建了一个新的存储库(tcc2)并运行以下命令:

svnadmin load tcc2 < tcc.bak

现在tcc2的转储大小是7 MB而不是170 MB的tcc。

5 个答案:

答案 0 :(得分:22)

http://subversion.apache.org/faq.html#removal

你不能,很快,但有一种方法

答案 1 :(得分:3)

我看过做类似的事情,从根本上设置了Subversion,这样你就不能简单地删除类似的内容。

但由于您已经在备份数据库,因此您应该check this out。我最终做的是转储我的存储库,过滤它,然后将其加载到新的存储库中。当然,由于其他原因,我已经在进行转储/过滤/加载循环,因此一些额外的过滤并没有增加太多工作。如果您已经在进行备份,则可以备份当前的仓库(我假设您正在进行转储,或者为此进行多次增量转储),使用svndumpfilter过滤掉该特定版本,然后从备份中重新加载。

编辑:底格里斯正式有issue 516。 “svn obliterate”命令已经计划好了,但还没有实现。

答案 2 :(得分:2)

据我所知,一旦文件在svn中提交,svn中没有用于撤消该功能的功能。您可以从目录中删除该文件并提交该目录,但这只会使该文件不属于该目录的最新版本;承诺的修订仍在那里。通常我发现这是一件好事,但当然有些情况(比如你的)可能不太理想。

答案 3 :(得分:-1)

我们遇到了同样的问题。我的SVN服务器管理员告诉我这不能做。您可以这样做的唯一方法是启动一个新的存储库并将旧存储库存档到磁盘或其他任何位置。

不要对文件进行任何更改,尤其是如果它是一个二进制文件,因为我相信SVN会存储它的多个副本。

答案 4 :(得分:-1)

无法从svn撤消已提交的文件。