该错误消息来自“ 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 的更新钩子会启动,并且无法运行,因为它所期望的某些环境变量不存在。