Mercurial推送,中止:授权失败

Posted

技术标签:

【中文标题】Mercurial推送,中止:授权失败【英文标题】:Mercurial push, abort: authorization failed 【发布时间】:2010-10-31 02:40:07 【问题描述】:

我在推送到 mercurial 存储库时遇到问题:

$ hg push
pushing to https://user:***@hg.domain.com/X_repo
searching for changes
abort: authorization failed

可以通过网络浏览器访问相同的 URL(具有相同的凭据)。另外,我在没有将 usr+pass 嵌入 URL 的情况下进行了尝试。

HTTPS 配置正确,我尝试了 Basic 和 Digest auth -- 没有运气。

拉(通过 HTTP)工作正常。

我正在使用 hgwebdir 为我的 repo 提供服务。

我还应该检查什么?

我发现了这个:http://code.google.com/p/support/issues/detail?id=2580 就我而言,这不是随机的,它每次都会发生。

我的虚拟主机配置的相关部分:

  WSGIScriptAlias  /  /home/(...)/hgwebdir.wsgi

  <Directory /home/(...)>
    AuthType Basic
    AuthUserFile /(...)/basic-password
    AuthName (...)
    Require valid-user

    Order deny,allow
    Allow from all
  </Directory>

$ hg -v
Mercurial Distributed SCM (version 1.0.2)

奇怪的是,hg 传出工作正常:

$ hg outgoing
comparing with https://hg.domain.com/X_repo
http authorization required
realm: ...
user: ...
password: 
searching for changes
changeset:   64:...
tag:         tip
user:        ...
date:        ...
summary:     ...

【问题讨论】:

【参考方案1】:

奇怪的是,您可以运行 hg outgoing 而不是 hg push,因为我的理解是它们都以相同的方式进行身份验证。

很遗憾,我不是 hgweb 专家。请发送邮件至Mercurial list (mercurial@mercurial-scm.org) 和/或通过 IRC 在线 (#mercurialirc.freenode.net)。那里会有更多的人来帮助你。 IRC 特别好,因为这些东西更容易交互式调试。

【讨论】:

感谢您的建议。实际上我已经尝试过 IRC —— 没有运气:/ 我会尝试使用邮件列表。【参考方案2】:

问题原来是 repo dir 权限。 chown www-data 解决了...

【讨论】:

别忘了你的 .hg/hgrc 的 [web] 部分也需要 allow_push $ sudo chown -R wwwrun:www /srv/www/htdocs/hg/reposfrom mercurial-scm.org/wiki/HgWebDirStepByStep 第 7 节,适合那些不太擅长 linux 的人。 对于使用 Ubuntu 的用户:sudo chown -R www-data:www-data /var/hg/repos 即使我把船主放到 'www-data' 我仍然有问题:密码:发送 [=================== ================================================== ==========>] 6/6 01终止:授权失败 要检查系统上的 apache 用户,请查看 /etc/passwd【参考方案3】:

以防万一它可能对某人有所帮助-我出于未知原因遇到此错误,所有权限都正常,只需重新启动 apache 即可解决。

【讨论】:

【参考方案4】:

如果有人想让它在本地机器上运行,那么 将此添加到服务器 REPO/.hg/hgrc 即可完成工作:

[web]
allow_push = *
push_ssl = false

如this site 所述。

【讨论】:

我已经测试了 allow_push = * 或 仍然给我验证失败【参考方案5】:

对于那些使用 TortoiseHg 推送到 Web 服务器的用户(另一台 PC 上的另一个未经授权的用户):

在 TortoiseHg 中:File - Settings - (Either globally or just for the current repository - tabs) 然后是 Server 设置。 网络服务器

Push Requires SSL - No
Allow Push - *

这通过 UI 执行与上面lukmdo 的答案相同的操作(编辑 hgrc 文件)。

【讨论】:

【参考方案6】:

这发生在我更改我的 bitbucket 密码后,然后虽然我使用 SourceTree 管理我的密码并且我在全球范围内更改了它,但是一个 repo 将我的旧密码硬编码在 REPO/.hg/hgrc 中更改了线路并且一切正常

【讨论】:

【参考方案7】:

我的问题有点不同。密码更改触发了它......我有一个repo/.hgrc和一个repo/.hg/hgrc。不知道为什么,但这些是相互矛盾的。

作为记录,我发现的最简洁的方法是保留一个全局配置文件(在 Windows C:\Users\&lt;user&gt;\mercurial.ini 或 Linux /home/&lt;user&gt;/.hgrc 上),其中包含适用于所有存储库(配置文件、插件/扩展、存储库)的所有配置等),然后每个回购,只需使用类似的东西:

[paths]  
default = https://path/to/remote/repo

# any other repo-specific config

为什么我有另一个特定于 repo 的 mercurial 配置文件,我不知道 - 现在一切都已清理并运行良好。

【讨论】:

我遇到了同样的问题:P【参考方案8】:

我的解决方案! 如果您使用的是 Windows 操作系统,则需要编辑文件夹属性。读/写权限。

非常重要!! 不要忘记关闭网络服务器,编辑文件夹属性并再次打开网络服务器 tortoiseHG

【讨论】:

以上是关于Mercurial推送,中止:授权失败的主要内容,如果未能解决你的问题,请参考以下文章

如何中止mercurial中的合并?

mercurial 合并中止 3 个头

Mercurial https 克隆:“中止:错误:(...)错误的版本号”

Mercurial hg 克隆错误 - “中止:错误:名称或服务未知”

Mercurial hg子存储库问题 - “中止:未知修订版”

Mercurial更新没有要求合并和覆盖工作目录