Optimization 我可以优化Mercurial克隆吗?

Optimization 我可以优化Mercurial克隆吗?,optimization,mercurial,defragmentation,Optimization,Mercurial,Defragmentation,我的Mercurial克隆速度变得异常缓慢,可能是由于磁盘碎片。有没有办法优化它 最明显的方法是创建一个新克隆,然后将我的MQ、保存的捆绑包、hgrc等复制到新克隆并删除旧克隆。但似乎有人以前遇到过这个问题,并为此进行了扩展?我删除了repo并重新打开,这提高了性能。关闭对repo克隆到的文件夹的实时防病毒监控和碎片整理。您可以做的其他事情不多。如果清单变得特别大,则可能导致性能降低。Mercurial有一种替代的存储库格式——generaldelta——通常会产生更小的清单 您可以使用以下方法

我的Mercurial克隆速度变得异常缓慢,可能是由于磁盘碎片。有没有办法优化它


最明显的方法是创建一个新克隆,然后将我的MQ、保存的捆绑包、hgrc等复制到新克隆并删除旧克隆。但似乎有人以前遇到过这个问题,并为此进行了扩展?

我删除了repo并重新打开,这提高了性能。

关闭对repo克隆到的文件夹的实时防病毒监控和碎片整理。您可以做的其他事情不多。

如果清单变得特别大,则可能导致性能降低。Mercurial有一种替代的存储库格式——generaldelta——通常会产生更小的清单

您可以使用以下方法检查清单的大小:

ls-lh.hg/store/*清单*

要从generaldelta获取最大值,请执行以下操作:

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

  • 执行
    hg--config format.generaldelta=1克隆--pull orig orig.gd

  • 这可能会在清单大小方面带来一些改进,但不会带来全部好处

  • 执行
    hg--config format.generaldelta=1克隆--pull orig.gd orig.gd.gd
  • 克隆的克隆可能会在清单大小方面有更大的改进。这是因为当从一般的Elta回购中提取时,将重新排序以优化清单大小

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


    关于generaldelta online的信息并不多——在它成为默认格式之前,还有很多工作要做,但它对许多项目都很有效。最初的几条谷歌搜索结果包含了一些最初引入时的信息,最近在mercurial dev邮件列表上也有一些讨论。

    从我对mercurial的了解来看,mercurial不应该做任何事情让它在碎片化方面变慢,等等。你有没有试过在你的磁盘上运行一个普通的磁盘碎片整理程序?还有,什么样的操作是慢的,有多慢,等等?hg qref是真正慢的东西。7万次提交的回购协议可能需要50秒。我同意这不是mercurial特有的问题(尽管我认为mercurial访问模式加剧了这一问题),但Mac没有内置碎片整理程序(AFAICT)。+1即使对于约3400次提交的较小回购和约17MB的原始清单大小,两个克隆也将一些hg操作减少到原始时间的三分之一(最终舱单为11MB)。这意味着:您将丢失所有历史记录。这是一个非常罕见且有利的解决方案。Abel:您为什么会丢失所有历史记录?哦,抱歉,我误解了,您的意思是仅保留tip的副本。仍然不确定如何重新克隆您删除的内容。或者您的意思是保持服务器状态,只保留一个新的克隆?即,您的意思是在服务器上删除您的本地克隆ly?这与清除不一样吗?其思想是,当您进行克隆时,它们将在磁盘上以低碎片创建(也就是说,它们将紧挨在一起,这意味着它们将能够快速访问)。但是,当以后添加新文件时,它们将存储在磁盘的不同部分,访问速度会变慢。随着时间的推移,访问速度会变慢。通过重新启动,您可以在磁盘的同一部分中获取所有文件,从而使访问速度更快(与Windows上的碎片整理程序类似)。啊,也许这应该反映在您的回答中)。但是,使用ram驱动器对我的情况没有帮助。