我有一个网站,用户可以通过该网站编写自己的剧本。
此剧本以修订的形式保存。
Apache SVN 已安装。
我只想保存每个用户文档的最后 5 个修订。
但问题出在后端,所有修订都存储在一个名为“Docsrepo”的文件夹中,并且在 1 个文件夹中归类为 1000 个修订。像这样它有234个文件夹。
意思是 234*1000 次修订。
现在我想归档所有这些修订,只保留每个文档的最后 5 个修订。
我怎么做?
我有一个网站,用户可以通过该网站编写自己的剧本。
此剧本以修订的形式保存。
Apache SVN 已安装。
我只想保存每个用户文档的最后 5 个修订。
但问题出在后端,所有修订都存储在一个名为“Docsrepo”的文件夹中,并且在 1 个文件夹中归类为 1000 个修订。像这样它有234个文件夹。
意思是 234*1000 次修订。
现在我想归档所有这些修订,只保留每个文档的最后 5 个修订。
我怎么做?
如果您查看文件夹,您会看到每个修订都存储为单独的文件,因此您可以看到大小。这些文件中的每一个实际上都在存储签入之间的增量或差异,因此它们应该非常小。
使用更高版本的 SVN,您可以运行“svnadmin pack”命令,它将 1 个文件夹中的所有文件组合成一个更大的文件。这有助于提高性能,因为操作系统将能够更好地缓存单个文件,但是,它仅适用于已满的旧文件夹 - 即不会添加到它们的文件夹。虽然它运行起来很安全,而且您可以随意运行它(有些人在每次签到时运行它,有些人每周或每月运行它)。
现在,您不能只删除旧文件,因为您已经看到每个文件只包含它与以前版本之间的差异,所以如果您删除旧文件,SVN 将无法重新创建整个文件基于随时间发生的所有变化。
这有点复杂。SVN 使用一种叫做skip-deltas的东西,它是“检查点”,它存储所有先前差异的汇总,这意味着您可以获得更好的性能。但是,这仍然不意味着您可以删除旧文件,除非您知道可以重新创建每个文件(而且我猜您不会知道每个文件实际签入了多少次)。
所以..要回答你的问题:
您可以转储和加载您的存储库,忽略古老的文件。这涉及到 svnadmin dump 和 svnadmin load 命令。您只使用最后 5 个修订号将存储库转储到转储文件中,然后将转储文件加载到新的存储库中。(我认为还有基于日期的倾销选项)。
请注意,您不能保留每个文件的最后 5 个修订版。您只能转储一系列修订。
显然,这是一项手动的管理任务,通常用于删除没人会再看到的古老修订。没有自动“仅保留最后 5 个修订版”选项。删除修订的需求很小,但是 SVN 非常擅长保持快速性能,并且增量很小,因此不需要删除历史记录。如果您真的磁盘空间不足,那么转储/加载选项是您最好的选择。
可能可以在 SVN 中添加一个钩子,这样当用户签入新修订版时,您可以放弃最旧的修订版。但是,您确实意识到 SVN 并没有保留每个脚本的 1000*234 完整副本,对吗?SVN 只保存每个版本之间的差异。