通过SSH克隆Mercurial代码库

69

我在尝试通过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。

我试图按照这个网站上的指示操作。

6个回答

105

你需要在主机名后面添加双斜杠,即:

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

添加 [ui] remotecmd = /path/to/hg 并使用上述字符串进行连接。 - rohtakdev
4
为什么只有使用双斜杠//才起作用?这是否有文档记录? - gavenkoa
9
因为第一个斜杠不是路径的一部分,而只是主机和路径之间的分隔符,所以只有一个斜杠时,它只是相对于用户主目录的路径。第二个斜杠则使其成为绝对路径。 - lwho
hg clone ssh://host://path-to-repo/ ... 如果您在 ~.ssh/config 中配置了主机名 - Ryu_hayabusa

36

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

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

[ui]
remotecmd = /path/to/hg

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

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


1
我按照这些指示,在我的项目和家目录中的hgrc文件中添加了remotecmd = ~/bin/hg,但似乎找不到它。在问题中给出的命令中添加--remotecmd可以解决问题。如何才能避免每次都要输入这个命令呢? - Josh
2
尝试在.bashrc中设置您的路径。您是否尝试过在sshd_config文件中使用PermitUserEnvironment设置?本文(http://serverfault.com/questions/130834/svnssh-getting-bash-to-load-my-path-over-ssh)讨论了各种可能影响您的`PATH`的设置和环境变量。 - Richard Cook
1
remotecmd = /usr/local/bin/hg 是我添加的一行代码,让我的 Mac 服务器能够使用 Mercurial 处理拉取请求。效果非常好。 - CenterOrbit
1
我正在做与CenterOrbit(= HomeBrew的hg位置)相同的事情。很可能@Josh在2010年遇到的问题是使用了~。应该使用绝对路径 - 它无论如何都指向远程机器。 - akauppi
对于一次性使用,您也可以在命令行上使用remotecmd选项,而不是在.hgrc文件中永久设置它:hg --config ui.remotecmd=/path/to/hg clone ... - lwho
显示剩余6条评论

4

看起来在远程服务器上您的用户的PATH中没有安装Mercurial。


2
在Webfaction上,我需要添加以下内容:
export PATH=$PATH:/home/<user>/bin

将以下代码添加到.bashrc文件中即可生效。 (也要遵循上面的remotecmd建议)


remotecmd添加到本地.hgrc中可以解决路径问题。然而,在我的特定设置中,remotecmd引入了另一个错误:remote: conq: invalid command syntax。只需将PATH值添加到.bashrc(在Webfaction上)即可真正解决任何问题。 - Paolo

1
您可以使用Sourcetree、TortoiseHg、Mercurial终端或任何您喜欢的客户端来克隆您的Mercurial仓库。这些说明向您展示如何使用Mercurial从终端克隆您的仓库。
  1. 从仓库中,点击全局侧边栏上的“+”,选择“获取工作”下的“克隆这个仓库”。
  2. 复制克隆命令(SSH格式或HTTPS格式)。如果您使用SSH协议,请确保您的公钥在Bitbucket上,并加载到您要克隆的本地系统上。
  3. 从终端窗口切换到您想要克隆存储库的本地目录。
  4. 粘贴从Bitbucket复制的命令,例如:
    HTTPS克隆:
    $ hg clone https://username@bitbucket.org/teamsinspace/hg-documentation-tests
    SSH克隆:
    $ hg clone ssh://hg@bitbucket.org/teamsinspace/hg-documentation-tests
    如果克隆成功,则会在本地驱动器上出现一个新的子目录。
    该目录与您克隆的Bitbucket存储库具有相同的名称。
    克隆包含Mercurial需要维护源文件更改所需的文件和元数据。

0
在服务器上,输入以下命令:nano ~/.bashrc 然后通过添加以下内容来编辑文件:

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

假设~/packages是安装mercurial的文件夹。 编辑后,最后用source ~/.bashrc完成并重试。

对我非常有帮助的是以下详细的在Bluehost托管服务器上安装mercurial的指南。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接