我正在尝试使用文档中的“直接在服务器上的方法”
完成了整个设置,上传了 ssh 公钥等...现在我可以 ssh git@myserver 而无需提示我输入任何密码,一切都很好。
我到达了需要在工作站(在我的例子中是 Mac OS)上执行的这一步
on the client, run cd; git clone git@server:gitolite-admin
运行时抛出此错误:
Initialized empty Git repository in /Users/myLocalUser/gitolite-admin/.git/
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly
它告诉我找不到 git-upload-pack,所以我想我只需要将其路径添加到“git”用户“.profile”
我刚刚仔细检查了一下,路径就在那里!如果我:
ssh git@myServer
然后调用:
which git-upload-pack
我得到了预期的路径:
/usr/local/bin/git-upload-pack
我在这里遗漏了什么?!
我似乎无法克隆 gitolite-admin,因为它一直抱怨找不到 git-upload-pack!!
答案1
最后我通过将 PATH 添加到 .bashrc 而不是 .profile 解决了这个问题
git 用户设置为使用 /usr/bin/bash shell
我还没有意识到当我使用用户 git ssh 到我的服务器时:
ssh git@myServer
PATH 变量正在从 git 主目录中的 .profile 读取。
echo $PATH
显示 .profile 中包含的所有正确路径
但..
从我的工作站,当我尝试
ssh git@myServer \echo $PATH
输出完全不同,并且路径全部丢失。
将 .bashrc 文件添加到 git 的主目录后,在 .bashrc 中定义了我需要的所有 PATH,并添加了 git-upload-pack 所在的 /usr/local/bin/,它便按预期工作了。
始终确保路径已设置到应该通过运行这个命令:
ssh git@myServer \echo $PATH
答案2
当你使用 ssh 登录到一台机器时,它会启动一个“登录 shell”,并执行你的一些登录脚本。如果你使用 ssh 远程执行命令,一些其他执行登录脚本。您可以阅读此内容这里。
您的问题是(正如您所发现的)没有为“非登录”shell 设置 git-upload-pack 的路径。
您可以按照您的建议更改登录脚本。也许更简单的替代方案是git-upload-pack
在命令行上指定路径像这样:
git clone --upload-pack /usr/local/bin/git-upload-pack git@server:gitolite-admin
如果你有一个远程存储库,需要经常使用 --upload-pack,那么你可以在克隆后配置 git,让其始终使用该存储库的路径,从而使工作更轻松
git configure remote.<name-of-repo>.uploadpack /usr/local/bin/git-upload-pack
除非你命名了你的远程存储库,否则<name-of-repo>
通常是origin