2010-01-07 48 views
4

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

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

+0

您是否试过查找“配额”? –

+0

超过尺寸限制时你想要发生什么?该存储库将永久保留为只读状态? – fennec

+0

有趣。我建议你看一下服务器上的一些提交钩子。尽管如此,您还是需要做一些手动的工作(即自己计算大小,并拒绝提交)。 –

回答

13

这样做是对你的仓库的大手术。确保在真正存储库中完成此操作之前,您完全了解自己正在执行的操作。

您将无法做你的个人文件后,在做什么,但你可以在整个存储库这样做。你需要做的是切断存储库的历史尾巴。

这意味着,如果你有在你的仓库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创建一个干净的存储库,并将旧的存储库中的复制钩子目录。
  4. 运行svnadmin load [new repository path] < repository.dump加载最近的修订版本。
  5. 将旧版本库移出(保留以备备份),并将新版本库移至其位置。

如果要保留版本号,您必须从某处加载空白版本。您可以通过将修订版1:999转储到单独的转储文件中,然后使用svn dumpfilter从中删除所有内容,然后加载空白修订版,然后加载所需的修订版。这有点费劲,但会让你到那里。 ( - >驱动器 - >属性 - > ...我的电脑)

  • 设置配额限制到你需要的大小(前

  • +0

    谢谢你在答案中的惊人努力。 – svandragt

    1

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

    +0

    我喜欢处理所有新的交易,但删除了旧版本,而不会丢失任何当前版本的文件。 – svandragt

    +0

    @Pacifika:你需要一个守护进程/ cron作业来在服务器端执行这种操作。尽管你可以通过“提交钩子”来“关闭/触发”这个过程。 – jldupont

    +0

    ...为什么没有评论的投票? – jldupont

    1

    有没有简单的方法来做到这一点。你真的需要重建存储库删除最旧的修订版本。没有一个SVN命令可以做到这一点。你所需要的过程大致是:

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

    这个link会给你一些关于svndumpfilter的信息,这是整个操作的关键部分。

    反思:过滤流给控制哪些文件/路径包含或排除的,但我不能确定它给出了修订的细粒度控制...

    0

    你不能做到这一点。 相反CVS,subevrsion不保留每修改整个源 但只有即将到来的版本之间的差异(也有点聪明但是对于这个问题并不重要)

    +1

    我不认为CVS维护整个资源(只有差异)。 – Tarydon

    1

    由于SVN所有版本都基于的diff之前发生的事情,没有办法“清理”旧版本。如果您出于某种原因确实需要这样做,那么您必须每隔一段时间都要进行导出并将其重新导入到新的存储库中。

    0
    1. 为SVN
    2. 启用所有的NTFS驱动器配额管理创建Windows用户帐户,20 Mb)
    3. 配置SVN服务器在您刚刚创建的帐户下运行
    4. 享受!