GIT:推送到远程服务器时出现“git-upload-pack:command not found”

时间:2011-05-17 22:04:15

标签: git unix version-control ssh

所以我正在使用GIT,尝试将代码推送到我的远程服务器。

  • 在共享的unix主机上,我不允许拥有自己的环境变量(阻止SSH帐户),也不允许sudo访问。
  • 设法在我的/ home /
  • 中成功安装git
  • 尝试将代码推送到服务器返回:bash:git-upload-pack:command not found
  • $ PATH变量已设置 - 因为git安装在我的/ home /
  • 为了让事情有效,我不得不使用以下克隆命令:

    git clone -u / home / bin / git-upload-pack user@server.com:mygitfolder

  • 本地计算机/远程服务器上的相同版本的git(1.7.0.4)

所以我可以收集的内容基本上是:

  • 找到一种方法来在每次推送到服务器时包装我的环境变量 或
  • 在推送到服务器时指定我的git-receive-pack的路径

我知道我可以创建一个在我推送时生效的钩子,但是没有设法找到它的实现位置。

(我宁愿不在我的本地机器上创建别名)

1 个答案:

答案 0 :(得分:15)

如果无法调整远端 1 的有效路径,则必须从本地指定程序的位置。

如您所见,git clone可以-u /path/to/git-upload-pack(或--upload-pack /path/to/git-upload-pack)。

git fetchgit pull接受--upload-pack /path/to/git-upload-pack(不是-u,因为这对这些程序意味着什么)。他们还检查remote.<name>.uploadpack配置变量。

git push接受--receive-pack /path/to/git-receive-pack并检查remote.<name>.receivepack配置变量。

克隆存储库后,可以使用配置变量记录路径:

git clone -u /home/bin/git-upload-pack user@server.com:mygitfolder
cd mygitfolder
git config remote.origin.uploadpack /home/bin/git-upload-pack
git config remote.origin.receivepack /home/bin/git-receive-pack

然后您可以在不必指定路径的情况下进行推送,获取或拉取。


1 你说“SSH帐户的环境变量被阻止了”。如果您的意思是 sshd 关闭了PermitUserEnvironment设置(意味着您无法在environment="PATH=/home/bin:/usr/bin:/bin"文件中使用.ssh/authorized_keys),那么您仍然可能能够通过shell初始化文件(例如.bashrc)修改默认PATH。