为什么Mercurial在推送数据之前不进行身份验证?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Mercurial在推送数据之前不进行身份验证?相关的知识,希望对你有一定的参考价值。

我有一个大尺寸的克隆推送到谷歌代码,并且在推送启动后验证对话框需要很长时间才能显示,TortoiseHg推送数据首先验证第二个吗?

答案

更新:这个bug现在是fixed

由durin42编辑:它并没有完全修复。我们很接近,但在重写默认情况下,我还有一些工作要做。我们试图通过转换保持真正的保守态度。 (截至2012年1月的准确状态,观看Mercurial的发布说明以获得进一步更新。)


TL; DR:httplib在这里基本上被破坏了,这导致了这个问题hg。人们正在努力解决这个问题。

这是urllib和httplib工作方式的一个不幸的副作用。 httplib / urllib不会抢先发送授权,这是不幸的。

好消息是,目前正在努力解决这个问题,坏消息是看起来它基本上需要完全重写httplib以使其达到合理的行为。特别是,httplib是半双工的,并且无法查看传入的数据包(以检测早期响应),因此它必须先发送请求才能获得摘要身份验证提示(假设使用摘要身份验证,是最好的选择)。一些服务器实现甚至在发出401 Authorization Required后关闭套接字,这实际上通过引发损坏的管道错误完全破坏了httplib。我提交了针对该问题的解决方法,该问题在hg 1.4中,但它只是一个用户烦恼修复,而不是一个实际的性能解决方案。

另一答案

我希望它将从服务器收集更改集列表,以便它知道哪些本地更改集未出现在服务器上,因此需要进行传输。基本上相当于hg outgoing。只有在确定了要推送的变更集之后才需要编写任何内容(如果没有差异,可能不会写入),因此在实际需要之前不会进行身份验证。

以上是关于为什么Mercurial在推送数据之前不进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

mercurial push / pull问题

在 Mercurial 中回滚多个提交(在推送到公共之前)

我们可以撤消 Mercurial 中的推送更改吗?

hg推送HTTP服务器的凭据

Mercurial bisect 有啥用?

你如何在 Mercurial 上“回滚”最后一次提交?