175

私は git を使用してプロジェクトの 2 つのコピーを同期させています。1 つはローカル ボックス、もう 1 つはテスト サーバーです。これは、ssh を使用してリモート開発サーバーにログオンしたときに発生する問題です。

git clone me@me.mydevbox.com:/home/chris/myproject
Initialized empty Git repository in /tmp/myproject/.git/
Password:
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly
fetch-pack from 'me@me.mydevbox.com:/home/chris/myproject' failed.

(ファイル名は有罪を保護するために変更されています... !)

どちらのボックスも Solaris 10 AMD を実行します。--upload-pack=$(which git-upload-pack)コマンドを追加すると、いくつかの掘り下げを行いました(そして$PATH、RTFMソリューションに従って「git-upload-pack」へのパスが含まれていることを証明します)が、これは本当に面倒で、さらに「git push」は機能しません。--unpack=選択肢 がないと思うからです。

ちなみに、すべての git コマンドは私のローカル ボックスから正常に動作します。これは、同じ NFS マウントにインストールされた同じバージョンのソフトウェア (1.5.4.2)/usr/local/binです。

誰でも助けることができますか?

4

15 に答える 15

173

git-upload-pack非ログイン シェルからのパス上にあることを確認します。(私のマシンでは にあり/usr/binます)。

非ログイン シェルからリモート マシンでパスがどのように見えるかを確認するには、次のようにします。

ssh you@remotemachine echo \$PATH

(これは、Bash、Zsh、および tcsh で動作し、おそらく他のシェルでも動作します。)

返されるパスに が含まれるディレクトリが含まれていない場合は、(Bash の場合)、(Zsh の場合)、(tcsh の場合)、またはシェルの同等のgit-upload-pack場所に設定して修正する必要があります。.bashrc.zshenv.cshrc

この変更は、リモート マシンで行う必要があります。

remote に追加する必要があるパスがわからない場合はPATH、次のコマンドで見つけることができます (これをリモート マシンで実行する必要があります)。

which git-upload-pack

印刷する私のマシンで/usr/bin/git-upload-pack。したがって、この場合/usr/binは、リモートの非ログイン シェルにあることを確認する必要があるパスですPATH

于 2008-10-22T11:20:42.363 に答える
67

「-u」オプションを使用してパスを指定することもできます。これは、非対話型セッションで .bashrc が読み込まれないマシンで役立つことがわかりました。例えば、

git clone -u /home/you/bin/git-upload-pack you@machine:code
于 2009-10-29T23:50:58.860 に答える
62

ブライアンの回答に基づいて、アップロード パック パスは、クローン作成後に次のコマンドを実行することで永続的に設定できます。これにより、--upload-pack後続のプル/フェッチ リクエストが不要になります。--receive-pack同様に、 receive-pack を設定すると、 on push リクエストが不要になります。

git config remote.origin.uploadpack /path/to/git-upload-pack
git config remote.origin.receivepack /path/to/git-receive-pack

これら 2 つのコマンドは、次の行をリポジトリの に追加するのと同じ.git/configです。

[remote "origin"]
    uploadpack = /path/to/git-upload-pack
    receivepack = /path/to/git-receive-pack

の頻繁なユーザーはclone -u、次のエイリアスに関心があるかもしれません。myclone は一目瞭然です。myfetch/mypull/mypush は、上記のように などに置き換えて構成が変更されていないリポジトリで使用できgit pushますgit mypush

[alias]
    myclone = clone --upload-pack /path/to/git-upload-pack
    myfetch = fetch --upload-pack /path/to/git-upload-pack
    mypull  = pull --upload-pack /path/to/git-upload-pack
    mypush  = push --receive-pack /path/to/git-receive-pack
于 2011-06-27T16:15:22.170 に答える
30

私はこの修正を見つけて(成功して)使用しました:

# Fix it with symlinks in /usr/bin
$ cd /usr/bin/
$ sudo ln -s /[path/to/git]/bin/git* .

ポール・ジョンストンに感謝。

