2011-07-07 95 views
8

我的水银克隆已经变得非常慢,大概是由于磁盘碎片造成的。有没有办法优化它?我可以优化Mercurial克隆吗?

制作新克隆,然后将我的MQ,保存的捆绑包,hgrc等复制到新克隆并删除旧克隆的明显方式。但似乎有人可能会遇到这个问题,并做了一个扩展来做到这一点?

+0

从我所知道的Mercurial中,Mercurial应该没有什么能够使它在分裂等方面变得缓慢。您是否试过在磁盘上运行正常的磁盘碎片整理程序?另外,哪种操作速度慢,速度有多慢等? –

+0

hg qref是真的很慢的东西。花700秒的时间提交50秒的回购。我同意这不是一个特定于mercurial的问题(虽然我认为mercurial访问模式会加剧它),但是Mac没有内置的碎片整理程序(AFAICT)。 –

回答

0

我删除了回购和recloned,并提高了性能。

+0

这意味着:你失去了所有的历史。这是很少和有利的解决方案。 – Abel

+0

阿贝尔:你为什么会失去所有的历史? –

+0

哦,对不起,我误解了,以为你的意思只是提示的副本。仍然不知道如何reclone你删除。或者你的意思是保持服务器状态,只是采取新的克隆?也就是说,你的意思是只删除你的本地克隆?与清洗不一样吗? – Abel

-2

关闭实时防病毒监控对repo克隆到的文件夹进行碎片整理。没有什么可以做的。

7

如果清单变得特别大,则可能导致性能下降。 Mercurial有另一种存储库格式 - generaldelta - 通常会导致更小的清单。

可以使用检查清单的大小:

ls -lh .hg/store/*manifest*

从generaldelta获得最大价值:

  1. 安装的Mercurial 2.7.2或更高版本(2.7.2包括修复generaldelta中可能导致更大清单大小的错误 - 但很有可能您不会在早期版本中发现该错误)。

  2. 执行hg --config format.generaldelta=1 clone --pull orig orig.gd

这可能会在清单尺寸有所改善,但不是充分受益。

  1. 执行hg --config format.generaldelta=1 clone --pull orig.gd orig.gd.gd

克隆的克隆可以在清单大小方面提供更大的改进。这是因为从一个generaldelta回购仓库中抽取物品时会重新排序以优化清单尺寸。

作为generaldelta的潜在好处的一个例子,我最近转换了一个~55000 SVN提交(使用hgsubversion)加上~1000 Mercurial提交/合并/移植等的回购。原始回购中的清单是〜 1.4GB。第一个克隆中的清单是〜600MB。克隆克隆的清单是〜30MB。

关于generaldelta online的信息并不多 - 在可以成为默认格式之前还有很多工作要做,但它对于许多项目来说效果很好。前几个Google搜索结果中有一些来自何时推出的信息,最近有一些关于mercurial-dev邮件列表的讨论。

+0

+1即使是较小的~3400次提交的回购和一个小得多〜17MB的原始清单大小,两个克隆也会将一些hg操作减少到原始时间的三分之一(最终清单为11MB)。 –