git push error git-receive-pack

时间:2013-04-03 02:19:42

标签: git

我在不同的网络上有两个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

1 个答案:

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