2010-03-28 41 views

回答

6

答案是在Subversion FAQ

有一些特殊情况下,您可能 要破坏的 所有证据文件或提交。 (也许有人 不小心犯了一个机密 文件)。这并不是那么容易,因为 Subversion被故意设计成 永不丢失信息。修订版本是 不可变的树,它建立在另一个 上。从 历史中删除修订将导致多米诺骨牌效应, 在所有后续 版本中创建混乱并可能使所有工作副本无效 。

该项目的计划,然而,有一天 实施svnadmin的 泯命令这将 来进行永久删除 信息的任务。 (参见问题516)

在此期间,你唯一的办法是 到svnadmin的转储你的资料库,然后 管转储文件通过 过滤流(不包括坏路径) 到svnadmin的负载命令。有关详细信息,请参阅 Subversion书的第5章 。

+0

感谢那,这里是一个很好的文章:http://blog.projectnibble.org/2008/03/01/subversion-obliterate-the-forgotten-feature/干杯 – Marcin 2010-03-28 10:50:16

0

rm -rf在仓库平时工作正常。

+0

那么内部svn数据库呢? – Marcin 2010-03-28 10:18:03

+0

我一直生活在svn将数据库保存在服务器存储库某处的印象中,因此核心存储库也会摆脱它。但我可能是错的。 – che 2010-03-28 21:26:01

1

不,我不相信。

如果你确实需要从SVN历史记录中完全删除文件,我认为唯一的方法是做类似于倾销存储库,用svndumpfilter过滤出你不想要的文件,然后重新创建来自转储的存储库。

你为什么要这样做?

+0

我有一个项目,我想彻底从我的回购中删除。 – Marcin 2010-03-28 10:27:35

0

这是如何做到这一点在Linux上:

/>svnadmin dump /path/to/repos > proj.dump 
/>cat proj.dump | svndumpfilter exclude somefolder > cleanproj.dump 
/>service svn stop 
/>BACKUP /path/to/repos/conf /path/to/repos/hooks (all custom configuration for this repository) 
/>DELETE /path/to/repos 
/>svnadmin create /path/to/repos 
/>RESTORE /path/to/repos/conf /path/to/repos/hooks 
/>svnadmin load /path/to/repos < cleanproj.dump 
/>service svn start 

0

我假设你在同一个仓库下谈论多个项目:

myrepo/ 
     project1/ 
     project2/ 

如果你只是想让一个项目在不与存储库历史结合的情况下“消失”,那么如果你使用的是一个认证,你可以简单地隐藏这条路径利用authz的授权机制。换句话说,你是而不是使用'svn + ssh'来访问版本库。

假设我的authz中已经有一个名为'everyone'的组。在我的authz我会设置像这样:

[/project1]: 
    @everyone = 
+0

我想删除它不隐藏, 谢谢。 – Marcin 2010-03-30 10:44:05