【问题标题】:Reducing repository size in Mercurial减少 Mercurial 中的存储库大小
【发布时间】:2011-08-06 16:36:40
【问题描述】:

当我的团队使用 Mercurial 存储库中的源代码处理给定项目时,存储库的大小显然正在增长。因此,通过网络克隆存储库变得越来越慢。

是否有任何技术可用于删除较旧的提交或减小存储库的大小以使克隆操作在慢速网络上更快?

(我们使用 TortoiseHg 作为 Mercurial 客户端,但(我猜)不应该对这个问题的解决方案产生影响。)

【问题讨论】:

  • 您多久克隆一次整个存储库,顺便说一句?我不认为克隆是存储库中的主要活动。
  • 克隆整个存储库:mvn release:prepare 对每个版本都执行此操作。 Cloudbees Jenkins 对每个构建都这样做...
  • @Tarlog:恐怕答案并没有过时:Mercurial 存储库仍然只能追加,您不能遗漏旧历史。
  • 最接近的方法是下载像http://selenic.com/hg/archive/stable.zip 这样的快照。它只是一个包含该分支文件的 zip 文件——你当然不能基于这样的文件进行新的提交。但对于持续集成,它可以正常工作。
  • 我可能遗漏了什么……这个 zip 是在每个 Mercurial 存储库中自动生成的吗?

标签: mercurial continuous-integration tortoisehg filesize maven-release-plugin


【解决方案1】:

一个选项是use the convert extension to decompose your repository 到一组较小的存储库。

假设您有一个已演变为包含许多项目(文件夹)的存储库。你已经决定如果每个项目(文件夹)都是一个单独的存储库,你会更好。您可以使用 convert 扩展来做到这一点并保留您的变更集历史记录。

【讨论】:

    【解决方案2】:

    您可以使用计算机上远程存储库的专用克隆作为克隆操作的缓存。所以你不需要每次都通过网络传输整个repo,只需要传输不存在的部分。

    【讨论】:

      【解决方案3】:

      如果您只需要给定修订版中的文件,而无需检查历史记录或进行新的提交,那么下载快照会更快。

      普通的hgweb CGI 脚本can provide a zip or tar file for any revision。档案是即时生成的。你只需要添加

      [web]
      allow_archive = gz, zip, bz2
      

      到您的配置文件。然后,您可以在诸如

      之类的 URL 下找到档案
      http://server.com/repo/archive/rev.zip
      

      将修订号替换为您想要更改集散列的分支名称使用wgetcurl 或类似工具下载文件。

      这种策略只有在历史记录与单个变更集的大小相比非常大时才会奏效。

      如果存储库包含经常更改的大文件,则可能会出现这种情况。 largefiles extension 可以在这里替代:它允许您仅下载您签出的修订所需的文件。这样您就可以避免下载大文件的历史记录并节省大量带宽。

      【讨论】:

        【解决方案4】:

        如果您的存储库中有大型二进制文件,有时可能会导致此类问题。对它们的任何更新往往会导致较大的差异,并使大小比正常情况更大幅度地增加。

        如果这适用于您,可能值得查看随 Mercurial 2.0 分发的 Large-files extension。我没有亲自使用它,听起来它仍然有一些胭脂边缘,但如果包含一个命令lfconvert,它将为你转换回购。然后你可以试试看它是否克隆得更快。

        【讨论】:

          猜你喜欢
          • 2011-01-08
          • 1970-01-01
          • 2016-08-28
          • 2012-09-10
          • 2020-04-23
          • 2020-09-27
          • 1970-01-01
          • 2021-12-02
          相关资源
          最近更新 更多