Mac 上的 gitolite 设置 => git-upload-pack:未找到命令

Mac 上的 gitolite 设置 => git-upload-pack:未找到命令

我正在尝试使用文档中的“直接在服务器上的方法”

完成了整个设置,上传了 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

相关内容