【问题标题】:Cloning a Mercurial repository over SSH通过 SSH 克隆 Mercurial 存储库
【发布时间】:2011-05-24 19:56:56
【问题描述】:

我在通过 ssh 克隆我的 mercurial 存储库时遇到了一些困难。

这是我尝试过的:

hg clone ssh://username@username.webfactional.com/path/to/projectname projectname

它给了我这个错误:

remote: bash: hg: command not found
abort: no suitable response from remote hg!

hg 已安装在服务器上。

我试图按照this website 上的说明进行操作。

【问题讨论】:

    标签: mercurial ssh webfaction


    【解决方案1】:

    您可以从终端使用 Sourcetree、TortoiseHg、Mercurial 或任何您喜欢的客户端来克隆 Mercurial 存储库。这些说明向您展示了如何从终端使用 Mercurial 克隆您的存储库。

    1. 从存储库中,单击全局侧边栏中的 + 并选择克隆 开始工作下的此存储库。
    2. 复制克隆命令(SSH 格式或 HTTPS)。 如果您使用的是 SSH 协议,请确保您的公钥位于 Bitbucket 中并加载到您要克隆到的本地系统上。
    3. 在终端窗口中,切换到要克隆存储库的本地目录。
    4. 粘贴您从 Bitbucket 复制的命令,例如:
      CLONE OVER HTTPS:
      $ hg clone https://username@bitbucket.org/teamsinspace/hg-documentation-tests
      CLONE OVER SSH:
      $ hg clone ssh://hg@bitbucket.org/teamsinspace/hg-documentation-tests
      如果克隆成功,您的本地驱动器上会出现一个新的子目录。
      此目录与您克隆的 Bitbucket 存储库同名。
      克隆包含 Mercurial 维护您对源文件所做更改所需的文件和元数据。

    【讨论】:

      【解决方案2】:

      听起来hg 不在您的路径上。 Mercurial 常见问题解答提到了此问题的可能修复方法:FAQ/CommonProblems

      通过在您的客户端计算机上打开 ~/.hgrc(或 Windows 上的 Mercurial.ini)并添加以下内容,将 remotecmd 值添加到您的 Mercurial 配置中:

      [ui]
      remotecmd = /path/to/hg
      

      其中/path/to/hg 是远程服务器上hg 命令的路径。

      如果您的 Mercurial 配置有问题,您可以使用 hg showconfig --debug 命令获取 Mercurial 设置的完整列表以及定义每个配置值的配置文件的路径和行号。

      【讨论】:

      • 我按照这些指示将 remotecmd = ~/bin/hg 添加到我的项目和主文件夹中的 hgrc 文件中,但它似乎没有找到。但是,将 --remotecmd 添加到问题中给出的命令是有效的。我怎样才能得到它,所以我不必每次都输入它
      • 把它放在你的.hgrc配置文件的[ui]部分。请参阅答案中的评论。
      • 尝试在.bashrc 中设置您的路径。您是否使用过 sshd_config 文件中的 PermitUserEnvironment 设置?本文 (serverfault.com/questions/130834/…) 讨论了可能影响您的 PATH 的各种设置和环境变量。
      • remotecmd = /usr/local/bin/hg 是我添加的行,目的是让我的“服务器”使用 mercurial 的 Mac 来处理拉取请求。像魅力一样工作。
      • 我正在做与 CenterOrbit 相同的操作(= HomeBrew 的 hg 位置)。早在 2010 年,@Josh 的问题可能就是使用 ~.应该使用绝对路径 - 无论如何它都指向远程机器。
      【解决方案3】:

      在网络派系上我必须添加:

      export PATH=$PATH:/home/<user>/bin
      

      到 .bashrc 让它工作。 (也遵循了上面的 remotecmd 建议)

      【讨论】:

      • remotecmd 添加到本地.hgrc 修复了路径问题。但是,在我的特定设置中remotecmd 引入了另一个错误:remote: conq: invalid command syntax。只需将 PATH 值添加到 .bashrc(在 webfaction 上)就足够了,并且确实为我解决了任何问题。
      【解决方案4】:

      在服务器上,输入:nano ~/.bashrc 结束编辑文件并添加:

      # User specific aliases and functions
      export PATH=$PATH:$HOME/packages/mercurial
      

      假设~/packages 是安装了mercurial 的文件夹。 编辑后,以source ~/.bashrc 结束,然后重试。

      对我很有帮助的是以下详细的guide to install mercurial on a Bluehost hosting server.

      【讨论】:

        【解决方案5】:

        您需要在主机名后加一个 // // 即:

        hg clone ssh://username@username.webfactional.com//path/to/projectname projectname
        

        【讨论】:

        • 添加 [ui] remotecmd = /path/to/hg 以及使用上面的字符串进行连接
        • 为什么它只适用于我的双 //?这有记录吗?
        • @gavenkoa:因为第一个斜杠不是路径的一部分,而只是主机和路径之间的分隔符,所以用一个斜杠它只是相对于用户主目录的路径。第二个斜杠使其成为绝对路径。
        • hg clone ssh://host://path-to-repo/ ...如果您在 ~.ssh/config 中配置了主机名
        【解决方案6】:

        看起来 mercurial 不在远程服务器上您用户的 PATH 中。

        【讨论】: