git-upload-pack: 命令未找到

25

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

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

请帮忙解答,谢谢!


请参阅bash手册的此部分 - kostix
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应该可以工作。


1
我在尝试使用ssh访问我的mac上的git仓库。我必须编辑/etc/ssh/sshd_config并添加"PermitUserEnvironment yes",然后通过系统偏好设置->共享->删除登录重新启动sshd。我不需要创建.ssh/environment文件。 - user674669
重启命令好像有个打字错误。应该是:/etc/init.d/ssh restart? - javydreamercsw

12

谢谢!完全明白- 但对我好像不起作用。我的.bash_profile.bashrc都包含代码export PATH=/usr/local/bin:$PATH,但这似乎没起作用。ssh you@remotemachine echo \$PATH仍然返回/usr/bin:/bin:/usr/sbin:/sbin。可能的原因?(猜想。)
  1. 我在Media Temple服务器上,并且有一个.bash_mt_profile文件。(但我添加了export PATH=/usr/local/bin:$PATH以确保它工作,但好像没用。)
  2. 我已经登录为root。
  3. 我没有使用bash(但当我登录时,它说我可以编辑我的.bash_profile以删除系统消息。
- Chris
@Chris:出于兴趣,你的.bash_profile/.bashrc文件权限是否设置为644,是否属于正确的用户,并且没有可执行位?该文件是被引用而不是被执行,但必须由尝试引用的用户拥有,并且必须具有644(或更高)权限。如果在检查这些后它仍然失败,您可以尝试将路径更改添加到/etc/profile/etc/profile.d/*(取决于您的发行版)。 - Nathan Kleyn
再次感谢。是的,权限为644。我已经重置了它们。但还是不行。我在/etc/profile.d/中添加了一个名为git.sh的文件,并加入代码export PATH=/usr/local/bin:$PATH(这样做是否正确?),但也没有起作用。我只能假设我没有做一些非常明显的事情。 - Chris
是的,那就是正确的代码。我能想到的唯一可能是git.sh文件没有可执行权限,尝试使用chmod +x命令看看是否有所不同?除此之外,听起来MT服务器可能在某个较低的级别上硬编码了PATH变量? - Nathan Kleyn
我遇到了类似的问题,我没有 root 权限。所以对我来说,这个答案比被接受的答案更优秀。 - Darwayne

7

在我的情况下,我通过登录到远程机器(一个Ubuntu盒子)并执行sudo apt-get install git来解决了这个问题。不确定这是否过度杀伤力,但对我来说立即解决了问题。


起初我以为 git-upload-pack 只是客户端环境中缺少的依赖项,但实际上并不缺少。然后这个答案帮助我意识到 "command not found" 错误实际上是指 远程环境(在我的情况下,是连接到局域网的树莓派)没有安装 Git。 - crimson_king

2

我对这个问题的解决方案

  1. Check path for the git-upload-pack on your remote machine:

    ssh yourname@IP-addressORdomain 'which git-upload-pack'
    
如果它给出了一个路径,请复制它(不包括git-upload-pack和尾部斜杠。例如:/usr/bin/home/yourname/bin/whatever/gituploadpack/path等)。
  1. Check your PATH on the remote machine during login shell:

    ssh yourname@IP-addressORdomain 'echo $PATH'
    

这条路径(/whatever/gituploadpack/path)不存在,是吗?很好!

  1. Login to your remote machine:

    ssh yourname@IP-addressORdomain
    
  2. Open .bashrc_profile:

    nano /home/yourname/.bashrc_profile
    
  3. Find these lines if any:

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

...并将它们更改为:

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

    nano /home/yourname/.bashrc
    
  2. Add these 4 lines:

    if [ -d "/whatever/gituploadpack/path" ] ; then
      PATH="$PATH:/whatever/gituploadpack/path"
    fi
    export PATH
    
  3. Exit the remote machine:

    exit
    
  4. Check your PATH on the remote machine during login shell:

    ssh yourname@IP-addressORdomain 'echo $PATH'
    

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

现在你不仅解决了git-upload-pack的问题,还解决了git-receive-pack和其他可执行文件在你的/whatever/gituploadpack/path中的问题!


0
我遇到了以下错误: git-credential-osxkeychain 因信号11而终止 在执行 git pull 操作时,我会得到以下错误信息: fatal: https://github.com/.../../info/refs?service=git-upload-pack 未找到:你是否在服务器上运行了 git update-server-info? 我猜这可能与之前在钥匙串中使用的无效的 GitHub 凭据有关。
  • 使用 Command + Space 组合键打开钥匙串访问工具
  • 在钥匙串访问工具中搜索 github 相关内容
  • 删除所有与 github 相关的条目(因为我不再需要它们)
  • 重新按照设置 git 密码缓存的步骤进行操作 设置 git
  • 问题解决了
如果以上任何答案都无法帮助,请联系我们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接