git-upload-pack:リモート Git リポジトリのクローンを作成するときにコマンドが見つかりません
-
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
の場所を追加します。