【问题标题】:How to permanently delete files from SVN?如何从 SVN 中永久删除文件?
【发布时间】:2017-01-06 10:19:14
【问题描述】:

这个问题最初是在 2009-2013 年间活跃的,有各种例子:

等等。

目前,所有消息来源都指向一个糟糕的解决方案:

现在,如果只是这样,解决方案就不会那么糟糕了:

  1. 转储到文件。
  2. 过滤要删除的文件:

svndumpfilter exclude file_name_needs_to_be_removed.txt --drop-empty-revs --renumber-revs < source.dump > result.dump

  1. 将过滤后的转储文件加载到新的 repo 目录中。

但是当您使用 SVN 重命名、分支等时,您需要跟踪所有依赖项和 --drop-empty-revs --renumber-revs

所以现在我们在 2016 年第三季度,Debian 拥有 SVN 1.8。是否有任何新的解决方案浮出水面?

【问题讨论】:

  • 有没有机会让这听起来不像是纯粹的咆哮?
  • 使用--drop-empty-revs --renumber-revs 是个坏主意,因为您会改变修订号。最好留下一个带有日志消息Removed by filtering 的填充修订,就像svndumpfilter 默认情况下所做的那样。

标签: svn repository history purge


【解决方案1】:

简答

没有,以后也不会

更长的答案

“永远不会丢失数据”和“历史是不可变的”(提交一次 - 永远提交)是基础,SVN 的核心原则,因此 - 对历史和内容的操纵 必须 很难不明显的肮脏黑客和技巧,未嵌入“功能”。你必须:

  • 想想
  • 提交前

【讨论】:

  • 也完全不知道隐藏在某处的文件可能会无意中变得庞大(想想日志,或者在我的情况下,一个“设置”存档,无意中包含了一大堆 solr 集合)。
【解决方案2】:

我将通过一些参考来扩展 Lazy Badger 的答案。

SVN 集团将此功能称为“消除”。了解这一点有助于我们挖掘更多有关它的信息。

首先,here is the SVN group's JIRA issue about supporting obliteration。它于 2001 年开放(!),并引发了很多支持和反对实施它的讨论。 last comment by a project committer on this issue 表示他在这方面取得了一些进展,也将我们指向a milestones/feature status page

development notes for this feature 已经有一段时间没有被触摸了:

>svn ls http://svn.apache.org/repos/asf/subversion/trunk/notes/obliterate/ -v
1398429 stefan2               Oct 15  2012 ./
 878962 julianfo          872 Aug 20  2009 README
 952192 rhuijben         5175 Jun 07  2010 comparison.txt
1398429 stefan2          2488 Oct 15  2012 design-audit.html
1398429 stefan2          3839 Oct 15  2012 design-authz.html
1398429 stefan2         18664 Oct 15  2012 design-repos.html
1398429 stefan2          2500 Oct 15  2012 design-wc.html
 952192 rhuijben              Jun 07  2010 fspec-cc1/
 883799 julianfo              Nov 24  2009 fspec-dd1/
 952192 rhuijben         7742 Jun 07  2010 high-level-design.txt
 904301 neels                 Jan 28  2010 hooks/
 876577 hwright         39780 Mar 12  2009 obliterate-functional-spec.txt
1398429 stefan2          7541 Oct 15  2012 plan-milestones.html
 880336 julianfo              Oct 28  2009 presentations/
 952192 rhuijben        11266 Jun 07  2010 req-spec.txt
 887471 julianfo       290129 Dec 04  2009 schema-bdb-dd1-after.svg
 887471 julianfo       297789 Dec 04  2009 schema-bdb-dd1-before.svg

注意:最后一次“真正的”提交是 r906520(2010 年 2 月 4 日);之后的其他内容与存储库维护相关。

在开发者的邮件列表中,the word "obliterate" hasn't been uttered since 2014,这是作为外部工具的括号引用:

期待修复、分析和离线是完全合理的 过滤(清除)工具以访问 FSFS 磁盘数据。

Clunky work-arounds do exist,主要围绕着 svn-dumpfilter 的使用展开。尽管对于大多数人来说,为经常发生的事情转储和导入存储库是不可能的。

因为it is on the roadmap,我不会说它永远不会实现。但是,因为(正如 Lazy Badger 所提到的)永久删除内容违背了 Subversion 的原始设计和目的,它的实施可能是一个漫长而艰难的过程。

请记住标准的 OSS 免责声明:这个项目主要由在业余时间做出贡献的个人组成。还有其他优先级高于此的功能/修复,因此如果您想更改它,请告知开发人员。

【讨论】:

  • 感谢您的完整回答,先生。
猜你喜欢
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 2017-10-21
  • 1970-01-01
  • 2020-11-10
  • 2013-11-07
相关资源
最近更新 更多