3

hgweb.cgi を使用して、http:// 経由でリポジトリに正常にアクセスできます。

$ hg clone http://mydomain.com/scgi-bin/hgweb.cgi/myrepo

パスワードを使用して mydomain.com に正常に ssh することもできます。

$ 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 のルートは 1 つ上のディレクトリです。)

4

2 に答える 2

4

HTTP は SSH と同じではありません。HTTP は、ステートレスなリクエストベースの転送プロトコルです。SSH は、2 台のマシン間に永続的なステートフル接続を確立するプロトコルです。

HTTP URL はリポジトリへのフル パスのように見えますが、hgweb.cgi スクリプトを実行している Web サーバーを経由し、引数として myrepo を渡します。hgweb.cgi スクリプトは、myrepo リポジトリに対してサーバー上で Mercurial を実行します (サーバー上の構成ファイルから実際の場所を取得します)。コマンド チェーンは次のようになります。

Local Mercurial -> HTTP -> Web Server -> hgweb.cgi > Server Mercurial

2 番目の例で使用している SSH URL は、Mercurial にmydomain.comとしてサーバーにログインするように指示しmyname、 でリポジトリを見つけることができます/public_html/scgi-bin/hgweb.cgi/myrepo。ほとんどの場合、それはレポの場所ではありません。コマンド チェーンは次のようになります。

Local Mercurial -> SSH -> Server file system

サーバー上のリポジトリへの絶対パスを使用するように SSH URL を変更する必要があります。

hg clone ssh://myname@mydomain.com/path/to/myrepo

また、サーバーが Mercurial 実行可能ファイルを見つけられないようです。

于 2012-06-09T23:28:27.080 に答える
0

hg の 'verbose' オプションを使用すると、2 つの問題が明らかになりました。

  1. ssh 経由で呼び出されると、hg は自動的に hg サーバーを実行しようとするため、hgweb.cgi を経由する必要はありません。
  2. (.bash_profile で設定された) hg コマンドのパスは、非対話型 SSH コマンドに使用されませんでした。.bashrc などのどこかに hg へのパスを配置する必要がありました。

すべてを修正すると、次のコマンドが期待どおりに機能しました。

hg clone ssh://myname@mydomain.com/public_html/myrepo
于 2012-06-09T14:35:50.857 に答える