2011-02-12 78 views
1

我有一个问题,gitosis和gitolite,我花了很多小时研究无济于事。密切关注这两种产品的安装说明后,常见症状是目标库中不被位于正常通过的gitosis/gitolite:Gitosis/Gitolite设置

这种失败:

$> git clone [email protected]:testing 
Cloning into testing... 
fatal: 'testing' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly 

虽然这个工程:

$> git clone [email protected]:~/repositories/testing 
Cloning into testing... 
warning: You appear to have cloned an empty repository. 

因此,指定完整路径的作品,但这将表明,我们不通过gitosis/gitolite运行。

问题的另一个可能相关的症状是,当我在安装后通过ssh连接到服务器,我的连接与此消息冻结:

$> ssh [email protected] 
PTY allocation request failed on channel 0 

而且,当我执行“SSH gitolite @例子。 com info“,我不断得到GNU信息而不是gitolite的信息(如果我在服务器上运行'/ usr/local/bin/gl-auth-command kreeble'作为gitolite,我可以得到这些信息。我已经证实,在用户gitolite的.ssh目录,authorized_keys中只有一个入口这使我通过gitolite命令:

command="/usr/local/bin/gl-auth-command kreeble",no-port-forwarding,\ 
    no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa long_key_base64_here \ 
    [email protected] 

为什么我不会与gitolite提示提交任何想法? 我将不胜感激这个问题的任何想法,谢谢!

回答

1

我刚刚发生了这个问题。我发现奇怪的是,我只是在一台Mac OS X机器上成功安装gitolite,并且在另一台Mac OS X机器上使用相同的设置失败。当我尝试克隆gitolite-admin时,我的特殊问题是相同的,但是在尝试'ssh git @ localhost info'时,它会返回gnu信息而不是gitolite信息。在文档中它说这个问题是由于在服务器上使用错误的密钥导致gitolite被绕过。

再看看我的问题,情况并非如此。 Gitolite被称为罚款,实际上使用-vvv作为ssh命令的一部分显示了这一点。我的问题是,几个月后,尝试使gitosis或gitolite工作(我不记得是哪个),我修改了/etc/sshd_config并添加了'ForceCommand/usr/local/bin/ssh_session'底端。

的,内容是是:

#!/bin/bash 
export SSH_SESSION=1 
if [ -z "$SSH_ORIGINAL_COMMAND" ] ; then 
    export SSH_LOGIN=1 
    exec login -fp "$USER" 
else 
    export SSH_LOGIN= 
    [ -r /etc/profile ] && source /etc/profile 
    [ -r ~/.profile ] && source ~/.profile 
    eval exec "$SSH_ORIGINAL_COMMAND" 
fi 

这最终导致ssh来绕过一些用于gitolite的路径,让他们diredtly去外壳。既然它有可能是我在较旧的尝试中尝试过使gitosis或gitolite起作用,那么其他人也可能以前也尝试过这种方法,并且现在因此而出现此错误。

+1

另外,毕竟这一点,我不得不添加的路径gitolite(在我的情况在/ usr/local/bin目录),以对.bashrc中服务器上的Git用户。 – 2011-06-22 14:03:33

1

我只知道gitosis,这是gitolite的前身,问题必须相同。在我想出来之前,我经历过同样的问题。

如果没有安装gitolite,通常git会在〜git中安装存储库,但是〜gitolite会在例如git中安装repos。 〜/ gitolite /库/ testing.git。

这是我的理解,需要.git后缀需要。

[email protected]:测试需要您到〜gitolite/repositories/testing,但我猜测代码是以这样一种方式编写的,它认为repo必须命名为tests.git。所以它认为这是一个错误。

[email protected]:〜/库/测试绕过这个URL重写规则,但我的猜测是,它再次寻找〜Gitosis的/库/ testing.git。

这个时候,错误处理似乎是一个不同的代码。我认为,当它没有找到tests.git时,它被编码为返回一个空的回购。

如果你简单地添加git的后缀,所有的问题都会消失。至少这是我的gitosis经验。

祝你好运。

+0

注意,中央回购“testihng.git”文件夹被克隆/拉为“测试”文件夹作为本地回购。 – Yoichi 2011-07-09 05:08:40