【问题标题】:Limit size of Subversion repositorySubversion 存储库的限制大小
【发布时间】:2012-08-15 21:03:14
【问题描述】:

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

编辑:对不起,如果我不清楚。我想保留一个功能存储库,我可以在其中继续提交补丁,但是可以自动删除具有至少一个较新版本的文档的最旧版本以保持在大小限制内。所以说我可以退回大约 67 个修订版本,因为旧版本已被删除(最好保留提交消息)。

【问题讨论】:

  • 您是否尝试过查找“配额”?
  • 超过大小限制时你想发生什么?存储库将永远处于只读状态?
  • 有趣。我建议您查看服务器上的提交挂钩,种类繁多。不过,您必须做一些手动工作(即自己计算大小,然后拒绝提交)。
  • 我不认为 SVN 是为此而构建的,它并不真正支持对旧版本的操作。您可能可以使用 git 执行类似的操作,与其他 VCS 相比,您可以进行更多的历史编辑。
  • 您认为为什么需要这样做?现在磁盘空间几乎是空闲的!

标签: svn


【解决方案1】:

这样做是对您的存储库的重大手术。在真正的存储库上真正执行此操作之前,请确保您完全了解自己在做什么。

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

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

这样做需要一个转储/恢复周期,这意味着您必须在处理和重建存储库时禁用对存储库的写访问。

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

另请注意,这样做的天真方法将从 0 开始重新编号所有修订,因此在上面的示例中,修订 5000 将在截断后变为修订 4000。如果这会给您带来麻烦,您将不得不做额外的工作。

所以,假设我们要丢失最早的 1000 个修订,基本的工作流程是:

  1. 使您的存储库脱机(或至少使其成为只读)
  2. 运行svnadmin dump [repository path] -r 1000:HEAD > repository.dump。这将创建一个转储文件,其中仅包含从 1000 开始的修订。通过使用--incremental 标志,转储文件中的第一个修订将包含存储库的完整转储,因为它查看了修订1000(不包括所有历史记录)。
  3. 使用svnadmin create 创建一个干净的存储库,并从旧存储库复制 conf 和 hooks 目录。
  4. 运行 svnadmin load [new repository path] < repository.dump 以加载最新修订。
  5. 将旧存储库移开(保留它以备备份)并将新存储库移到原位。

如果您想保留修订号,您必须从某处加载空修订。您可以通过将修订版 1:999 转储到单独的转储文件中,然后使用 svn dumpfilter 删除其中的所有内容,然后加载空修订版,然后加载您想要的修订版来做到这一点。这有点繁琐,但会让你到达那里。

【讨论】:

  • 感谢您在该答案中做出的惊人努力。
【解决方案2】:

没有简单的方法可以做到这一点。您确实需要重建 删除最旧版本的存储库。没有单一的 SVN 命令可以做到这一点。你需要的流程大致是:

  1. 执行 svnadmin 转储(只能在主机上执行)。
  2. 使用 svndumpfilter 过滤掉不需要的修订。
  3. 创建一个新的存储库并使用 svnadmin load 加载到新的存储库中。

link 将为您提供有关 svndumpfilter 的一些信息,这是整个操作的关键部分。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我想处理所有新事务,但删除了旧版本而不丢失任何当前版本的文件。
    • @Pacifika:您需要一个守护进程/cron 作业才能在服务器端执行此类操作。你可以通过“提交挂钩”“门/触发”这个过程。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      你做不到。 与 CVS 相反,subevrsion 不会保留每个修订版的全部源代码 但只是即将到来的修订之间的区别(好一点,但对这个问题并不重要)

      【讨论】:

      • 我不认为 CVS 维护整个源代码(仅差异)。
      【解决方案6】:
      1. 为 SVN 创建 windows 用户帐户
      2. 为所有 NTFS 驱动器启用配额控制(我的电脑 -> 驱动器 -> 属性 -> ...)
      3. 将配额限制设置为您需要的大小(例如 20 Mb)
      4. 配置 SVN 服务器以在您刚刚创建的帐户下运行
      5. 享受吧!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-28
        • 2017-01-13
        • 1970-01-01
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        • 2016-01-16
        • 2010-09-08
        相关资源
        最近更新 更多