2013-04-03 67 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