我正在尝试使用文档中的“直接在服务器方法”上设置gitolite
通过整个设置,上传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
它告诉我,它无法findgit上传包,所以我想我只需要将其path添加到“git”用户“.profile”
我只是加倍检查,path在那里! 如果我:
ssh git@myServer
然后打电话:
which git-upload-pack
我按照预期得到了path:
/usr/local/bin/git-upload-pack
我在这里错过了什么?
我似乎无法克隆gitolitepipe理,因为它一直抱怨不能findgit上传包!
最后,我通过添加PATH到.bashrc而不是.profile来解决这个问题
git用户被设置为使用/ usr / bin / bash shell
我还没有意识到,当我SSH用户git我的服务器:
ssh git@myServer
正在从git的主目录中的.profile读取PATHvariables。
echo $PATH
显示.profile中包含的所有正确的path
但..
从我的工作站,当我尝试
ssh git@myServer \echo $PATH
产量完全不同,path全部缺失。
在将.bashrc文件添加到git的主目录后,在.bashrc中定义了所需的所有PATH,并添加了/ usr / local / bin /,其中git-upload-pack正在运行。
通过运行以下命令,始终确保path已经设置在应该在的位置:
ssh git@myServer \echo $PATH
当你用sshlogin到一台机器时,它会启动一个“loginshell”,并执行一些login脚本。 如果用ssh远程执行命令,则会执行其他一些login脚本。 你可以在这里阅读。
你的问题是(如你所想)git-upload-pack的path没有设置为“非login”的shell。
您可以按照您的build议更改login脚本。 也许更简单的替代方法是在命令行中指定git-upload-pack的path,如下所示:
git clone --upload-pack /usr/local/bin/git-upload-pack git@server:gitolite-admin
如果你有一个远程仓库,你必须使用–upload-pack,你可以通过在克隆之后configurationgit来使生活变得更简单,以便始终使用该仓库的path
git configure remote.<name-of-repo>.uploadpack /usr/local/bin/git-upload-pack
除非您命名远程存储库,否则<name-of-repo>通常是origin