如何从SVN永久删除文件?
How to permanently delete files from SVN?
这个问题最初活跃于 2009-2013 年,有各种例子:
- It is possible to completely remove a file from my SVN repository?
- Delete file with all history from svn repository
等等。
目前,所有来源都指向一个糟糕的解决方案:
- http://www.microhowto.info/howto/permanently_delete_a_file_from_all_revisions_of_a_subversion_repository.html
- http://subversion.apache.org/faq.html#removal
- http://support.beanstalkapp.com/article/902-how-can-i-permanently-remove-files-from-a-repository
现在,如果只是这样,解决方案就不会那么糟糕:
- 转储到文件。
- 筛选要删除的文件:
svndumpfilter exclude file_name_needs_to_be_removed.txt --drop-empty-revs --renumber-revs < source.dump > result.dump
- 将过滤后的转储文件加载到新的 repo 目录中。
但是当您使用 SVN 重命名、分支等时,您需要跟踪所有依赖项和 --drop-empty-revs --renumber-revs
。
现在是 2016 年第三季度,Debian 有 SVN 1.8。有没有发现任何新的解决方案?
简答
没有,以后也不会
更长的答案
"Never lose data" 和 "history is immutable"(一次承诺 - 永远承诺)是 SVN 的基本核心原则,因此 - 对历史和内容的操纵 必须 硬不明显的肮脏黑客和技巧,没有嵌入 "feature"。你必须:
- 想想
- 提交前
我将通过一些参考来扩展 Lazy Badger 的回答。
SVN Group 将此功能称为 "obliterate"。了解这一点有助于我们挖掘更多有关它的信息。
首先,here is the SVN group's JIRA issue about supporting obliteration. It was opened in 2001 (!) and has generated a lot of discussion both for and against implementing it. The last comment by a project committer on this issue indicates he made some progress on it, and also points us towards 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
注意:最后的 "real" 提交是 r906520(2010 年 2 月 4 日);之后的其他人与存储库维护相关。
在开发人员的邮件列表中,the word "obliterate" hasn't been uttered since 2014,这是一个将其作为外部工具的括号引用:
It is perfectly reasonable to expect repair, analysis and offline
filtering (obliterate) tools to access FSFS on-disk data.
Clunky work-arounds do exist,主要围绕svn-dumpfilter的使用展开。尽管对于大多数人来说,为经常发生的事情转储和导入存储库是行不通的。
因为it is on the roadmap,我不会说它永远不会实现。但是,因为(正如 Lazy Badger 提到的)永久删除内容与 Subversion 的原始设计和目的背道而驰,它的实现可能是一个漫长而困难的过程。
请牢记标准的 OSS 免责声明:该项目主要由业余时间贡献的个人组成。还有其他 features/fixes 的优先级高于此,因此如果您想更改它,请告知开发人员。
这个问题最初活跃于 2009-2013 年,有各种例子:
- It is possible to completely remove a file from my SVN repository?
- Delete file with all history from svn repository
等等。
目前,所有来源都指向一个糟糕的解决方案:
- http://www.microhowto.info/howto/permanently_delete_a_file_from_all_revisions_of_a_subversion_repository.html
- http://subversion.apache.org/faq.html#removal
- http://support.beanstalkapp.com/article/902-how-can-i-permanently-remove-files-from-a-repository
现在,如果只是这样,解决方案就不会那么糟糕:
- 转储到文件。
- 筛选要删除的文件:
svndumpfilter exclude file_name_needs_to_be_removed.txt --drop-empty-revs --renumber-revs < source.dump > result.dump
- 将过滤后的转储文件加载到新的 repo 目录中。
但是当您使用 SVN 重命名、分支等时,您需要跟踪所有依赖项和 --drop-empty-revs --renumber-revs
。
现在是 2016 年第三季度,Debian 有 SVN 1.8。有没有发现任何新的解决方案?
简答
没有,以后也不会
更长的答案
"Never lose data" 和 "history is immutable"(一次承诺 - 永远承诺)是 SVN 的基本核心原则,因此 - 对历史和内容的操纵 必须 硬不明显的肮脏黑客和技巧,没有嵌入 "feature"。你必须:
- 想想
- 提交前
我将通过一些参考来扩展 Lazy Badger 的回答。
SVN Group 将此功能称为 "obliterate"。了解这一点有助于我们挖掘更多有关它的信息。
首先,here is the SVN group's JIRA issue about supporting obliteration. It was opened in 2001 (!) and has generated a lot of discussion both for and against implementing it. The last comment by a project committer on this issue indicates he made some progress on it, and also points us towards 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
注意:最后的 "real" 提交是 r906520(2010 年 2 月 4 日);之后的其他人与存储库维护相关。
在开发人员的邮件列表中,the word "obliterate" hasn't been uttered since 2014,这是一个将其作为外部工具的括号引用:
It is perfectly reasonable to expect repair, analysis and offline filtering (obliterate) tools to access FSFS on-disk data.
Clunky work-arounds do exist,主要围绕svn-dumpfilter的使用展开。尽管对于大多数人来说,为经常发生的事情转储和导入存储库是行不通的。
因为it is on the roadmap,我不会说它永远不会实现。但是,因为(正如 Lazy Badger 提到的)永久删除内容与 Subversion 的原始设计和目的背道而驰,它的实现可能是一个漫长而困难的过程。
请牢记标准的 OSS 免责声明:该项目主要由业余时间贡献的个人组成。还有其他 features/fixes 的优先级高于此,因此如果您想更改它,请告知开发人员。