5

我们的团队使用 Mercurial 已经有一段时间了,一切都很好。我们都有存储库的克隆,并将命名分支推/拉到集中式 Windows 服务器,该服务器位于我们的 LAN 上,通过映射驱动器访问。

问题是我最近开始远程工作,性能显着下降。我通过 VPN 连接到办公室并像往常一样访问共享驱动器,但过去 20-30 秒的推送现在需要 10 多分钟!

我有一个不错的电缆连接(30Mpbs/2Mbps),所以我不希望小的更改需要这么长时间才能推送,但似乎无论我的更改集有多小,都会交换许多 MB(通过在推送期间监控网络适配器) )。即使我只修改了源文件中的一行,情况也是如此。它似乎也取决于存储库的大小,存储库越小越好,但它永远不会“快”。

我不熟悉 Mercurial 推送中涉及的内容,但似乎它需要在主存储库和我的存储库之间来回做很多事情才能最终决定发送什么。

我刚刚完成了 5 个文件的推送,总共添加了不到 5KB 的代码,这是我hg push -b branch --debug --time超过 13 分钟的结果!

这是 VPN 上的“正常”还是我缺少某种关键配置?

C:\inetpub\www\app1>hg push -b mynewbranch --new-branch --debug --time
pushing to X:\app1
query 1; heads
searching for changes
taking initial sample
searching: 2 queries
query 2; still undecided: 4, sample size is: 4
2 total queries
listing keys for "bookmarks"
5 changesets found
list of changesets:
7327fd8a913d019475783693fba7afc790bba11a
967e02cbdddb844b0cf1b67b452ff8e96614daa6
b5c9166ca22e98c499d71c9a0b7da2c36649f9f5
7e30ec219db545ba9309f7b8e8b015cf2a652383
79d028c22d2bc4554092ba5bad8249c7129d3caf
adding changesets
bundling: 1/5 changesets (20.00%)
bundling: 2/5 changesets (40.00%)
bundling: 3/5 changesets (60.00%)
bundling: 4/5 changesets (80.00%)
bundling: 5/5 changesets (100.00%)
bundling: 1/5 manifests (20.00%)
bundling: 2/5 manifests (40.00%)
bundling: 3/5 manifests (60.00%)
bundling: 4/5 manifests (80.00%)
bundling: Core/Module/Desktop/Display/file1.x 1/5 files (20.00%
)
bundling: Core/Module/Desktop/Display/file2.x 2/5 files (40.00%
)
bundling: Core/Module/Individual/Display/file3.x 3/5 files (60.00%
)
bundling: Core/Module/Individual/Forms/file4.x 4/5 files (80.
00%)
bundling: Public/Module/Desktop/file5.js 5/5 files (100.00%)
changesets: 1 chunks
add changeset 7327fd8a913d
changesets: 2 chunks
add changeset 967e02cbdddb
changesets: 3 chunks
add changeset b5c9166ca22e
changesets: 4 chunks
add changeset 7e30ec219db5
changesets: 5 chunks
add changeset 79d028c22d2b
adding manifests
manifests: 1/5 chunks (20.00%)
manifests: 2/5 chunks (40.00%)
manifests: 3/5 chunks (60.00%)
manifests: 4/5 chunks (80.00%)
adding file changes
adding Core/Module/Desktop/Display/file1.x revisions
files: 1/5 chunks (20.00%)
adding Core/Module/Desktop/Display/file2.x revisions
files: 2/5 chunks (40.00%)
adding Core/Module/Desktop/Display/file3.x revisions
files: 3/5 chunks (60.00%)
adding Core/Module/Desktop/Display/file4.x revisions
files: 4/5 chunks (80.00%)
adding Public/Module/Desktop/file5.js revisions
files: 5/5 chunks (100.00%)
added 5 changesets with 5 changes to 5 files (+1 heads)
listing keys for "phases"
try to push obsolete markers to remote
updating the branch cache
checking for updated bookmarks
listing keys for "bookmarks"
time: real 833.334 secs (user 0.577+0.000 sys 0.546+0.000)

C:\inetpub\www\app1>
4

2 回答 2

7

You're using Mercurial in a mode which assumes fast local access to the repository. Over a LAN that can be acceptable, but anything higher latency will produce the effect you're seeing. Latency isn't the only thing - using Mercurial in this mode will transfer files (or at least deltas) over your VPN uncompressed.

I would instead suggest that you get either hgweb.cgi or mercurial-server configured on your central server (that's currently publishing over a shared drive). I'd suggest this even when accessing over the LAN.

More information in general about publishing repositories.

于 2012-09-20T10:24:25.230 回答
2

当您通过 VPN 与映射的网络驱动器通信时,我倾向于怀疑网络延迟会增加。您可以添加--profile到您的hg命令并检查/发布输出吗?

于 2012-09-20T00:56:10.333 回答