Gitosis / Gitolite设置

时间:2011-02-12 04:46:22

标签: git gitolite

我有一个关于gitosis和gitolite的问题,我花了很多时间研究无济于事。在仔细遵循两种产品的设置说明之后,常见的症状是目标存储库未通过gitosis / gitolite正确定位:

这失败了:

$> git clone gitolite@example.com:testing
Cloning into testing...
fatal: 'testing' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

虽然这有效:

$> git clone gitolite@example.com:~/repositories/testing
Cloning into testing...
warning: You appear to have cloned an empty repository.

所以指定完整路径是有效的,但这表明我们不知道我们没有通过gitosis / gitolite运行。

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

$> ssh gitolite@example.com
PTY allocation request failed on channel 0

另外,当我执行“ssh gitolite@example.com info”时,我不断获取GNU信息而不是gitolite的信息(如果我运行'/ usr / local / bin / gl-auth-command,我可以得到它'作为服务器上的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 \ 
   user@machine.local

为什么我不会被提出gitolite提示的任何想法? 我很感激有关这个问题的任何想法,谢谢!

2 个答案:

答案 0 :(得分: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的一些路径并让它们直接进入shell。由于我可能在较老的尝试中尝试使用gitosis或gitolite工作,可能是其他人之前已经尝试过这个并且现在因此而得到这个错误。

答案 1 :(得分:1)

我只知道gitosis,这是gitolite的前身,问题必须是相同的。在我想到之前,我遇到了同样的问题。

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

据我了解,需要.git后缀。

gitolite@example.com:测试将您带到〜gitolite / repositories / testing但我猜这段代码的编写方式使得它认为repo必须命名为testing.git。所以它认为这是一个错误。

gitolite@example.com:〜/ repositories / testing绕过了这个URL重写规则,但我的猜测是它再次查找~gitosis / repositories / testing.git。

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

如果您只是添加.git后缀,则所有问题都会消失。至少那是我对gitosis的体验。

祝你好运。