我想从存储库中删除最后一个修订版(或最后 n 个修订版)。
怎么做?
是否可以从中删除 svn 修订project/db/revs/
文件project/db/revprops/
?
检查 SVNBook:存储库维护。
svnadmin dump <path-to-repository> -r 0:99 > mydump.dump
其中 99 是您的 N-1 号码。这样,您可以创建从 0 到 99 修订版的存储库转储,并且可以使用svnadmin load
.
我只是尝试完全按照您在问题中的建议进行操作,并且成功了!
db/revprops
首先,您从和中删除最后一个修订db/revs
。然后你还必须减少db/current
和db/txn-current
如果任何其他开发人员已经签出了最新版本,那么他们必须重新签出。签出旧版本似乎没问题。
不会有不可预见的副作用,因为我在之前和之后做了一个差异,并且数据库是相同的(在提交和删除最后一个 rev 之后)。
但我认为很明显,您只能在链的末尾删除修订。从中间删除修订可能会破坏修订之间的增量。
您不需要成为 svn 数据库结构方面的专家来做这些简单的事情,正如评论中建议的 bahrep
为什么要删除最后一个修订?它是否包含本质上可能是敏感的数据,并且任何人都不应该看到,或者最后的修订版真的很臭?
正如所指出的,您可以通过svnadmin
. 它会使您的存储库崩溃,并且通常比它的价值更痛苦。然而,它确实使最后一次修订似乎从未发生过。这是完全消除修订的唯一方法。仅当该修订中的信息是非常专有的或可能使您的公司被起诉时,您才可能会这样做。
一种更简单的方法是简单地恢复那个糟糕的修订。svn merge
您可以通过以下命令还原上一个修订版(或任何修订版) :
$ svn merge -c -$rev_to_remove .
旧的已删除修订版的历史仍然存在,如果用户对 Subversion 足够了解,则可以访问它。但是,存储库的状态将恢复到上次致命修订之前的状态。
通常,删除修订涉及创建存储库的新副本,其中删除了特定的修订。如果是小签入,我会说获取以前的版本,将这些文件移到一边,获取最新的,然后将以前的文件复制到顶部并重新签入。