我已经阅读了大约八五次这个答案了,但有些事情我没有正确理解:
git-upload-pack: command not found, how to fix this correctly
当我尝试在服务器上克隆存储库时,我得到以下内容:
bash: git-upload-pack: command not found
但是当我通过克隆-u /usr/local/bin/git-upload-pack
选项进行克隆时,一切正常。
我想这是有道理的,因为那是我服务器上git-upload-pack的位置。
最佳答案表明我的服务器上的.bashrc文件需要更新以反映这一点,因为ssh you@remotemachine echo \$PATH
的结果不会返回/usr/local/bin
。 (它返回/usr/bin:/bin:/usr/sbin:/sbin
)。
但是当我查看我的.bashrc文件时,它包含:
export PATH=/usr/local/bin:$PATH
所以现在我很困惑。
我需要做什么才能避免每次都使用-u /usr/local/bin/git-upload-pack
选项?为什么ssh you@remotemachine echo \$PATH
不会返回/usr/local/bin
?这与登录和非登录shell有关吗?
请帮忙!提前谢谢。
答案 0 :(得分:26)
这与此问题有关:
https://serverfault.com/questions/130834/svnssh-getting-bash-to-load-my-path-over-ssh
在没有进入交互模式的情况下发送命令时,默认情况下Ssh没有加载您的环境。
良好的解决方案是.ssh / environment文件:
> / etc / ssh / sshd_config中的添加:
PermitUserEnvironment yes
然后只需创建.ssh /目录并将环境转储到.ssh / enviroment:
cd ~/
mkdir .ssh
env > .ssh/environment
重启SSH
/etc/init.d/sshd restart
现在,当您从本地计算机执行此操作时:
ssh you@server.com "which git-upload-pack"
你得到了
/usr/local/bin/git-upload-pack
和git clone s工作。
答案 1 :(得分:12)
是的,它与登录和非登录shell有关。 .bashrc
文件仅在非登录shell中加载。您可以使用.bash_profile
登录shell。只需在PATH
文件中为.bash_profile
添加相同的修改,您就应该做得很好。
export PATH=/usr/local/bin:$PATH
答案 2 :(得分:3)
我通过登录远程计算机,Ubuntu框并执行sudo apt-get install git
来解决此问题。不确定这是否有点过分,但我立即解决了这个问题。
答案 3 :(得分:2)
我解决此问题的方法
检查远程计算机上git-upload-pack的路径:
ssh yourname@IP-addressORdomain 'which git-upload-pack'
如果它提供路径 - 复制它(没有git-upload-pack
并且尾随斜杠。例如:/usr/bin
,/home/yourname/bin
,/whatever/gituploadpack/path
等。
在登录shell期间检查远程计算机上的PATH:
ssh yourname@IP-addressORdomain 'echo $PATH'
没有这样的路径(/whatever/gituploadpack/path
),不是吗?好!
登录您的远程计算机:
ssh yourname@IP-addressORdomain
打开.bashrc_profile:
nano /home/yourname/.bashrc_profile
如果有的话,找到这些行:
if [ -f ~/.bashrc ]; then
~/.bashrc
fi
...并将其更改为:
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
打开.bashrc:
nano /home/yourname/.bashrc
添加以下4行:
if [ -d "/whatever/gituploadpack/path" ] ; then
PATH="$PATH:/whatever/gituploadpack/path"
fi
export PATH
退出远程计算机:
exit
在登录shell期间检查远程计算机上的PATH:
ssh yourname@IP-addressORdomain 'echo $PATH'
你看到/whatever/gituploadpack/path
了吗?恭喜!
现在注意,您git-upload-pack
不仅解决了git-receive-pack
问题,还解决了/whatever/gituploadpack/path
和其他可执行文件!
答案 4 :(得分:0)
我收到以下错误:
git-credential-osxkeychain died of signal 11
当我做git pull时,我会得到
fatal: https://github.com/.../../info/refs?service=git-upload-pack not found: did you run git update-server-info on the server?
我猜这与我之前在钥匙串中使用的无效github凭据有关。
如果上述任何答案都无济于事。