代码之家  ›  专栏  ›  技术社区  ›  DarenW

在svn存储库中压缩大型文件

  •  18
  • DarenW  · 技术社区  · 17 年前

    作为本地颠覆沙皇,我向大家解释说,在存储库中只保留源代码和非大型文本文件,而不是大型二进制数据文件。可能是测试中的较小二进制文件。

    不幸的是,我与 !有人可能有一天会不小心提交一个800MB的二进制文件。这会减慢存储库操作的速度。

    上次我检查时,您无法从存储库中删除文件;只是让它不成为最新版本的一部分。存储库会永久保存怪物,以防有人想回忆起该日期或修订号的存储库状态。

    有没有一种方法可以真正删除那个怪物文件,并最终得到一个大小合适的存储库?我试过svnadmin转储/加载,但很痛苦。

    4 回复  |  直到 16 年前
        1
  •  17
  •   Veynom    17 年前

    要从svn存储库中永久删除怪物文件,除了使用svnadmin dump/load之外,没有其他解决方案。 ( SVN Book: dump command )

    为了防止提交大量文件,可以使用钩子脚本。例如,您可以有一个脚本,每当有人试图提交到存储库时,它都会运行“预提交”。该脚本可能会检查文件大小或文件类型,如果提交包含太大或“禁止”类型的文件,则拒绝提交。

    钩子脚本的更典型用途是检查(预提交)提交是否包含日志消息,或(提交后)通过电子邮件发送提交的详细信息,或用新提交的文件更新网站。

    钩子脚本是响应存储库事件而运行的脚本( SVN Book: Create hooks ).

        2
  •  13
  •   opticyclic    13 年前

    关于这一点的一些额外信息可以在博客文章中找到: Subversion Obliterate, the missing feature

    请务必仔细阅读评论,卡尔·福格尔(Karl Fogel)在评论中正确看待了这篇文章:-)

        3
  •  3
  •   Max Cantor    17 年前

    如果你能在它提交后立即抓住它,svnadmin转储/加载技术就不会太痛苦。假设有人在3849修订版中无意中提交了gormundous-raw-image.psd。你可以这样做:

    svnadmin dump /var/repos -r 1:3848 > ~/repos_dump
    

    这将创建一个转储文件,其中包含3848修订版之前的所有内容。此时,您可以使用svnadmin create和svnadmin load来重构存储库,而不会出现违规的提交,但需要注意的是,您在存储库的目录结构中所做的任何更改——钩子、符号链接、权限更改、身份验证文件等——都需要从旧目录复制过来。以下是您可能用于完成操作的bash会话其余部分的示例:

    svnadmin create /var/repos-new
    svnadmin load /var/repos-new < ~/repos_dump
    cp -r /var/repos/conf /var/repos-new
    cp -r /var/repos/hooks /var/repos-new
    mv /var/repos{,-old} && mv /var/repos-new /var/repos
    

    我敢肯定,你的存储库历史记录越多,这会更痛苦,但它确实有效。

        4
  •  1
  •   Bert Huijben    17 年前

    一旦您从HEAD修订版中删除了该文件,它不会降低您的操作速度,因为处理了修订版之间的增量。 (当然,存储库备份必须处理负载)。