引用Subversion Obliterate,被遗忘的功能,问题,问题,原因和解决方案三个组成部分。既然你从解决方案的问题开始,我就从这个开始。
解决方案
正如您所注意到的,没有很好的解决方案。特别是如果您正在处理大型企业存储库,因为存储库越大,解决方案就越难。有一个称为转储/过滤器的功能,您可以通过它清除您不想要的东西的回购,但它不是那么容易使用,不快速且不依赖。
svn 团队在 2008 年之后做了一些小努力(跟随线程),以在其中获得一个消除功能,但这种努力无声无息地死去。
问题
我在开头提到的文章实际上有一个很好的用例列表,其中需要一个删除命令,并且在516 问题线程中,开发人员实际上承认了它的优点。
唉,现在看来为时已晚;后来从未添加它的真正原因是现在几乎不可能实现它,因为它在最基本的级别上挂钩到代码(另见解决方案下的小努力链接)。
从常见问题条目:
修订是相互依赖的不可变树。从历史中删除修订会导致多米诺骨牌效应,在所有后续修订中造成混乱,并可能使所有工作副本无效。
原因
问题是最初删除功能被忽略了,因为它不符合真正的版本控制原则。
再次来自常见问题条目:
如何从存储库的历史记录中完全删除文件?在某些特殊情况下,您可能想要销毁文件或提交的所有证据。(也许有人不小心提交了一份机密文件。)这并不容易,因为 Subversion 被刻意设计为永远不会丢失信息。
然而
我已经为很多客户与更大的团队和更大的项目合作过,基本上从来没有遇到过真正的问题。是的,提到的用例保证了一个消除功能,但到目前为止,我不相信这是一个你在任何地方都会一遍又一遍地遇到的问题。当然,这个特殊问题的本质是你只需要犯一次错误,而且它不能被正确地撤消。