23

我已经阅读了这个答案大约八五次,但有些东西我没有正确理解:

git-upload-pack:找不到命令,如何正确解决此问题

当我尝试在我的服务器上克隆存储库时,我得到以下信息:

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?这与登录和非登录外壳有关吗?

请帮忙!提前致谢。

4

5 回答 5

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 会工作。

于 2012-06-28T14:59:49.880 回答
12

是的,它与登录和非登录外壳有关。该.bashrc文件仅在非登录 shell 中加载。您可以.bash_profile用于登录外壳。只需PATH.bash_profile文件中添加相同的修改,就可以了。

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

您可能会发现这是一篇关于 .bashrc 和 .bash_profile 以及登录和非登录 shell 之间区别的有趣文章。

于 2012-06-20T21:31:23.087 回答
6

在我的案例中,我通过登录远程机器、Ubuntu 机器并执行sudo apt-get install git. 不确定这是否矫枉过正,但立即为我解决了问题。

于 2014-08-21T07:36:52.297 回答
2

我对这个问题的解决方案

  1. 检查远程机器上 git-upload-pack 的路径:

    ssh yourname@IP-addressORdomain 'which git-upload-pack'
    

如果它给出了路径 - 复制它(不带git-upload-pack斜杠和斜杠。例如:、、、/usr/bin/home/yourname/bin/whatever/gituploadpack/path

  1. 在登录 shell 期间检查远程计算机上的 PATH:

    ssh yourname@IP-addressORdomain 'echo $PATH'
    

没有这样的路径(/whatever/gituploadpack/path),不是吗?好的!

  1. 登录到您的远程机器:

    ssh yourname@IP-addressORdomain
    
  2. 打开 .bashrc_profile:

    nano /home/yourname/.bashrc_profile
    
  3. 找到这些行(如果有):

    if [ -f ~/.bashrc ]; then
         ~/.bashrc
    fi
    

...并将它们更改为:

    if [ -f ~/.bashrc ]; then
        source ~/.bashrc
    fi
  1. 打开.bashrc:

    nano /home/yourname/.bashrc
    
  2. 添加这 4 行:

    if [ -d "/whatever/gituploadpack/path" ] ; then
      PATH="$PATH:/whatever/gituploadpack/path"
    fi
    export PATH
    
  3. 退出远程机器:

    exit
    
  4. 在登录 shell 期间检查远程计算机上的 PATH:

    ssh yourname@IP-addressORdomain 'echo $PATH'
    

你看到了/whatever/gituploadpack/path吗?恭喜!

请注意,现在您不仅解决了git-upload-pack问题,还解决git-receive-pack了您的/whatever/gituploadpack/path!

于 2014-08-15T13:19:01.733 回答
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 凭据有关。

  • 使用命令空间打开钥匙串访问工具
  • 在钥匙串访问工具中搜索github
  • 删除所有与 github 相关的条目(因为我不再需要它)
  • 按照设置 git 密码缓存部分再次设置 git
  • 有效

以防上述任何答案都无济于事。

于 2013-03-24T01:53:28.370 回答