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

Posted

技术标签:

【中文标题】Mercurial hg 克隆错误 - “中止:错误:名称或服务未知”【英文标题】:Mercurial hg clone error - "abort: error: Name or service not known" 【发布时间】:2011-02-28 11:36:07 【问题描述】:

我已经安装了适用于 Fedora Linux 的最新 hg 软件包。但是,hg clone 报错。

hg clone http://localmachine001:8000/ repository

报告:

"abort: error: Name or service not known"

localmachine001 是本地网络中的计算机。我可以从我的 Linux 机器上 ping 它,没有任何问题。我还可以使用相同的 http 地址并浏览现有代码。但是,hg clone 不起作用。

如果我从我的 Macintosh 机器执行相同的命令,我可以轻松地克隆存储库。

一些互联网资源建议编辑.hgrc文件,并为其添加代理:

[http_proxy]
host=proxy:8080

我试过了,没有成功。另外,我假设在这种情况下不需要代理,因为 hg 服务器机器在我的本地网络中。

谁能推荐我该怎么做,或者我该如何追踪问题?

提前谢谢你。

【问题讨论】:

【参考方案1】:

以 root 身份运行 hg 为我解决了这个问题。但还是不知道为什么。

【讨论】:

【参考方案2】:

问题是(可能)您的 http 代理无法:

    解决localmachine 访问您(或localmachine 的)本地 IP,即使它可以将“localmachine”解析为您的正确本地地址。

首先,确保您这边(iptables / NAT / 防火墙)没有阻止代理端口上的出入。 如果你是 root 的话它可以工作,那就是问题 - 从那里向后工作。

还可以想象,您的代理正在破坏来自远程 HG 的响应,足以混淆 Mercurial,但不会混淆您的浏览器。无论哪种情况,如果 HG 在本地 (localhost/lan) 网络上,最好绕过代理。

幸运的是,[http_proxy] 指令支持绕过某些主机名的代理,这对于处理 NAT 同一侧的内容或仅存在于一台机器上的主机(例如通过 /etc/hosts 解析)非常理想.) 这样可以避免每次需要更改行为时都必须编辑 .hgrc 的痛苦。

查看documentation,或简单地将您的 .hgrc 设为如下所示:

[http_proxy]
host=proxy:8080
no=localmachine,192.168.1.123,192.168.1.234,...,...

操作指令当然是no。我不确定在指定主机时是否可以使用通配符(我不使用代理功能,所以无法测试它..并且它没有在文档中指定)。您可以尝试对此进行试验,例如192.168.1.* 让我们知道这是否也有效。

无论如何,对于极度懒惰的人(或非常匆忙的人),上面链接的文档的相关部分:

http_proxy

Used to access web-based Mercurial repositories through a HTTP proxy.

host
    Host name and (optional) port of the proxy server, for example "myproxy:8000".
no
    Optional. Comma-separated list of host names that should bypass the proxy.
passwd
    Optional. Password to authenticate with at the proxy server.
user
    Optional. User name to authenticate with at the proxy server.

【讨论】:

【参考方案3】:

当我的 DNS 名称服务器设置未配置时,这发生在我身上。尝试 ping 远程存储库主机并尝试 ping 一些知名主机,例如google.com。如果它不起作用,请修复您的 DNS 设置。

【讨论】:

【参考方案4】:

错误是因为DNS,添加条目到/etc/resolve.conf

$ cat /etc/resolve.conf
search xyz.com abc.com   --> DOMAINS
nameserver 10.192.160.12 -->DNS1
nameserver 10.193.180.23 -->DNS2

这可以通过名称访问本地机器,因此克隆将成功。

【讨论】:

【参考方案5】:

克隆和 Web 界面使用完全相同的机制,所以很奇怪你可以在 http://localmachine001:8000/ 看到 repo,但你不能从中克隆。

尝试通过 IP 地址访问那台机器怎么样? hg clone http://192.168.0.4:8080 之类的,看看会发生什么?

--debug 有更多详细信息吗?

【讨论】:

@tonfa - 我可以 ping localmachine,我在问题中说过。 请尝试 --debug。还要确保从您的 .hgrc 中删除了代理内容。这不仅仅是你不需要的东西,而是会阻止克隆工作的东西。 感谢 Ry4an 的所有帮助。【参考方案6】:

我遇到了同样的问题,

为了解决这个问题,我刚刚从笔记本电脑上断开了互联网并重新连接

谢谢你快乐编码;)

【讨论】:

以上是关于Mercurial hg 克隆错误 - “中止:错误:名称或服务未知”的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 http 克隆 mercurial (hg) 存储库

将存储库克隆到本地文件系统上的文件夹的 Mercurial hg 克隆语法是啥

Ubuntu系统中安装Mercurial 以支持hg

Mercurial 中止:索引 ... 已损坏

Mercurial:“hg push”到 smb 共享不起作用

Mercurial:使用hg pull --rebase的问题的具体例子