我有gitolite设置并使用基于SSH密钥的身份验证。我可以通过gitolite-admin.git repo和conf文件控制对repos的访问。所有这些都比SSH更好用,但我想用GitWeb作为查看回购的快捷方式。
GitWeb现在运行良好,但通过Web界面显示所有存储库。所以我的目标是:
有没有人有这个出发点? Apache部分不应该是困难的,我将它设置为对/ gitweb / url进行身份验证。我不知道如何传递该用户名并对gitolite进行授权。有什么想法吗?
谢谢,
森
答案 0 :(得分:1)
是的,这是可能的,但你需要完成gitweb配置脚本才能调用gitolite。
密钥位于gitweb_config.perl
:如果该文件存在,gitweb将包含并调用它。
请参阅我的gitweb/gitweb_config.perl
文件:
our $home_link_str = "ITSVC projects";
our $site_name = "ITSVC Gitweb";
use lib (".");
require "gitweb.conf.pl";
在gitweb/gitweb.conf.pl
(自定义脚本)中,我定义了gitweb调用的官方回调函数: export_auth_hook
:该函数将调用gitolite。
use Gitolite::Common;
use Gitolite::Conf::Load;
#$ENV{GL_USER} = $cgi->remote_user || "gitweb";
$export_auth_hook = sub {
my $repo = shift;
my $user = $ENV{GL_USER};
# gitweb passes us the full repo path; so we strip the beginning
# and the end, to get the repo name as it is specified in gitolite conf
return unless $repo =~ s/^\Q$projectroot\E\/?(.+)\.git$/$1/;
# check for (at least) "R" permission
my $ret = &access( $repo, $user, 'R', 'any' );
my $res = $ret !~ /DENIED/;
return ($ret !~ /DENIED/);
};
来自评论:
由于以下行设置了 GL_USER
:
$ENV{GL_USER} = $cgi->remote_user || "gitweb";
$cgi->remote_user
将选择已完成身份验证的任何Apache Auth模块设置的环境REMOTE_USER
。(例如此Apache configuration file)。
您可以打印with a 'die' line。
“找不到Gitolite / Rc.pm”表示perl使用的INC变量不包含$ ENV {GL_LIBDIR}; (设为~/gitolite/lib
或<any_place_where_gitolite_was_installed>/lib
)
这就是为什么有一个行in the same gitweb/gitweb.conf.pl
文件将其添加到INC
:
unshift @INC, $ENV{GL_LIBDIR};
use lib $ENV{GL_LIBDIR};
use Gitolite::Rc;
从Nat45928编辑:在我的情况下,我需要将我的主路径插入所有'@H @'条目。这马上解决了我的所有问题。