2013-04-03 61 views
4

我在不同的网络上有两个git仓库。我一直在他们两个人之间的沟通没有问题,但由于某种原因,今天,当我在做一个“混帐推”,我收到以下错误:git push error git-receive-pack

---------------------------------------------- 
bash: git-receive-pack: command not found 
fatal: The remote end hung up unexpectedly 
---------------------------------------------- 

我一派,并提出确保“的/ usr/local/bin“在我的”$ PATH“中。这里是我的混帐的bin目录的输出:

[[email protected] ]$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 [email protected] -> 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 [email protected] -> 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用户@远程ENV’从我机器到远程机器:

[[email protected] ~]$ssh [email protected] 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

这是你的$ PATH中的'/ usr/local/git/bin /'吗? – number5

+0

是的。 [pradeep @ laptop] $ echo $ PATH /Library/Frameworks/Python.framework/Versions/2.7/bin:/Library/Frameworks/Python.framework/Versions/Current/bin:/Users/pradeep/softwares/hdf-java /bin/:/Users/pradeep/softwares/ParaView/paraview-bin/bin/:/Users/pradeep/softwares/ParaView/paraview-bin/bin/paraview.app/Contents/MacOS/:/Users/pradeep/code/python_utilities /:在/ usr/bin中:/ bin中:/ usr/sbin目录:/ sbin目录:在/ usr/local/bin目录中:/ opt/X11/bin中:在/ usr /本地/ git的/ bin中:在/ usr/texbin:/用户/ pradeep/bin – jhaprade

+0

你应该检查远程的'PATH',而不是你试图“推送”的机器。我这样说是因为'pradeep @ laptop'看起来不像远程服务器。如果确实如此,请忽略此评论。 – Tuxdude

回答

7

当您ssh到一个盒子,并得到一个提示,你实际上会过程比运行命令时要多。 Shell基于它是否是登录shell和/或它是否是交互式会话,具有关于获取哪些配置的规则。尝试运行:

ssh [email protected] env 

这将打印您的环境,如非交互式登录会话所示。我的猜测是/usr/local/git/bin不在这种情况下的路径。您可以解决此通过使用--receive-pack选项git push

git push --receive-pack=/path/to/git-receive-pack 

/path/to/git-receive-pack远程机上的路径。它告诉git在ssh进入遥控器时在哪里找到另一端。

最好的答案是修复你的shell配置,但这可能会非常棘手,具体取决于shell。我主要使用ZSH,我通过设置一个~/.zshenv来解决这个问题,它由ZSH在非交互式shell中获取。我认为事情往往不太清楚bash。您可能需要编辑您的~/.bashrc和/或您的~/.bash_profile

假设您在远程端安装了vanilla Linux(可能是这种情况),并且它正在运行bash shell,最简单的修复方法是更改​​您的.bashrc。编辑~/.bashrc,并添加:

export PATH=/path/to/your/installed/git/bin:$PATH 

哪里/path/to/your/installed/git/bin是你在你的home目录中安装的git。我倾向于把本地安装在~/.local/bin,所以我的将是这样的:

export PATH=$HOME/.local/bin:$PATH 

你的可能只是:

export PATH=$HOME/bin:$PATH 

你不说的位置,所以我不能给你正确的配方。

在大多数系统上,即使向ssh提供命令,也会获得.bashrc。进行此更改后,请尝试再次运行ssh [email protected] env。你应该在路径变量中看到你保存git二进制文件的bin文件夹的位置。然后,您应该能够做到像ssh [email protected] git --version,看到类似:

git version 1.8.2 

如果你看到一个错误,那么你很可能没有正确键入路径,或.bashrc中没有被拾起,当你ssh进入机器。

样品的.profile

# 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 

您可能需要修正上传以及包装:

git config --local remote.origin.uploadpack \ 
    /path/to/git-upload-pack/on/the/remote 
+0

我已经尝试了你提出的git push的--receive-pack选项,但它不起作用。当我执行你推荐的第一个ssh命令时,我得到了我的git可执行文件存储在PATH列表中的bin文件夹。我感到很惊讶,因为几周前,我的笔记本电脑和远程系统之间的git工作正常。我不明白为什么它应该突然停止工作。 – jhaprade

+0

嗯......如果“--receive-pack”不起作用,那么你要么输错了路径,这是一个断开的链接,或者它只是简单的破碎。在远端运行'git-receive-pack'工作吗?它应该只是打印出帮助信息。 'ssh user @ host'type -f git-receive-pack''的输出是什么?我不确定它为什么会停止工作。它闻起来像是在改变环境中的东西。 'user @ host'是否有权限运行'git-receive-pack'可执行文件? – jszakmeister

+0

嗨,对于迟到的回复感到抱歉。我再次寻找,我确实在“ssh user @ host env”的输出中没有git文件夹的bin目录。但是,我该如何解决它?当你说使用“git push --receive-pack =/path/to/git-receive-pack”时,应该是我本地机器或远程机器上的“git-receive-pack”的路径吗?如果可能的话,你可以举个例子告诉我一下吗? – jhaprade