限制Subversion存储库的大小

时间:2010-01-07 13:14:56

标签: svn

您好我想通过指定最大大小来限制我的存储库的大小,但是我无法找到有关这样做的任何信息。这在技术上是否可行?

编辑:抱歉,如果我不清楚的话。我想保留一个功能存储库,我可以继续提交修补程序,但是至少有一个较新版本的最旧版本的文档可以自动删除以保持在sizelimit中。所以说我可以恢复67个版本,因为旧的版本已被删除(理想情况下保留提交消息)。

6 个答案:

答案 0 :(得分:13)

执行此操作是对您的存储库进行的大手术。在真正的存储库中实现这一点之前,请确保您完全了解自己正在做的事情。

您将无法为单个文件执行所需操作,但您可以在整个存储库中执行此操作。您需要做的是切断存储库的历史尾部。

这意味着如果您的存储库中有5000个修订版,并且您切断了最早的1000个修订版,那么最终将获得一个仅包含最新版本4000的存储库。

执行此操作需要转储/恢复周期,这意味着您在处理和重建存储库时必须禁用对存储库的写访问权。

在浏览存储库时,您不会丢失任何仍然可见的文件,但任何特定文件的历史记录可能会完全丢失(如果对它的所有修改都在前1000次修订中)。显然,如果在早期版本之一中删除了某个文件,那么在剪切后你将无法完全恢复它。

另请注意,执行此操作的天真方式将重新编号从0开始的所有修订,因此在上面的示例中,修订版5000将在截断后变为修订版4000。如果这会给你带来麻烦,你就必须做额外的工作。

因此,假设我们想要丢失最早的1000个修订版,基本工作流程是:

  1. 使您的存储库脱机(或至少使其成为只读)
  2. 运行svnadmin dump [repository path] -r 1000:HEAD > repository.dump。这将创建一个dumpfile,它只包含1000以后的修订版。通过使用--incremental标志,dumpfile中的第一个修订版将包含存储库的完整转储,因为它查看了修订版1000(不包括所有历史记录)。
  3. 使用svnadmin create创建一个干净的存储库并复制conf&挂钩旧存储库中的目录。
  4. 运行svnadmin load [new repository path] < repository.dump以加载最新版本。
  5. 将旧存储库移开(保留它以备份)并将新存储库移动到其位置。
  6. 如果要保留修订号,则必须从某处加载空修订。您可以通过将修订版1:999转储到单独的转储文件中,然后使用svn dumpfilter从中删除所有内容,然后加载空修订版,然后加载所需的修订版。它有点繁琐,但会让你到那儿。

答案 1 :(得分:1)

在预提交挂钩中,如果存储库超出限制,您可以“中止”事务。

答案 2 :(得分:1)

没有简单的方法可以做到这一点。您真的需要重建存储库,删除最旧的修订版。没有单个SVN命令可以执行此操作。您需要的过程大致是:

  1. 执行 svnadmin转储(只能在主机上执行)。
  2. 使用 svndumpfilter 过滤掉不需要的修订。
  3. 创建新存储库并使用 svnadmin load 加载到新存储库。
  4. 这个link将为您提供有关svndumpfilter的一些信息,这是整个操作的关键部分。

    重新思考:svndumpfilter可以控制要包含或排除的文件/路径,但我不确定它是否会对修订版进行细粒度的控制......

答案 3 :(得分:1)

由于SVN中的所有修订都是基于之前的差异,因此无法“清除”旧版本。如果您出于某种原因确实需要执行此操作,则必须经常进行导出并将其重新导入到新存储库中。

答案 4 :(得分:0)

你不能这样做。 与CVS相反,subevrsion不会保留每次修订的整个源 但只是即将到来的修订之间存在差异(这个问题有点聪明但不重要)

答案 5 :(得分:0)

  1. 为SVN创建Windows用户帐户
  2. 为所有NTFS驱动器启用配额控制(我的电脑 - &gt;驱动器 - &gt;属性 - &gt; ...)
  3. 根据您需要的尺寸设置配额限制(例如,20 Mb)
  4. 将SVN服务器配置为在刚刚创建的帐户下运行
  5. 享受!