2012-08-31 46 views
8

因此,例如,如果有一個mercurial repository https://code.google.com/p/potentiallyLarge有沒有一個命令可以讓我在克隆之前找出它的大小?像如何找出mercurial存儲庫的大小?

hg size https://code.google.com/p/potentiallyLarge 

此外,是否有一個命令這樣做的顛覆儲存庫?

+0

我對這個SVN的答案非常感興趣,因爲我正在考慮使用Mercurial(hgsubversion)跨越10000個修訂版來克隆10 + GB SVN回購(由svn list -R確定)互聯網。 –

+0

@TimDelaney在你的情況下,你最好使用'svnsync',然後從本地克隆該存儲庫。只是一個猜測。 –

+0

@ Ry4an我想過這樣做(然後將URL更改爲上游SVN)。缺點是存儲空間翻倍(至少暫時)。另外,我不知道我是否會在傳輸的總數據中獲得任何優勢。我正在爲雙向同步設置本地開發者的Hg回購。確定並測試工作流程,讓每個人都像平常一樣使用Hg(分支,合併等)工作,並防止工作流程意外中斷(不合併到SVN分支......)。這隻會是最初的克隆,這將是一個痛苦 - 我能得到的一切,還是隻是一個子集? –

回答

2

更新:我在下面的答案是錯誤的,但是我將它留在這裏,因爲MG提供了一些很好的信息作爲迴應。看起來正確的答案是「不」。

不是一個偉大的方式,而是一種變通的方式排序。一個hg clone URL其實只是hg init ; hg pull URL和命令hg incoming告訴你,如果你做了一個拉你會得到什麼,所以你可以這樣做:

hg init theproject 
cd theproject 
hg incoming --stat URL_TO_THE_PROJECT 

,並得到你有多少數據可以拉動一個相當不錯的猜測如果你遵循了下來:

hg pull URL_TO_THE_PROJECT 

我不知道有關的hg incoming網絡效率,但我不認爲它下載所有的變更集的一切,儘管我可能是錯了。它提供了一個--bundle選項,該選項可以將任何傳入的下拉文件保存到您稍後可以避免雙重下載的文件中。

+0

傳入的命令**將下載所有內容**,因爲客戶無法說「請給我這個或那個變更集的更新日誌」。 –

+0

爆炸,我希望它可以下載「標題」,但不是真正的「三角洲」。 –

+0

是的,這就是你期望從輸出中得到的結果......但不幸的是,它今天不能這樣做。 –

4

在磁盤上所用的尺寸爲用於進行克隆的帶寬不同。某些託管站點(如Bitbucket)在磁盤上顯示大小,以便在克隆之前知道系統需要多少空間。但我可以看到谷歌代碼沒有,所以它不會幫你在這裏。

善變wire protocol不公開,它可以告訴你一個倉庫有多大的任何命令。當你製作一個普通的克隆時,客戶端並不知道它將接收多少數據,它只是接收一串數據。收到更改日誌後,客戶端知道許多清單和filelogs如何期待,但它不知道尺寸他們

事實上,這是很難的服務器計算克隆將有多少數據使用方法:使用的網絡帶寬小於磁盤空間,因爲使用的壓縮是不同的(bzip2的VS gzip的)。但是,如果您將--uncompressed用於您的克隆(Google代碼不支持),則有一個技巧,請參閱下文。

知道克隆使用多少帶寬的唯一方法是使一個。如果你有一個克隆已經可以使用hg bundle模擬克隆:

$ hg bundle --all my-bundle.hg 

捆的大小會告訴你有在倉庫中有多少數據。

訣竅:如果谷歌代碼支持hg clone --uncompressed,那麼您可以使用它來了解遠程存儲庫的大小!當您使用--uncompressed時,客戶端請求服務器按原樣發送.hg/目錄的內容 - 而不用bzip2重新壓縮它。方便的是,服務器通過告知客戶端存儲庫的大小來啓動流。所以你可以啓動這樣一個克隆,然後在你的客戶端打印出一行告訴你這個repo的大小的時候放棄它(用Control-C)。