2011-06-30 55 views
7

私のプロジェクトの.hgディレクトリは40MBです。空のリモートリポジトリに私がhg push --verbose --debugを置くと、何百ものMBを送信しています。余分なオーバーヘッドはどこから来ていますか?"hg push"が.hgよりもずっと大きいのはなぜですか?

更新hg bundle -aは35MBのファイルを生成します。ここでは、私が見ているアウトプットを取り除きました。

pushing to https://jace.googlecode.com/hg/ 
using https://jace.googlecode.com/hg/ 
sending between command 
using auth.default.* for authentication 
jace.googlecode.com certificate successfully verified 
sending capabilities command 
using auth.default.* for authentication 
capabilities: branchmap lookup unbundle=HG10UN,HG10UGZ,HG10BZ changegroupsubset 
sending heads command 
using auth.default.* for authentication 
searching for changes 
common changesets up to 71818a195bf5 
sending branchmap command 
[...] 
bundling: <filenames> 
sending unbundle command 
sending xxx bytes 
[...] 
sending: xxx/xxx kb 
+0

「私は数百MBを送信しています。 - どうやってそれを測定しましたか? –

+0

@Joel、出力(上に掲載)は「xxxバイトを送信する」と言っています(xxxは300MB程度です)。 – Gili

答えて

7

これは既知のpythonバグです。 python httpライブラリが動作する方法のために、最初にデータを送信し、サーバーはauthが必要であると応答し、データを再送信します。

最近の水銀(1.9から)では、代わりのhttpライブラリを使用できます。 hgrcに次の行を追加してください:

[ui] 
usehttp2 = true 
+0

非常に興味深い!あなたはバグレポートにリンクしてください。 – Gili

+0

このオプションを有効にする方法を理解できません。 hgrcのどこに入っているのか、Mercurialのどのバージョンでサポートされているのかは不明です。 – Gili

+0

これは1.9でリリースされました。私は実際の設定が間違っていました:ui.usehttp2、私は自分の投稿を明確にします。 – tonfa

1

あなたが押しているリポジトリが圧縮転送をサポートしていない可能性があります。どのようなプロトコルを使用していますか?それがhttpなら、リモートリポジトリへの最初のリクエストを見ることをお勧めします(そのうちの1つはリモートリポジトリが提供する機能を判断することです)。

プッシュするためにファイルURLを使用している場合は、それほど多くはできません。

+0

私はhttpsを使用してGoogle Codeに進んでいます。このラインは私の注目を集めました: "機能:ブランチマップのルックアップアンバンドル= HG10UN、HG10UGZ、HG10BZ changegroupsubset"しかし、私はそれが何を意味するのか分かりません。 – Gili

+0

http://mercurial.selenic.com/wiki/HttpCommandProtocolによると、これは圧縮がサポートされていることを意味します。プッシュすると、実際にリモートリポジトリにマージされたバンドルをプッシュしています。あなたはあなたの完全なリポジトリのバンドルを作り、その大きさを見てみることができますか? –

+0

'hg bundle -a'は35MBのファイルを生成します。更新された質問を参照してください、私はプロトコルネゴシエーションの抜粋を含んでいます。 – Gili

関連する問題