git-upload-pack:リモート Git リポジトリのクローンを作成するときにコマンドが見つかりません

StackOverflow https://stackoverflow.com/questions/225291

  •  03-07-2019
  •  | 
  •  

質問

私は 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 コマンドが正常に動作します。これは同じバージョンのソフトウェア (1.5.4.2) で、同じ NFS マウントにインストールされています。 /usr/local/bin.

誰か助けてくれませんか?

役に立ちましたか?

解決

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

非ログインシェルからリモートマシン上でパスがどのように見えるかを確認するには、これを試してください:

ssh you@remotemachine echo \$PATH

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

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

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

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

どのgit-upload-pack

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

他のヒント

「-u」を使用することもできます;パスを指定するオプション。これは、非対話型セッションで.bashrcが取得されないマシンで役立ちます。たとえば、

git clone -u /home/you/bin/git-upload-pack you@machine:code

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

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

私はこの修正を見つけて(正常に)使用しました。

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

おかげで ポール・ジョンストン.

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

#PermitUserEnvironment no

to

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

動作しません。

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

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

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

ここや他の場所で見つけることができるすべてのアドバイスに従った後、私は終わった:

  

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

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

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

  

..実際には、その唯一の動作方法   私にとっては、POSIXエラーが発生するので   同じからCygwin Gitプル   sshdサーバー

Gitのこの側面では、まだいくつかの作業が必要と思われます。 (ssh + Windowsでのプル/プッシュの容易さ)

ヨハンのように、必要な.bashrcを何度も指摘しました:

ln -s .bash_profile .bashrc

追加する必要があります

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

.bashrcのこの行の前:

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

それ以外の場合、すべてのexportステートメントは実行されません(こちら)をご覧ください。

zshの場合は、このファイルに〜/ .zshenvを配置する必要があります

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

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

WindowsからSSHを使用してGitoliteリポジトリに接続する際に問題が発生しましたが、私の問題はPLINKでした。パスワードを要求され続けましたが、ssh gitolite @ [host]はリポジトリリストを正常に返しました。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top