3

我已经安装了 Gitolite,就像 GitLab 说明中所说的那样,直到现在一切正常,repo 已创建......但是当尝试克隆或推送时,它返回 NO repo found - 或类似的东西。

但是当我将遥控器设置为完整路径时,就像git@server:22/~git/repositories/repo.git它克隆一样,但是当尝试推送时,它发现了一个错误:

git push origin master
ERROR: invalid repo name.
fatal: The remote end hung up unexpectedly

会是什么?

4

1 回答 1

2

该错误消息来自“ gitolite-shell.parse_soc()

sub parse_soc {
    my $soc = $ENV{SSH_ORIGINAL_COMMAND};
    $soc ||= 'info';

    my $git_commands = "git-upload-pack|git-receive-pack|git-upload-archive";
    if ( $soc =~ m(^($git_commands) '/?(.*?)(?:\.git(\d)?)?'$) ) {
        my ( $verb, $repo, $trace_level ) = ( $1, $2, $3 );
        $ENV{D} = $trace_level if $trace_level;
        _die "invalid repo name: '$repo'" if $repo !~ $REPONAME_PATT;
        trace( 2, "git command", $soc );
        return ( $verb, $repo );
    }

存在REPONAME_PATT

$REPONAME_PATT = qr(^\@?[0-9a-zA-Z][-0-9a-zA-Z._\@/+]*$);

gitolite 地址不应包含任何路径,如下所示:

git@server:22/repo

而不是,这里描述了git@server:22/~git/repositories/repo.git这个问题:

考虑git@server:repositories/reponame.git
克隆操作将起作用——您使用的是完整的 Unix 路径(假设为默认$REPO_BASE设置),因此 shell 会在您所说的位置找到存储库。
但是,当您推送时,gitolite 的更新钩子会启动,并且无法运行,因为它所期望的某些环境变量不存在。

于 2013-03-13T21:54:44.570 回答