【问题标题】:Mercurial/TortoiseHg responds with "abort: destination does not support push"Mercurial/TortoiseHg 响应“中止:目的地不支持推送”
【发布时间】:2015-04-15 06:06:35
【问题描述】:

我想将存储库从我的计算机推送到远程站点上的存储库,以便同步文件。 TortoiseHg 似乎可以正确识别传出的变更集,但是当我尝试推送更改时,TortoiseHg 在底部的状态栏中以“中止:目的地不支持推送”和“推送到https://myid:ps@mydomain.com 中止,ret 255”作为响应。日志文件包括“(falling back to static-http)”

我已经用谷歌搜索了,但我一无所获。 “中止:目的地不支持推送”在英语中是什么意思?什么不支持推送? “目的地”是什么?是否是 repo 中的配置文件中的设置导致目标不支持推送?是服务器设置的方式吗?

对27967022“您的目的地不支持推送,或推送已禁用”的回复之一 那么如何启用推送呢?

【问题讨论】:

    标签: mercurial push tortoisehg abort


    【解决方案1】:

    如果您在服务器端使用 hgweb,要允许推送到存储库,请添加

    [web]
      allow_push = *
    

    发送到服务器上的.hg/hgrc 或您的hgweb.config。您还可以通过列出特定用户而不是 * 来允许仅推送特定用户。这记录在here

    如果不是这种情况,并且您只是使用 https 服务器将 repo 作为文件提供,您将无法通过 https 推送。在这种情况下,您最可能的选择是通过 ssh 推送,如

    hg push ssh://myid@mydomain.com/path/to/repo
    

    这要求您对服务器具有 ssh 访问权限,并且存储库位于 $HOME/path/to/repo 中。对于绝对路径(如果存储库位于 /path/to/repo 并且不低于 $HOME),推送到 ssh://myid@mydomain.com//path/to/repo(注意双斜杠)。

    如果你总是推送到同一个目的地,你可以将此路径添加到你本地的.hg/hgrc

    [paths]
    default-push = ssh://myid@mydomain.com/path/to/repo
    

    这样您就可以使用hg push

    【讨论】:

    • 我按照指示将 [web] allow_push = * 添加到 .hg/hgrc 到 repo。我收到了同样的信息。
    • 我从您对@Ry4an 的评论中得知,您在服务器端没有 hgweb,allow_push 需要它(普通的 https 服务器不知道解析这些配置文件或其中任何内容的含义)。如果没有服务器端的支持,您将无法通过 https 推送,因此很可能您必须通过 ssh 进行推送(我希望您可以通过 ssh 访问您的服务器)。我在答案中添加了如何做到这一点的说明。
    【解决方案2】:

    您在 mydomain.com 上为您的 mercurial 服务器运行什么?如果是 hgweb,那么@wintermute 有你的答案。如果您使用静态 HTTP(使用 Apache、nginx 等),那么您的服务器设置为克隆或拉取,但不是推送。更有可能您只需要像@wintermute 所说的那样启用推送。

    【讨论】:

    • 我没有在 mydomain.com 上运行 mercurial 服务器。我不明白为什么我需要这样做。 mercurial 不只是将一个 repo 与另一个 repo 进行比较吗?我应该补充一点,我不控制服务器——网络托管拥有它。
    • 您说您只想比较两个存储库,但您使用的是push 命令,它将新数据推送到存储库中。如果您想比较它们,我们可以帮助您做到这一点,但如果您想推送,则需要在那里运行服务器。
    • "如果你想推送,你需要在那里运行一个服务器。"这解释了我的问题。我假设 mercurial 在 http 上工作。它没有。感谢 Wintermute 和 Ry4an 的回复。
    • 它确实可以通过 HTTP 工作,但 HTTP 是一种协议。您使用的 HTTP 服务器提供磁盘上文件的只读视图,因此当 Mercurial 与您的 Web 服务器进行 HTTP 通信时,您只能执行读取操作。如果您将 mercurial 作为服务器进程运行,而不是由您的仅静态文件视图 Web 服务器代理或代理,那么您就有了读/写的存在。或者,如果您不想要一个新的服务器进程,它可以通过 ssh 进行读/写,但这不是写存在的要求——HTTP 可以做到,但它必须是 HTTP 到为读写而构建的服务器操作,而您使用的不是。
    猜你喜欢
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多