git clone git@myserver:gitolite-admin失败

8

我正在尝试运行一个git服务器仓库。 我已经安装了gitolite。

当通过ssh运行git info时,服务器会回答:

ssh git@myserver info

hello Brian, this is git@hepide01pep1 running gitolite3  on git 1.6.3.2
R W   testing

尝试克隆gitolite-admin存储库时,我遇到了以下错误。
git clone git@myserver:gitolite-admin

Cloning into 'gitolite-admin'...
FATAL: R any gitolite-admin Brian DENIED by fallthru
(or you mis-spelled the reponame)
fatal: The remote end hung up unexpectedly

同样的事情也会发生在这个语法中。
git clone ssh://git@myserver/gitolite-admin 
Cloning into 'gitolite-admin'...
FATAL: R any gitolite-admin Brian DENIED by fallthru
(or you mis-spelled the reponame)
fatal: The remote end hung up unexpectedly

能否有人给我一些有用的提示?我查看了这里和网络上的答案,但没有找到任何能够进一步帮助我的东西。

3个回答

15
如果你正在设置gitolite,那么接受的答案是一个不错的选择,但如果你是现有安装的新用户,除非你已被添加为管理员,否则会遇到与问题中相同的错误。如果你可以访问存储着gitolite的服务器的shell,请登录并切换到gitolite用户,通常称为git。一旦登录到gitolite用户,进入conf文件并赋予自己RW+权限于gitolite-admin仓库。Gitolite的conf通常在/home/git/.gitolite/conf/gitolite.conf(假设用户名为git)。对于名为Peaches的gitolite用户,请如下授权:
repo gitolite-admin
    RW+     =   OriginalAdmin Peaches

保存文件,然后仍以gitolite用户身份从命令行运行设置:

gitolite setup

如果你已经正确设置了用户,现在应该可以进行克隆。

有关添加用户的更多信息,请参见文档


1
请注意,如果您使用的是Ubuntu,并且已经通过apt-get安装了gitolite,则gitolite设置命令为'gl-setup'。 - Error 454
谢谢,这对我非常有帮助!特别是gitolite设置部分! - plasmasolutions

8

gitolite-admin只能使用与用于gitolite服务器的git帐户同名的公钥进行访问。

默认情况下,您使用的是brian.pub,它只允许您访问testing.git仓库。

您需要在本地工作站上定义一个$HOME/.ssh/config文件,以记录使用正确密钥的ssh参数。
请参见“gitolite: can connect via ssh, can't clone”。

~/.ssh/gitolite.pub
~/.ssh/gitolite

然后我定义了一个配置文件:~/.ssh/config,并在其中添加如下内容:
host gitolite
     user git # replace it by the actual git user for the gitolite server
     hostname server.com
     identityfile ~/.ssh/gitolite

克隆将会起作用:
git clone gitolite:gitolite-admin

macbert确认:

我将密钥重命名为git.pub,运行gitolite setup -pk git.pub并从.gitolite/keydir中删除旧的brian密钥。
在那之后,我使用git clone git@myserver:gitolite-admin命令:

Cloning into 'gitolite-admin'... 
remote: Counting objects: 15, done. 
remote: Compressing objects: 100% (12/12), done. 
remote: Total 15 (delta 0), reused 0 (delta 0) 
Receiving objects: 100% (15/15), done.

所以使用正确的默认密钥,ssh git@myserver info 应该会显示 'hello' 消息中 gitolite-admin 仓库的正确访问权限。

啊,好提示 - 这个有效。git clone git@myserver:testing.git 正在克隆 'testing'... 警告:您似乎克隆了一个空的存储库。我该如何更改呢? 在这个指南中,看起来键可以被命名为任何东西: $ mkdir bin $ gitolite/install -ln $ gitolite setup -pk sena.pub 在 /home/gitolite/repositories/gitolite-admin.git/ 中初始化了一个空的 Git 存储库。 在 /home/gitolite/repositories/testing.git/ 中初始化了一个空的 Git 存储库。 警告:/home/gitolite/.ssh/authorized_keys 丢失;正在创建新的密钥。下一步是克隆,教程说它有效。 - macbert
@macbert 正确:但是,除非您通过“config”文件指定要使用正确的公钥,否则您将无法克隆“gitolite-admin”。而且密钥的名称很重要。 - VonC
好的,太棒了!我已经将密钥重命名为git.pub,运行了gitolite setup -pk git.pub,并从.gitolite/keydir中删除了旧的brian密钥。之后我得到了git clone git@myserver:gitolite-admin 正在克隆到 'gitolite-admin'... 远程:计数对象:15,完成。 远程:压缩对象:100%(12/12),完成。 远程:总共 15(增量 0),复用 0(增量 0) 接收对象:100%(15/15),完成。听起来很不错 - 谢谢 @VonC - macbert
顺便提一下,你永远不应该手动更改 .gitolite/ 中的任何内容。这就是 gitolite-admin 存储库的用途。每当您将更新推送到该存储库时,它会自动更新。因此,当您想要重命名用户时,请更改密钥文件的名称 更新配置文件以使用新名称并一起提交和推送。否则会失败。 - poke

1
通常裸的 git 仓库使用 .git 命名。请尝试执行以下命令:git clone git@myserver:gitolite-admin.git

相同的输出:-7 git clone git@myserver:gitolite-admin.git 正在克隆到 'gitolite-admin'... 致命错误:R any gitolite-admin Brian 被 fallthru 拒绝(或者您拼错了仓库名称) 致命错误:远程端意外挂断 - macbert
@macbert 正常情况下:这与仓库名称无关,而与gitolite如何控制对特定“gitolite-admin”仓库的访问权限有关。 - VonC
6
Gitolite足够智能,可以处理.git,你根本不需要它。 - poke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接