我在不同的网络上有两个git存储库。我一直在他们两个之间进行沟通没有问题,但出于某种原因,今天当我做“git push”时,我收到以下错误:
----------------------------------------------
bash: git-receive-pack: command not found
fatal: The remote end hung up unexpectedly
----------------------------------------------
我用Google搜索并确保“/ usr / local / bin”在我的“$ PATH”中。这是我的git的bin目录的输出:
[pradeep@laptop ]$ls -l /usr/local/git/bin/
total 16760
-rwxr-xr-x 1 root wheel 4329416 Mar 26 20:06 git*
-rwxr-xr-x 1 root wheel 14852 Mar 26 20:06 git-credential-osxkeychain*
-rwxr-xr-x 2 root wheel 162402 Mar 26 20:06 git-cvsserver*
lrwxr-xr-x 1 root wheel 3 Apr 3 11:02 git-receive-pack@ -> git
-rwxr-xr-x 2 root wheel 1830248 Mar 26 20:06 git-shell*
lrwxr-xr-x 1 root wheel 3 Apr 3 11:02 git-upload-archive@ -> git
-rwxr-xr-x 2 root wheel 1893064 Mar 26 20:06 git-upload-pack*
-rwxr-xr-x 1 root wheel 333121 Mar 26 20:06 gitk*
任何想法可能出错?
由于
--------------编辑------------------- 我的远程系统的“.bashrc”中有以下行:
export PATH=$LOCAL/git-1.8/bin/:$PATH
这是远程机器上的输出:
$ls $LOCAL/git-1.8/bin
git git-cvsserver gitk git-receive-pack git-shell git-upload-archive git-upload-pack
当我从我的机器“ssh user @ remote env”到远程机器时,这是输出:
[pradeep@laptop ~]$ssh k00603@k.rics.riken.jp env
SHELL=/bin/bash
SSH_CLIENT=153.133.52.171 52379 22
USER=k00603
MAIL=/var/mail/k00603
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/openssh/bin
PWD=/volume2/home/hp120242/k00603
SHLVL=1
HOME=/home/hp120242/k00603
LOGNAME=k00603
SSH_CONNECTION=153.133.52.171 52379 10.7.160.4 22
LC_CTYPE=en_US.UTF-8
_=/bin/env
bash中缺少git路径。
编辑:以下是我的远程系统主目录中的“.bash_profile”:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:$LOCAL/git-1.8/bin
export PATH
答案 0 :(得分:7)
当你进入一个框并获得提示时,你实际上要经历一个与运行命令时稍微不同的过程。 Shell根据是否是登录shell和/或它是否是交互式会话,有关于配置源的规则。尝试运行:
ssh user@host env
这将打印您的环境,如非交互式登录会话所示。我的猜测是/usr/local/git/bin
不在此场景中的路径上。您可以使用--receive-pack
的{{1}}选项解决此问题:
git push
git push --receive-pack=/path/to/git-receive-pack
是远程计算机上的路径。它告诉git在ssh进入遥控器时在哪里找到另一端。
最好的答案是修复你的shell配置,但这可能会很棘手,具体取决于shell。我主要使用ZSH,并通过设置/path/to/git-receive-pack
来解决这个问题,该问题由ZSH在非交互式shell中提供。我觉得用bash来说事情往往不太清楚。您可能需要修改~/.zshenv
和/或~/.bashrc
。
假设您在远程端安装了一个vanilla Linux(可能就是这种情况),并且它正在运行bash shell,最简单的解决方法是更改~/.bash_profile
。修改.bashrc
,然后添加:
~/.bashrc
export PATH=/path/to/your/installed/git/bin:$PATH
是您在主目录中安装git的位置。我倾向于将本地安装放在/path/to/your/installed/git/bin
中,因此我的看起来像是:
~/.local/bin
你可能只是:
export PATH=$HOME/.local/bin:$PATH
你没有说出位置,所以我不能给你正确的表述。
在大多数系统上,即使向ssh提供命令,也会获取export PATH=$HOME/bin:$PATH
。进行此更改后,请尝试再次运行.bashrc
。您应该在路径变量中看到包含git二进制文件的bin文件夹的位置。然后,您应该能够执行ssh user@host env
之类的操作,并查看类似的内容:
ssh user@host git --version
如果您看到错误,那么您可能没有正确输入路径,或者当您进入机器时没有拾取.bashrc。
示例.profile
git version 1.8.2
自动使用# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
假设您的遥控器名为--receive-pack
,您可以这样做:
origin
您可能还需要修复上传包:
git config --local remote.origin.receivepack \
/path/to/git-receive-pack/on/the/remote