清理Subversion存储库的最佳方法是什么?

9 svn version-control

我有一个不断增长的存储库,其中包含我使用TortoiseSVN维护的十几个项目(因为我对此完全陌生并且还不了解其中的内容).我必须拥有存储库的空间是有限的,所以我想备份它,然后删除一些旧版本.例如,如果项目的版本为50,我只想保留50,49,48.

Ric*_*ams 12

删除旧版本会破坏版本控制点,但您可以只删除要保留的修订版本,然后将它们放入新的仓库中,并删除旧版本.

svnadmin dump /path/to/current/repo -r48:50 > svn.dump
svnadmin create /path/to/new/repo
svnadmin load /path/to/new/repo < svn.dump
Run Code Online (Sandbox Code Playgroud)

或者使用svndumpfilter来包含/排除您想要的特定位等.在svn常见问题解答中还有一些关于删除的信息,您可能会发现它们很有用.


The*_*can 5

我可以删除旧版本或存储库以释放存储空间吗?

最简洁的答案是不。Subversion 和 CVS 的工作方式是它们保留完整的更改历史记录,包括删除的文件、二进制文件等。每个修订版都依赖于最后一个修订版,因此您不能只在中间某个地方删除修订版,否则您就损坏你的存储库。如果空间不足,您可以做两件事:1)删除模块,然后仅使用 HEAD 修订版重新创建它,这将清除所有旧修订版(但您将丢失提交历史记录)。2) 更好的选择 - 升级到更高的计划:-)。对于 Git 来说这不是一个问题,因为它对服务器端存储的要求要少得多。

如何从存储库的历史记录中完全删除文件?

在某些特殊情况下,您可能希望销毁文件或提交的所有证据。(也许有人不小心泄露了一份机密文档。)这并不那么容易,因为 Subversion 被故意设计为永远不会丢失信息。修订版是一棵不可变的树,相互构建。从历史记录中删除修订会导致多米诺骨牌效应,在所有后续修订中造成混乱,并可能使所有工作副本失效。

然而,该项目计划有一天实施 svnadmin obliterate 命令,该命令将完成永久删除信息的任务。(参见第 516 期。)

同时,您唯一的办法是 svnadmin 转储您的存储库,然后通过 svndumpfilter (不包括错误路径)将转储文件传输到 svnadmin load 命令中。有关详细信息,请参阅 Subversion 书的第 5 章。

引用自:

http://subversion.apache.org/faq.html#removal

http://codesion.com/benefits/faq.htm#deleterevisions


Joh*_*lla 1

无法按照您描述的方式“剪切”特定修订版的存储库。您可以做的是svn export整个存储库处于所需的修订版,然后将其导入到新存储库中,然后将修订版中的提交从日志文件重播到新存储库中。这并非小事。

或者,如果您只想从存储库中排除一些杂乱的路径,并且可以直接访问存储库所在的文件系统,则可以使用 和 的组合来svnadmin选择svndumpfilter所需的路径并删除所有其他路径。

请注意,您所描述的内容或多或少与 Subversion 的观点相悖:它应该保留所有内容。如果您经常遇到此问题,请考虑建立更好的签入实践。或者考虑使用Git,这使得此类实验几乎免费。