找不到git-upload-pack:命令

时间:2012-06-20 21:25:42

标签: git bash shell command-line

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

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有关吗?

请帮忙!提前谢谢。

5 个答案:

答案 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

您可能会找到this is an interesting article on the difference between .bashrc and .bash_profile, and login and non-login shells.

答案 2 :(得分:3)

我通过登录远程计算机,Ubuntu框并执行sudo apt-get install git来解决此问题。不确定这是否有点过分,但我立即解决了这个问题。

答案 3 :(得分:2)

我解决此问题的方法

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

    ssh yourname@IP-addressORdomain 'which git-upload-pack'
    
  2. 如果它提供路径 - 复制它(没有git-upload-pack并且尾随斜杠。例如:/usr/bin/home/yourname/bin/whatever/gituploadpack/path等。

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

      ssh yourname@IP-addressORdomain 'echo $PATH'
      
    2. 没有这样的路径(/whatever/gituploadpack/path),不是吗?好!

      1. 登录您的远程计算机:

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

        nano /home/yourname/.bashrc_profile
        
      3. 如果有的话,找到这些行:

        if [ -f ~/.bashrc ]; then
             ~/.bashrc
        fi
        
      4. ...并将其更改为:

            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'
          
        5. 你看到/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凭据有关。

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

如果上述任何答案都无济于事。