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

时间:2009-03-25 12:07:33

标签: svn version-control

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

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:4)

我可以删除较旧的修订版或存储库以释放存储空间吗?

简短的回答是否定的。 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

答案 2 :(得分:1)

没有办法以您描述的方式“剪切”某个特定版本的存储库。您可以做的是svn export所需版本的整个存储库,然后导入它到新的存储库,然后从日志文件到新存储库重放从修订版本的提交。这不是微不足道的。

或者,如果您只想从存储库中排除一些混乱的路径,并且可以直接访问存储库所在的文件系统,则可以使用svnadminsvndumpfilter的组合。选择你想要的路径并修剪所有其他路径。

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