Svn 限制Subversion存储库的大小

Svn 限制Subversion存储库的大小,svn,Svn,您好,我想通过指定最大大小来限制我的存储库的大小,但是我找不到有关这样做的任何信息。这在技术上可行吗 编辑:对不起,我不清楚。我想保留一个功能性存储库,在那里我可以不断提交补丁,但是文档的最旧版本(至少有一个较新版本)可以自动删除,以保留在sizelimit中。因此,假设我可以返回大约67个修订版本,因为旧版本已被删除(理想情况下保留提交消息)。在预提交挂钩中,如果存储库超过限制,您可以“中止”事务。没有简单的方法可以做到这一点。您确实需要重新构建存储库,删除最旧的修订。没有单个SVN命令可用于

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


编辑:对不起,我不清楚。我想保留一个功能性存储库,在那里我可以不断提交补丁,但是文档的最旧版本(至少有一个较新版本)可以自动删除,以保留在sizelimit中。因此,假设我可以返回大约67个修订版本,因为旧版本已被删除(理想情况下保留提交消息)。

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

没有简单的方法可以做到这一点。您确实需要重新构建存储库,删除最旧的修订。没有单个SVN命令可用于执行此操作。您需要的流程大致如下:

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

    反思:svndumpfilter提供了对要包括或排除哪些文件/路径的控制,但我不确定它是否提供了对修订的细粒度控制…

    您不能这样做。 与CVS相反,subevrsion不保留每个修订的全部源
    但是即将发布的版本之间只有一个区别(稍微聪明一点,但对这个问题来说并不重要)

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

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

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

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

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

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

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

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

  • 使存储库脱机(或至少使其只读)
  • 运行
    svnadmin dump[repository path]-r 1000:HEAD>repository.dump
    。这将创建一个转储文件,其中仅包含1000以后的修订。通过使用
    --incremental
    标志not,转储文件中的第一个版本将包含存储库的完整转储,因为它查看的是版本1000(不包括所有历史记录)
  • 使用
    svnadmin Create
    创建一个干净的存储库,并从旧存储库复制conf&hooks目录
  • 运行
    svnadmin load[new repository path]
    以加载最新修订
  • 将旧存储库移开(保留以备备份),并将新存储库移入原位
  • 如果要保留修订号,必须从某处加载空修订。您可以通过将修订版1:999转储到单独的转储文件中,然后使用svn dumpfilter清除其中的所有内容,然后加载空修订版,然后加载所需的修订版。这有点烦躁,但会让你达到目的

  • 为SVN创建windows用户帐户
  • 为所有NTFS驱动器启用配额控制(我的计算机->驱动器->属性->…)
  • 设置所需大小的配额限制(例如,20 Mb)
  • 将SVN服务器配置为在您刚刚创建的帐户下运行
  • 享受吧
    您是否已尝试查找“配额”?当超出大小限制时,您希望发生什么情况?存储库将永远成为只读的?很有趣。我建议您研究服务器上的提交钩子,各种各样的钩子。不过,您必须对它进行一些手动操作(即,自己计算大小,并拒绝提交)。我认为SVN不是为此而构建的,它实际上不支持对旧版本的操作。你可能可以用
    git
    做类似的事情,这可以让你比其他风投做更多的历史编辑。你为什么认为你需要这样做?现在磁盘空间几乎是免费的!“我想处理所有新事务,但删除了旧版本,而不会丢失任何当前版本的文件。@Pacifika:您需要一个守护进程/cron作业来在服务器端执行此类操作。”。不过,您可以通过“提交挂钩”来“门/触发”这个过程。我认为CVS也不会维护整个源代码(只有差异)。感谢您在这个答案中做出的惊人努力。