减小Mercurial存储库的大小

22

在我们的团队中,我们正在处理一个源代码存储在Mercurial版本库中的项目,随着时间的推移,版本库的大小也越来越大。因此,在网络上克隆版本库的速度变得越来越慢。

有没有任何技术可以用于修剪旧提交或减小版本库的大小,以使在慢速网络上进行克隆操作更快?

(我们使用TortoiseHg作为Mercurial客户端,但这(我猜)对解决此问题没有影响。)


1
你通常会克隆整个代码库多久一次?我不认为克隆是代码库上的主要活动。 - Matt Ball
1
克隆整个代码库:mvn release:prepare 用于每次发布都可以实现此操作。Cloudbees Jenkins 可以在每次构建时执行此操作... - Peter Kofler
2
@Tarlog:恐怕答案并不过时:Mercurial存储库仍然是追加方式,您不能省略旧的历史记录。 - Martin Geisler
3
最接近这个需求的方法是下载类似 http://selenic.com/hg/archive/stable.zip 的快照。它只是一个包含该分支文件的zip文件 - 当然,您无法基于此文件进行新提交。但对于持续集成,它可以正常工作。 - Martin Geisler
1
我可能漏掉了什么...这个zip文件是在每个Mercurial存储库中自动生成的吗? - Tarlog
显示剩余7条评论
4个回答

15

6
如果您只需要特定版本的文件,但不需要查看历史记录或进行新提交,则下载快照可能更快。普通的hgweb CGI脚本可以为任何版本提供zip或tar文件。存档是即时生成的。您只需要添加。
[web]
allow_archive = gz, zip, bz2

将此配置添加到您的文件中。然后,您可以在类似以下URL的位置找到存档

http://server.com/repo/archive/rev.zip

用分支名称或变更集哈希值替换修订版本号,然后使用wgetcurl或类似工具下载文件。

当历史记录与单个变更集的大小相比非常大时,这种策略才能够得到回报。

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


6
您可以在计算机上使用专用的远程存储库克隆副本作为克隆操作的缓存。因此,您无需每次传输整个存储库,而只需传输尚未存在的部分即可。

2
有时,如果您的存储库中有大型二进制文件,则可能会导致此类问题。对它们的任何更新往往会导致大量差异,并使大小比正常情况下更急剧地增加。
如果这适用于您,那么值得看一下随着Mercurial 2.0分发的Large-files extension。我个人没有使用过它,听起来它仍然有一些问题,但是如果包括一个lfconvert命令可以为您转换存储库。然后您可以尝试它,看看是否可以更快地克隆。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接