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

fbr*_*eto 8 maintenance cleanup svn repository

我在免费增值站点上托管了一个 SVN 存储库,其存储库大小最大。当我接近这个容量时,我知道我已经签入的文件我知道我可以永久删除以释放磁盘空间。我如何告诉 SVN 一个文件不仅可以被删除,而且它的历史也是如此?

gbj*_*anb 7

正如休伯特所说,svnadmin pack将一个目录中的所有单独的 repo 文件打包成一个大文件。这将为您节省一些空间,但这只会推迟为您计算的日子。(它应该使历史操作更快,所以无论如何它是一个很好的建议)。需要注意的一点是它只适用于分片目录(即新的目录结构是将 1000 个修订版放入单个目录,然后启动一个新目录)并且它只打包旧的分片目录,而不是包含当前修订版的目录在里面。

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

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

一旦你有了你的转储文件,加载它就像运行svnadmin load传递转储文件名一样简单。在加载新的 repo 之前删除旧的 repo 可能是个好主意 - 如果您还没有最新的服务器文件系统属性,那么您可以获得最新的服务器文件系统属性的好处。

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

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


ned*_*edm 3

来自Subversion 常见问题解答

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

...

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