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

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

我有一个 SVN 存储库托管在免费增值网站上,该存储库的大小有上限。当我接近这个容量时,我知道我签入的文件可以永久删除以释放磁盘空间。我如何告诉 SVN 不仅可以删除文件,还可以删除其历史记录?

答案1

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

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

转储很简单:svnadmin dump -r xxx:HEADxxx 是您要保留的最旧修订版本(即这将转储最新的修订版本,因此您的旧修订版本将被丢弃,就像存档一样)。您也可以通过转储旧修订版本来保留其存档(svnadmin dump -r 1:xxx

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

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

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

答案2

来自Subversion 常见问题解答

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

...

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

答案3

你不能不做这个svnadmin dump; svndumpfilter; svnadmin load动作就从 SVN 存储库中删除一个文件。你svnadmin pack如果您使用 FSFS,则只需在 repo 目录上运行即可减少存储库的大小。

答案4

一般来说,从版本控制下的存储库中删除文件不是一个好主意。

我不确定我理解得是否正确,但我是这样理解的。版本控制与唯一校验和有关。如果您删除某些内容,则存在这些校验和被重复使用的风险,从而导致冲突。以这种方式缓解磁盘空间不足的问题根本不值得,最好升级您的数据计划。

相关内容