我有一个 Mercurial 存储库,如果我在浏览器中导航到它,我可以看到它,但是当我尝试进行推送时,我的默认路径设置为我在浏览器中访问的相同 URL,我得到这个:
abort: HTTP Error 404: Not Found
我推送的 URL 是否应该以某种方式有所不同?
我有一个 Mercurial 存储库,如果我在浏览器中导航到它,我可以看到它,但是当我尝试进行推送时,我的默认路径设置为我在浏览器中访问的相同 URL,我得到这个:
abort: HTTP Error 404: Not Found
我推送的 URL 是否应该以某种方式有所不同?
我们突然开始在我们的主 Mercurial 存储库上遇到此错误,该存储库托管在 Windows 2008 上的 IIS 下。 当您的存储库有太多 head时,Mercurial POST 查询字符串的长度超过 IIS 选择处理的时间。
您可以通过查看 IIS 日志中失败请求的子状态代码来判断(通常是正常 HTTP 状态代码后面的数字)。在这种情况下,IIS 返回子状态 15,这意味着查询字符串太长。不要忘记检查您的子状态代码!
要解决此问题,您需要增加 IIS 的最大查询字符串长度:
# Get the current query string size limit
c:\windows\system32\inetsrv\appcmd list config /section:requestFiltering -text:requestLimits.maxQueryString
# Set the new query string size limit
c:\windows\system32\inetsrv\appcmd set config /section:requestFiltering /requestLimits.maxQueryString:<NEW SIZE>
“内容太大”是我所拥有的。转到 IIS 日志并查找“404 13”。
要修复它,在 IIS 管理器下,转到“请求过滤”选项,然后选择“标题”选项卡。
然后转到右侧的“编辑功能设置”。然后为“最大允许内容(字节)”字段选择一个非常大的数字。
这解决了我的问题。
是不是和这个配置类似,hgweb.config
需要正确配置的地方:
/ = /home/my_username/hg/**
(最后有两颗星)
对于https,你需要一个正确的.hgrc
文件,否则你也会得到404错误。
请参阅.hg/hgrc
文件手册页。
[ui]
username = my.address@myco.com
password = mypassword
schemes = https
[paths]
default = https://myURL.kilnhg.com/Repo/Repositories/Groups/myrepo
我遇到了同样的问题,它最终成为 CGI 处理程序允许的动词。我将它限制为 GET、POST 和 HEAD,但最终将其更改为允许所有,现在它工作正常。
我在尝试推送大量变更集时收到此错误,其中一个特别大的变更集包含许多二进制文件(网站上的 jpg 更新)。[在源代码控制下的 jpg,在与源代码相同的存储库中可能不是最好的方法,但这不是重点。]
在这种情况下,如果您无权访问 IIS 配置,解决方法是一次推送更少的变更集。在 TortoiseHg 中,使用 Outgoing 功能,右键单击要推送的子集的顶部变更集,然后选择 Push To Here。重复。