2011-07-07 130 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)。 –