释放我的SVN存储库中的空间


8

我在最大存储库大小的免费增值站点上托管了一个SVN存储库。当我达到这种能力时,我知道已经检查过的文件知道可以永久删除以释放磁盘空间。如何告诉SVN文件不仅可以删除,还可以删除历史记录?

Answers:


7

如Hubert所说,svnadmin pack会将目录中的所有单个回购文件打包到一个大文件中。这将为您节省一些空间,但这只是推迟您一天的清算。(尽管这样可以使历史记录操作更快,因此无论如何都是一个很好的建议)。需要注意的一件事是,它仅适用于分片目录(即新目录结构是将1000个修订放入一个目录中,然后启动一个新目录),并且仅打包旧的分片目录,不适用于当前分片目录在里面。

因此,唯一的选择是从历史记录中删除旧修订。这需要svnadmin转储和加载,并可以选择使用过滤器删除不再需要的存储库中的目录。(例如旧的临时分支机构)。

转储很容易:svnadmin dump -r xxx:HEADxxx是您要保留的最旧修订版本(即xxx将转储最新修订版本,因此您的旧修订版本将被丢弃,例如存档)。您也可以通过转储旧版本来保留旧版本的存档(svnadmin dump -r 1:xxx

获得转储文件后,加载就像通过传递转储文件名运行svnadmin load一样容易。在加载新仓库之前删除旧仓库可能是一个好主意-然后,如果您还没有最新的服务器文件系统属性,则可以从中受益。

如果要保留所有旧版本,但要过滤掉某些目录,则需要通过svndumpfilter运行转储文件,这将删除指定的路径。请注意,您将不使用--incremental选项就进行转储。

显然,请在本地测试所有操作-转储到本地文件,然后将其加载到本地驱动器上的临时存储库中(这也会更快),并测试历史记录和最新版本是否正常-我将最新修订版本导出到目录并使用winmerge检查文件是否与实时回购中导出的最新修订版本相同。如果您想偏执,也可以尝试使用历史修订版。


3

来自Subversion常见问题解答

该项目有计划...某天要实施svnadmin obliterate命令,该命令将完成永久删除信息的任务。

...

同时,您唯一的办法是svnadmin转储您的存储库,然后将转储文件通过svndumpfilter(不包括错误的路径)通过管道传输到svnadmin load命令中。


2

您不能不svnadmin dump; svndumpfilter; svnadmin load跳舞就无法从SVN存储库中删除文件。你可以,如果你使用的是FSFS,只需运行降低库的大小svnadmin pack在回购目录。


0

通常,在版本控制下从存储库中删除文件是个坏主意。

我不确定我是否正确,但这就是我的理解方式。版本控制是关于唯一校验和。如果删除某些内容,则可能会重复使用这些校验和,从而导致冲突。用这种方法缓解磁盘空间不足问题,更好地升级数据计划根本不值得。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.