我一直使用git来保持项目的两个副本同步,一个是我的本地机器,另一个是测试服务器。这是当我使用ssh登录到我们的远程开发服务器时出现的问题;
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挂载上。
有人能帮上忙吗?
发布于 2008-10-22 11:20:42
确保git-upload-pack
位于来自非登录shell的路径上。(在我的机器上,它是/usr/bin
)。
要从非登录shell查看您在远程计算机上的路径,请尝试执行以下操作:
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
中的路径。
发布于 2009-10-30 07:50:59
您还可以使用"-u“选项指定路径。在我的.bashrc不是从非交互式会话中获取的机器上,我发现这很有帮助。例如,
git clone -u /home/you/bin/git-upload-pack you@machine:code
发布于 2011-06-28 00:15:22
在Brian's answer的基础上,可以在克隆后通过运行以下命令永久设置上传包路径,这样就不再需要在后续的拉/取请求中使用--upload-pack
。类似地,设置receive-pack消除了对推送请求使用--receive-pack
的需要。
git config remote.origin.uploadpack /path/to/git-upload-pack
git config remote.origin.receivepack /path/to/git-receive-pack
这两个命令相当于将以下行添加到存储库的.git/config
中。
[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
,等等。
[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
https://stackoverflow.com/questions/225291
复制相似问题