当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《克隆远程Git仓库时找不到git-upload-pack:命令》经验,为你挑选了8个好方法。

我一直在使用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包含根据RTFM解决方案'git-upload-pack'的路径)但这真的很烦人,加上'git push'不起作用,因为我认为没有--unpack=选择.

顺便说一下,所有的git命令都可以在我的本地方框中正常工作,它与安装在同一个NFS挂载上的软件(1.5.4.2)版本相同/usr/local/bin.

有人可以帮忙吗?



1> Matt Curtis..:

确保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.


致力于OSX Leopard
@ranReloaded:当你说"没有打印git路径"时,你是说ssh显示了很多东西但不是git所在的路径?如果是这样,那么你就会遇到与OP相同的问题,并且使用符号链接只是一个绑带.`ssh .. echo\$ PATH"`命令将显示远程计算机上的路径,这可能与您的登录路径不同,但这是正确使其正常工作的关键所在,您可以执行此操作通过设置PATH将git包含在远程机器上的`.bashrc`中.根据联机帮助页,只有交互式登录才能读取.profile` /`.bash_profile`.
如果我在我的机器上运行命令,路径是正确的,但如果我以相反的方式运行它,则错误.(从远程机器回到我的)编辑我的本地.bashrc修复它.谢谢

2> Brian Hawkin..:

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

git clone -u /home/you/bin/git-upload-pack you@machine:code


感谢那.我真的不想改变〜/ .bashrc文件.
需要注意的是:[这里](http://stackoverflow.com/questions/820517/bashrc-at-ssh-login)是关于如何使.bashrc在ssh会话上获取的说明.

3> Garrett..:

基于Brian的回答,可以通过在克隆之后运行以下命令来永久地设置上载包路径,这消除了--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

这两个命令相当于将以下行添加到repo中.git/config.

[remote "origin"]
    uploadpack = /path/to/git-upload-pack
    receivepack = /path/to/git-receive-pack

频繁的用户clone -u可能对以下别名感兴趣.myclone应该是不言自明的.myfetch/mypull/mypush可以在其回购配置为通过替换上述没有被修改被用于git pushgit mypush,等等.

[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



4> Andy..:

我发现并使用(成功)此修复程序:

# Fix it with symlinks in /usr/bin
$ cd /usr/bin/
$ sudo ln -s /[path/to/git]/bin/git* .

感谢Paul Johnston.


在OSX上为我工作,他通过macports安装了git

5> 小智..:

出于安全原因,Mac OS X和其他一些Unix至少将用户路径编译成sshd,因此我们这些将git安装为/ usr/local/git/{bin,lib,...}的人会因为git而遇到麻烦可执行文件不在预编译路径中.要覆盖它,我更喜欢编辑我的/ etc/sshd_config更改:

#PermitUserEnvironment no

PermitUserEnvironment yes

然后根据需要创建〜/ .ssh/environment文件.我的git用户在他们的〜/ .ssh/environment文件中有以下内容:

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin

注意读取〜/ .ssh/environment文件时不会发生变量扩展:

PATH=$PATH:/usr/local/git/bin

不管用.



6> 小智..:

对于bash,需要将其放入.bashrc而不是.bash_profile(.bash_profile也仅用于登录shell).



7> Skeletron..:

Matt的解决方案在OS X上对我不起作用,但Paul的确如此.

保罗链接的简短版本是:

/usr/local/bin/ssh_session使用以下文本创建:

#!/bin/bash
export SSH_SESSION=1
if [ -z "$SSH_ORIGINAL_COMMAND" ] ; then
    export SSH_LOGIN=1
    exec login -fp "$USER"
else
    export SSH_LOGIN=
    [ -r /etc/profile ] && source /etc/profile
    [ -r ~/.profile ] && source ~/.profile
    eval exec "$SSH_ORIGINAL_COMMAND"
fi

执行:

chmod +x /usr/local/bin/ssh_session

将以下内容添加到/etc/sshd_config:

ForceCommand/usr/local/bin/ssh_session



8> Ric Tokyo..:

我在MsysGit版本中遇到了这些错误.

按照我在这里和其他地方找到的所有建议后,我最终:

安装Cygwin版本的Git

在服务器上(Win XP与Cygwin SSHD),这最终解决了它.

我仍然使用MsysGit版本的客户端

..实际上,这是它对我有用的唯一方式,因为我从同一个sshd服务器获取了Cygwin Git的POSIX错误

我怀疑Git使用的这方面仍然需要一些工作..(ssh +在Windows中轻松拉/推)

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有