我可以通过http://使用hgweb.cgi:
成功访问存储库$ hg clone http://mydomain.com/scgi-bin/hgweb.cgi/myrepo
我也可以使用密码成功ssh到mydomain.com。
$ ssh myname@mydomain.com
myname@mydomain.com's password: xxxxxx
Last login: Sat Jun 9 .....
myname@mydomain.com [~]# ls public_html/scgi-bin
./ ../ hgweb.cgi*, hgweb.config
但是我无法推断出如何通过SSH提供存储库。例如,这不起作用:
$ hg clone ssh://myname@mydomain.com/public_html/scgi-bin/hgweb.cgi/myrepo
myname@mydomain.com's password: xxxxx
remote: stdin: is not a tty
remote: bash: hg: command not found
abort: no suitable response from remote hg!
我的结论是,与http://不同,ssh://不知道如何运行cgi脚本,这是正确的吗?有解决方案吗?
(顺便说一句:这是在共享主机上,http的根目录是public_html /,ssh的根目录是一个目录。)
答案 0 :(得分:4)
HTTP与SSH不同。 HTTP是无状态的基于请求的传输协议。 SSH是一种在两台机器之间建立永久,有状态连接的协议。
您的HTTP URL看起来像是存储库的完整路径,但它通过Web服务器执行hgweb.cgi脚本,并将其作为参数传递给myrepo。 hgweb.cgi脚本在服务器上针对myrepo存储库运行Mercurial(它从服务器上的配置文件中提取实际位置)。命令链如下所示:
Local Mercurial -> HTTP -> Web Server -> hgweb.cgi > Server Mercurial
您在第二个示例中使用的SSH URL告诉Mercurial以mydomain.com
身份登录myname
服务器,它可以在/public_html/scgi-bin/hgweb.cgi/myrepo
找到存储库。最有可能的是,这不是您的回购所在的地方。命令链如下所示:
Local Mercurial -> SSH -> Server file system
您需要更改SSH URL以使用服务器上repo的绝对路径:
hg clone ssh://myname@mydomain.com/path/to/myrepo
看起来服务器也找不到Mercurial可执行文件。
答案 1 :(得分:0)
使用hg的'verbose'选项后,发现了两个问题:
解决所有问题,以下命令按预期工作:
hg clone ssh://myname@mydomain.com/public_html/myrepo