当我的团队使用 Mercurial 存储库中的源代码处理给定项目时,存储库的大小显然在增长。因此,通过网络克隆存储库变得越来越慢。
是否有任何技术可用于修剪较旧的提交或减小 repo 的大小以使克隆操作在慢速网络上更快?
(我们使用 TortoiseHg 作为 Mercurial 客户端,但(我猜)不应该对这个问题的解决方案产生影响。)
当我的团队使用 Mercurial 存储库中的源代码处理给定项目时,存储库的大小显然在增长。因此,通过网络克隆存储库变得越来越慢。
是否有任何技术可用于修剪较旧的提交或减小 repo 的大小以使克隆操作在慢速网络上更快?
(我们使用 TortoiseHg 作为 Mercurial 客户端,但(我猜)不应该对这个问题的解决方案产生影响。)
一种选择是使用convert
扩展将您的存储库分解为一组较小的存储库。
假设您有一个已演变为包含许多项目(文件夹)的存储库。你已经决定如果每个项目(文件夹)都是一个单独的存储库,你会更好。您可以使用
convert
扩展来做到这一点并保留您的变更集历史记录。
您可以使用计算机上远程 repo 的专用克隆作为克隆操作的缓存。所以你不需要每次都通过网络传输整个 repo,而只需要传输不存在的部分。
如果您只需要给定修订版中的文件,而不需要检查历史记录或进行新的提交,那么下载快照会更快。
普通的hgweb
CGI 脚本可以为任何修订提供一个 zip 或 tar 文件。档案是即时生成的。你只需要添加
[web]
allow_archive = gz, zip, bz2
到你的配置文件。然后,您可以在 URL 下找到档案,例如
http://server.com/repo/archive/rev.zip
将修订号替换为您想要更改集散列的分支名称 使用 、 或类似工具下载wget
文件curl
。
仅当历史记录与单个变更集的大小相比非常大时,此策略才会奏效。
如果存储库包含经常更改的大文件,就会出现这种情况。largefiles 扩展在这里可以作为替代:它允许您只下载您签出的修订版所需的文件。这样您就可以避免下载大文件的历史记录并节省大量带宽。
如果您的存储库中有大型二进制文件,有时可能会导致此类问题。对它们的任何更新往往会导致较大的差异,并使大小比正常情况更大幅度地增加。
如果这适用于您,可能值得查看随 Mercurial 2.0 分发的大文件扩展。我没有亲自使用过它,听起来它仍然有一些胭脂边缘,但是如果包含一个lfconvert
将为您转换 repo 的命令。然后你可以试试看它是否克隆得更快。