私はgitを使用して、プロジェクトの2つのコピーを同期させています。1つはローカルボックス、もう1つはテストサーバーです。これは、sshを使用してリモート開発サーバーにログオンするときに発生する問題です。
git clone [email protected]:/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 '[email protected]:/home/chris/myproject' failed.
(ファイル名は有罪を保護するために変更されました...!)
両方のボックスでSolaris 10 AMDが実行されます。 --upload-pack=$(which git-upload-pack)
コマンドを追加した場合、いくつかの掘り下げを行いました(そして、RTFMソリューションに従って$PATH
が 'git-upload-pack'へのパスを含むことを証明します)しかし、これは本当に迷惑で、「git Push」は動作しません。--unpack=
オプションがないと思うからです。
ちなみに、すべてのgitコマンドはローカルボックスから正常に動作します。これは、/usr/local/bin
の同じNFSマウントにインストールされた同じバージョンのソフトウェア(1.5.4.2)です。
誰でも助けることができますか?
git-upload-pack
が非ログインシェルからのパス上にあることを確認してください。 (私のマシンでは/usr/bin
にあります)。
非ログインシェルからリモートマシン上のパスがどのように見えるかを確認するには、これを試してください:
ssh you@remotemachine echo \$PATH
(これは、Bash、Zsh、tcsh、およびおそらく他のシェルでも機能します。)
返されるパスにgit-upload-pack
があるディレクトリが含まれていない場合、.bashrc
(Bashの場合)、.zshenv
(Zshの場合)、.cshrc
(tcshの場合)またはシェルの同等物。
リモートマシンでこの変更を行う必要があります。
リモートPATH
に追加する必要があるパスが不明な場合は、次のコマンドで見つけることができます(リモートマシンでこれを実行する必要があります)。
which 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
Brian's answer に基づいて、クローン作成後に次のコマンドを実行することにより、アップロードパックパスを永続的に設定できます。これにより、後続のプル/フェッチ要求で--upload-pack
が不要になります。同様に、receive-packを設定すると、Push要求で--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にユーザーパスがコンパイルされているため、/ usr/local/git/{bin、lib、...}としてgitをインストールする私たちは、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
動作しないでしょう。
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バージョンでこれらのエラーが発生しました。
ここや他の場所で見つけることができるすべてのアドバイスに従った後、私は結局:
cygwinバージョンのGitのインストール
サーバー(Cygwin SSHDを使用したWin XP)では、最終的に修正されました。
私はまだMsysGitバージョンのクライアント側を使用しています
..実際、その同じsshdサーバーからのCygwin GitプルでPOSIXエラーが発生するため、それが唯一の方法です。
私は、Gitのこの側面を使用するにはまだいくつかの作業が必要であると考えています。
ヨハンが何度も指摘したように、必要な.bashrc:
ln -s .bash_profile .bashrc
追加する必要があります
export PATH=/opt/git/bin:$PATH
.bashrcのこの行の前:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
そうしないと、すべてのエクスポートステートメントが実行されません( こちらを参照 )。
WindowsからSSHを使用してGitoliteリポジトリに接続する際に問題が発生しましたが、私の問題はPLINKであることが判明しました。パスワードを要求され続けましたが、ssh gitolite @ [Host]はレポジトリリストを正常に返しました。
環境変数を確認してください:GIT_SSH。 Plinkに設定されている場合、値なしで試して( "set GIT_SSH =")、それが機能するかどうかを確認します。
Zshの場合は、このファイルに〜/ .zshenvを配置する必要があります
たとえば、MacPortsのgit-coreパッケージを使用するOS Xの場合:
$ echo 'export PATH =/opt/local/sbin:/ opt/local/bin:$ PATH'>〜/ .zshenv
git-upload-pack
の場所をリモートgitユーザーの.bashrcファイルに追加します。
私のケースはWin 10でGIT bashを使用しており、標準の場所にGITがありません。代わりに、/ app/local/binの下にgitがあります。 @Garrettが提供するコマンドを使用しましたが、double /で始まるようにパスを変更する必要があります。
git config remote.Origin.uploadpack //path/to/git-upload-pack
git config remote.Origin.receivepack //path/to/git-receive-pack
それ以外の場合、GITはWindows GITパスを前に追加します。