于 2009-02-15T01:49:39.597 に答える
12

Mac OS X およびその他の一部の Unix では、セキュリティ上の理由から、少なくともユーザー パスが sshd にコンパイルされているため、git を /usr/local/git/{bin,lib,...} としてインストールすると、git として問題が発生する可能性があります。実行可能ファイルはプリコンパイルされたパスにありません。これをオーバーライドするには、/etc/sshd_config の変更を編集することを好みます。

#PermitUserEnvironment no

PermitUserEnvironment yes

必要に応じて ~/.ssh/environment ファイルを作成します。私の git ユーザーは ~/.ssh/environment ファイルに以下を持っています:

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin

~/.ssh/environment ファイルが読み取られる場合、変数の展開は行われないことに注意してください。

PATH=$PATH:/usr/local/git/bin

動作しないでしょう。

于 2010-02-16T21:33:24.617 に答える
7

Matt の解決策は OS X ではうまくいきませんでしたが、Paul の解決策はうまくいきました。

ポールのリンクからの短いバージョンは次のとおりです。

/usr/local/bin/ssh_session次のテキストで作成:

#!/bin/bash
export SSH_SESSION=1
if [ -z "$SSH_ORIGINAL_COMMAND" ] ; then
    export SSH_LOGIN=1
    exec login -fp "$USER"
else
    export SSH_LOGIN=
    [ -r /etc/profile ] && source /etc/profile
    [ -r ~/.profile ] && source ~/.profile
    eval exec "$SSH_ORIGINAL_COMMAND"
fi

実行する:

chmod +x /usr/local/bin/ssh_session

に次を追加します/etc/sshd_config

ForceCommand /usr/local/bin/ssh_session

于 2009-01-05T12:06:23.487 に答える
7

bash の場合、.bash_profile ではなく .bashrc に入れる必要があります (.bash_profile もログイン シェル専用です)。

于 2009-02-21T17:20:53.557 に答える
5

MsysGit バージョンでこれらのエラーが発生しました。

ここや他の場所で見つけることができるすべてのアドバイスに従った後、最終的には次のようになりました。

Git の Cygwin バージョンのインストール

サーバー(Cygwin SSHDを搭載したWin XP)で、これで最終的に修正されました。

私はまだMsysGitバージョンのクライアント側を使用しています

..実際、同じsshdサーバーからのCygwin GitプルでPOSIXエラーが発生するため、それが機能する唯一の方法です

Git の使用に関しては、まだいくつかの作業が必要であると思われます.. (ssh + Windows でのプル/プッシュの容易さ)

于 2009-03-26T06:56:33.327 に答える
1

Johanが何度も指摘したように、必要な.bashrcは次のとおりです。

ln -s .bash_profile .bashrc

于 2009-03-16T20:42:14.063 に答える
1

追加する必要があります

export PATH=/opt/git/bin:$PATH

.bashrc の次の行の前に:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

そうしないと、すべての export ステートメントが実行されません (こちらを参照)。

于 2011-09-26T17:05:55.000 に答える
0

git-upload-packの場所をリモート git ユーザーの .bashrc ファイルに追加します。

于 2013-03-30T14:17:35.470 に答える
0

Windows から SSH を使用して Gitolite リポジトリに接続する際に問題が発生しましたが、問題は PLINK であることが判明しました。パスワードの入力を繰り返し求められましたが、ssh gitolite@[host] は正常にリポジトリ リストを返しました。

環境変数を確認してください: GIT_SSH. Plink に設定されている場合は、値を指定せずに ("set GIT_SSH=") 試してみて、それが機能するかどうかを確認してください。

于 2011-08-31T05:03:26.980 に答える
0

zsh の場合は、次のファイルに入れる必要があります: ~/.zshenv

たとえば、MacPorts の git-core パッケージを使用する OS X の場合:

$ echo 'export PATH=/opt/local/sbin:/opt/local/bin:$PATH' > ~/.zshenv

于 2009-08-12T23:41:09.370 に答える