首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >git-upload-pack:克隆远程Git存储库时找不到命令

git-upload-pack:克隆远程Git存储库时找不到命令
EN

Stack Overflow用户
提问于 2008-10-22 11:14:13
回答 13查看 133.5K关注 0票数 175

我一直使用git来保持项目的两个副本同步,一个是我的本地机器,另一个是测试服务器。这是当我使用ssh登录到我们的远程开发服务器时出现的问题;

代码语言:javascript
复制
git clone me@me.mydevbox.com:/home/chris/myproject
Initialized empty Git repository in /tmp/myproject/.git/
Password:
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly
fetch-pack from 'me@me.mydevbox.com:/home/chris/myproject' failed.

(文件名已更改,以保护有罪的人...!)

这两种机器都运行Solaris 10 AMD。我已经做了一些挖掘,如果我添加--upload-pack=$(which git-upload-pack)命令有效,(并证明$PATH包含路径到'git-upload-pack‘,根据RTFM解决方案),但这真的很烦人,加上'git push’不起作用,因为我不认为有一个--unpack=选项。

顺便说一下,所有的git命令在我的本地机器上都工作得很好,它是相同版本的软件(1.5.4.2),安装在/usr/local/bin的同一个NFS挂载上。

有人能帮上忙吗?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2008-10-22 11:20:42

确保git-upload-pack位于来自非登录shell的路径上。(在我的机器上,它是/usr/bin)。

要从非登录shell查看您在远程计算机上的路径,请尝试执行以下操作:

代码语言:javascript
复制
ssh you@remotemachine echo \$PATH

(这可以在Bash、Zsh和tcsh中使用,可能还可以在其他shell中使用。)

如果它返回的路径不包括包含git-upload-pack的目录,您需要通过在.bashrc (用于Bash)、.zshenv (用于Zsh)、.cshrc (用于tcsh)或与您的shell等效的文件中设置它来修复它。

您将需要在远程计算机上进行此更改。

如果您不确定需要添加到远程PATH的路径,可以使用以下命令找到它(您需要在远程计算机上运行此命令):

which git-upload-pack

在我打印/usr/bin/git-upload-pack的机器上。因此,在本例中,/usr/bin是您需要确保位于远程非登录shell PATH中的路径。

票数 173
EN

Stack Overflow用户

发布于 2009-10-30 07:50:59

您还可以使用"-u“选项指定路径。在我的.bashrc不是从非交互式会话中获取的机器上,我发现这很有帮助。例如,

代码语言:javascript
复制
git clone -u /home/you/bin/git-upload-pack you@machine:code
票数 67
EN

Stack Overflow用户

发布于 2011-06-28 00:15:22

Brian's answer的基础上,可以在克隆后通过运行以下命令永久设置上传包路径,这样就不再需要在后续的拉/取请求中使用--upload-pack。类似地,设置receive-pack消除了对推送请求使用--receive-pack的需要。

代码语言:javascript
复制
git config remote.origin.uploadpack /path/to/git-upload-pack
git config remote.origin.receivepack /path/to/git-receive-pack

这两个命令相当于将以下行添加到存储库的.git/config中。

代码语言:javascript
复制
[remote "origin"]
    uploadpack = /path/to/git-upload-pack
    receivepack = /path/to/git-receive-pack

经常使用clone -u的用户可能对以下别名感兴趣。myclone应该是不言自明的。myfetch/mypull/mypush可以用于配置没有如上所述进行修改的repos,方法是用git mypush替换git push,等等。

代码语言:javascript
复制
[alias]
    myclone = clone --upload-pack /path/to/git-upload-pack
    myfetch = fetch --upload-pack /path/to/git-upload-pack
    mypull  = pull --upload-pack /path/to/git-upload-pack
    mypush  = push --receive-pack /path/to/git-receive-pack
票数 62
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/225291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档