1

我有一个关于 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 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 \ 
   user@machine.local

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

4

2 回答 2

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 起作用,因此可能其他人以前也尝试过此操作,并且现在因此而出现此错误。

于 2011-06-22T13:34:35.000 回答
1

我只知道gitosis,它是gitolite的前身,问题一定是一样的。在我想出来之前,我遇到了同样的问题。

如果没有安装 gitolite,通常 git 会在 ~git 中安装存储库,但 ~gitolite 会在 ~/gitolite/repositories/testing.git 中安装存储库。

我的理解是 .git 后缀是必需的。

gitolite@example.com:testing 带你到 ~gitolite/repositories/testing 但我猜代码的编写方式是它认为 repo 必须命名为 testing.git。所以它认为这是一个错误。

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

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

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

祝你好运。

于 2011-07-09T05:06:48.290 回答