2012-04-07 51 views
1

我有一个网站,用户可以通过它编写自己的剧本。如何从Apache服务器上的Apache SVN存档旧版本

本屏幕截图以修订版的形式保存。

Apache SVN已安装。

我想只保存每个用户文档的最后5个修订版。

但问题出在后端,所有修订都存储在一个名为“Docsrepo”的文件夹中,并且它在1个文件夹中被归类为1000个修订版。像这样它有234个文件夹。

含义234 * 1000修订版。

现在我想归档所有这个修订版,只保留每个文档的最后5个版本。

我该怎么做?

+1

SVN不存储每个修订版的完整副本,它只存储差异。所以我不确定你在描述什么。 – 2012-04-07 17:33:13

+1

另外,您看到的'1000'不是该文件夹中修订版的实际数量。 SVN在文件系统中“修改”了修订版,这是SVN很容易知道的,当它必须处理版本号687时,它应该在'1000'文件夹中查找;修订号3465,它应该在'3000'文件夹中查找;等等。 – 2012-04-08 03:19:02

回答

0

向SVN添加一个钩子是可能的,这样当用户检入一个新的修订版本时,可以抛弃最旧的修订版本。但是,您确实意识到SVN没有保留每个脚本的1000 * 234完整副本吗? SVN只保存每个版本之间的差异。

0

如果您查看文件夹,您会看到每个修订版都存储为一个单独的文件,因此您可以看到这些尺寸。这些文件中的每一个都真的存储了签入之间的差异或差异,所以它们应该非常小。

对于更高版本的SVN,您可以运行'svnadmin pack'命令,该命令将1个文件夹中的所有文件合并为一个更大的文件。这有助于提高性能,因为操作系统可以更好地缓存单个文件,但是,它只适用于已满的较旧文件夹 - 即不会添加到其中的文件夹。尽管运行起来很安全,并且可以随时随地运行(有些人在每次签入时都会运行它,有些人每周或每月运行一次)。

现在,您不能只删除旧文件,因为您已经看到每个文件仅包含它与之前版本之间的差异,所以如果您删除了旧文件,SVN将无法重新生成旧文件,根据所有随时间的变化创建总文件。

这有一个轻微的复杂性。 SVN使用名为skip-deltas的东西,它们是“检查点”,它存储了以前所有差异的汇总,这意味着您可以获得更好的性能。但是,这仍然不意味着你可以删除旧文件,除非你知道你可以重新创建每个文件(我猜你不会知道每个文件有多少实际的检查)。


所以..去回答你的问题:

你可以转储并加载你的资料库,忽略古老的文件。这涉及到svnadmin转储和svnadmin加载命令。 You dump the repo into a dumpfile只使用最后5个版本号,然后将转储文件加载到新的回购库中。 (我认为也有基于日期的倾销选择)。

请注意,不能保留每个文件的最后5个修订版。您只能转储一系列修订。

显然这是一个手动管理任务,通常用于删除古代修订版,没有人会再次看到。没有自动'只保留最后5修订'选项。 但是,删除修订的需求很小,SVN非常擅长保持性能,而且增量很小,所以不需要删除历史记录。如果你真的缺少磁盘空间,那么转储/加载选项是你最好的选择。