如何删除上一个svn修订版?

如何删除上一个svn修订版?,svn,svnadmin,Svn,Svnadmin,我想从存储库中删除最后一个版本(或最后n个版本) 怎么做 是否可以从project/db/revs/和project/db/revprops/中删除svn修订文件?通常,删除修订涉及在删除特定修订的情况下创建存储库的新副本。如果是一个小的签入,我会说获取以前的版本,将这些文件移到一边,获取最新的文件,然后将以前的文件复制到顶部并重新签入。检查SVNBook: svnadmin dump-r 0:99>mydump.dump 其中99是您的N-1号码。这样,您可以创建从0到99版本的存储库转储,并

我想从存储库中删除最后一个版本(或最后n个版本)

怎么做


是否可以从
project/db/revs/
project/db/revprops/
中删除svn修订文件?

通常,删除修订涉及在删除特定修订的情况下创建存储库的新副本。如果是一个小的签入,我会说获取以前的版本,将这些文件移到一边,获取最新的文件,然后将以前的文件复制到顶部并重新签入。

检查SVNBook:

svnadmin dump-r 0:99>mydump.dump


其中99是您的N-1号码。这样,您可以创建从0到99版本的存储库转储,并可以使用
svnadmin load

将其加载到新的存储库中。为什么要删除上一个版本?它包含的数据可能是敏感的,而且永远不会被任何人看到,还是上一次的修订真的很糟糕

同样,您可以通过
svnadmin
进行转储和加载。它会让您的存储库崩溃,而且通常是一种不值的痛苦。然而,它确实让人觉得上一次的修订似乎从未发生过。这是彻底删除修订本的唯一办法。只有当修订版中的信息是非常专有的或可能导致公司被起诉的信息时,您才可以这样做

一个更简单的方法是简单地恢复那个糟糕的修订。您可以通过
svn merge
命令还原上一个版本(或任何版本):

$ svn merge -c -$rev_to_remove .

旧的删除版本的历史记录仍然存在,如果用户对Subversion了解得足够多,就可以访问它。但是,存储库的状态将恢复到上次致命修订之前的状态。

我刚刚尝试完全按照您在问题中的建议进行操作,结果成功了

首先,从
db/revprops
db/revs
中删除最后一个版本。然后还必须减小
db/current
db/txn current

如果任何其他开发人员已经签出了最后一个版本,那么他们必须重新签出。签出旧版本似乎没问题

将不会有不可预见的副作用,因为我与之前和之后进行了区分,并且数据库是相同的(在提交&删除最后一次修订之后)

但我认为很明显,您只能删除链末尾的修订。从中间删除一个修订可以将修改之间的增量拧紧。


你不需要是svn数据库结构方面的专家就可以做这么简单的事情,正如bahrep在评论中所建议的那样

除非您有主要原因和经验,否则不得手动触摸/db/revs/和/db/revprops/。提交的文件仍将在存储库中。@bahrep-提交的文件仍将在repo中是正确的。这是你是否关心的问题。对我来说很好,非常感谢!但是,我没有降低(基准63)db/txn电流。这似乎没有必要,也不明智。这是一个仅递增的数字,其唯一作用是不断递增,以使其永不重复。请注意,我还删除了
db\rep cache.db
,以确保不正确的提交不会意外留下任何内容。从中,这是一个安全的操作:“Rep cache是[…]一个SQLite数据库,用于允许SVN执行重复数据消除。[…]如果删除文件,则不会与存储库发生任何冲突,它最终可能会比其他情况下更大。”在我们的例子中,我们有一个大型的100000+提交存储库,它是主存储库的svnsync副本。由于配置问题,意外地手动提交到该存储库,从而中断了svnsync。所以我只需要删除最后一个版本,没有其他方法。转储负载本来是可行的,但代价太高,侵入性太强,合并也解决不了这个问题。这才是真正有帮助的地方。