gerrit和Gitweb的本地集成介绍

Gerrit能够管理和生成超链接到GitWeb上,并允许用户从Gerrit页面跳转到GitWeb页面上查看相同信息。

以下是Gerrit官网对Gerrit-GitWeb集成的介绍:

https://gerrit-documentation.storage.googleapis.com/Documentation/2.7/config-gitweb.html


Gerrit和GitWeb如何集成使用?

1、首先Gerrit服务器上要安装GitWeb,如果没有安装,则执行以下命令来安装

yum -y install gitweb


2、配置Gerrit来集成GitWeb

配置命令:

git config --file $site_path/etc/gerrit.config gitweb.cgi $gitweb_path/gitweb.cgi
git config --file $site_path/etc/gerrit.config --unset gitweb.url
我的测试环境中,gerrit的安装路径为 /home/gerrit2/gerrit

yum安装的GitWeb,生成的gitweb.cgi文件路径为/var/www/git/gitweb.cgi

安装完成后重启Gerrit服务器


重启后,可以看到GitWeb的超链接

打开超链接,项目的所有提交记录都能看到,每一次提交修改了哪些内容也能看到。


GitWeb权限问题

GitWeb集成Gerrit后,默认只有管理员用户才能查看GitWeb超链接,普通用打开链接后页面显示Not Found。

如果想给普通的用户查看GitWeb超链接的权限,则必须对项目设置refs/meta/config 的Read权限。而这个权限在All-Projects的ACL里只对Administrators用户和Project Owners开放。


于是需要在单独项目的ACL里为项目的用户组增加对refs/meta/config的read权限,如下图

 

这里我是对所有的注册用户开放了该权限,用普通用户user2登录Gerrit Web UI,确实能打开CI-DEMO项目里面的GitWeb超链接了


但是,问题来了。原来gerrit是用git做自身的ACL管理的,因此所有对refs/meta/config有read权限的用户都可以在Project的Access页面里修改权限,修改后虽然不能直接submit,但是可以作为patch提交review。而且通过gitweb就能够看到project.config和groups文件的全部内容,知道当前项目是如何设置权限的。这样是否合适就仁者见仁智者见智了


另外,对于用户提交的关于权限修改的patch如果想commit的话需要对refs/meta/config做和refs/heads/*一样的权限设定,也就说需要Label Code-Review,Label Verified,Submit三个权限才有可能commit patch。