blob: be294a129b5874ddfaee6f7625341dd77608b472 [file] [log] [blame] [view]
---
title: "Gitweb Integration"
sidebar: gerritdoc_sidebar
permalink: config-gitweb.html
---
## Gitweb Integration
Gerrit Code Review can manage and generate hyperlinks to gitweb,
allowing users to jump from Gerrit content to the same information, but
shown by gitweb.
### Internal/Managed gitweb
In the internal configuration, Gerrit inspects the request, enforces its
project level access controls, and directly executes `gitweb.cgi` if the
user is authorized to view the page.
To enable the internal configuration, set
[gitweb.cgi](config-gerrit.html#gitweb.cgi) with the path of the
installed CGI. This defaults to `/usr/lib/cgi-bin/gitweb.cgi`, which is
a common installation path for the *gitweb* package on Linux
distributions.
```
git config --file $site_path/etc/gerrit.config gitweb.cgi /usr/lib/cgi-bin/gitweb.cgi
git config --file $site_path/etc/gerrit.config --unset gitweb.url
```
Alternatively, if Gerrit is served behind reverse proxy, it can generate
different URLs for gitwebs links (they need to be rewritten to
`<gerrit>/gitweb?args` on the web server). This allows for serving
gitweb under a different URL than the Gerrit instance. To enable this
feature, set both: `gitweb.cgi` and
`gitweb.url`.
```
git config --file $site_path/etc/gerrit.config gitweb.cgi /usr/lib/cgi-bin/gitweb.cgi
git config --file $site_path/etc/gerrit.config gitweb.url /pretty/path/to/gitweb
```
After updating `'$site_path'/etc/gerrit.config`, the Gerrit server must
be restarted and clients must reload the host page to see the change.
#### Configuration
Most of the gitweb configuration file is handled automatically by Gerrit
Code Review. Site specific overrides can be placed in
`'$site_path'/etc/gitweb_config.perl`, as this file is loaded as part of
the generated configuration file.
#### Logo and CSS
If the package-manager installed CGI (`/usr/lib/cgi-bin/gitweb.cgi`) is
being used, the stock CSS and logo files will be served from either
`/usr/share/gitweb` or `/var/www`.
Otherwise, Gerrit expects `gitweb.css` and `git-logo.png` to be found in
the same directory as the CGI script itself. This matches with the
default source code distribution, and most custom installations.
#### Access Control
Access controls for internally managed gitweb page views are enforced
using the standard project READ +1 permission.
Also, in order for a user to be able to view any gitweb information for
a project, the user must be able to read all references (including
refs/meta/config, refs/meta/dashboards/\*, etc.). If you have exclusive
read permissions for any references, make sure to include all parties
that should be able to read the gitweb info for any of the branches in
that project.
### External/Unmanaged gitweb
For the external configuration, gitweb runs under the control of an
external web server, and Gerrit access controls are not enforced. Gerrit
provides configuration parameters for integration with gitweb.
#### Linux Installation
##### Install Gitweb
On Ubuntu:
```
$ sudo apt-get install gitweb
```
With Yum:
```
$ yum install gitweb
```
##### Configure Gitweb
Update `/etc/gitweb.conf`, add the public GIT repositories:
$projectroot = "/var/www/repo/";
# directory to use for temp files
$git_temp = "/tmp";
# target of the home link on top of all pages
#$home_link = $my_uri || "/";
# html text to include at home page
$home_text = "indextext.html";
# file with project list; by default, simply scan the projectroot dir.
$projects_list = $projectroot;
# stylesheet to use
# I took off the prefix / of the following path to put these files inside gitweb directory directly
$stylesheet = "gitweb.css";
# logo to use
$logo = "git-logo.png";
# the favicon
$favicon = "git-favicon.png";
#### Configure & Restart Apache Web Server
##### Configure Apache
Link gitweb to `/var/www/gitweb`, check `/etc/gitweb.conf` if unsure of
paths:
```
$ sudo ln -s /usr/share/gitweb /var/www/gitweb
```
Add the gitweb directory to the Apache configuration by creating a
"gitweb" file inside the Apache conf.d directory:
```
$ touch /etc/apache/conf.d/gitweb
```
Add the following to /etc/apache/conf.d/gitweb:
Alias /gitweb /var/www/gitweb
Options Indexes FollowSymlinks ExecCGI
DirectoryIndex /cgi-bin/gitweb.cgi
AllowOverride None
> **Note**
>
> This may have already been added by yum/apt-get. If thats the case,
> leave as is.
##### Restart the Apache Web Server
```
$ sudo /etc/init.d/apache2 restart
```
Now you should be able to view your repository projects online:
<http://localhost/gitweb>
#### Windows Installation
Instructions are available for installing the gitweb module distributed
with MsysGit:
[GitWeb](https://github.com/msysgit/msysgit/wiki/GitWeb)
If you dont have Apache installed, you can download the appropriate
build for Windows from
[apachelounge.org](http://www.apachelounge.com/download).
After you have installed Apache, you will want to create a [new service
user
account](http://httpd.apache.org/docs/2.0/platform/windows.html#winsvc)
to use with Apache.
If youre still having difficulty setting up permissions, you may find
this tech note useful for configuring Apache Service to run under
another account. You must grant the new account ["run as
service"](http://technet.microsoft.com/en-us/library/cc794944\(WS.10\).aspx)
permission:
The gitweb version in msysgit is missing several important and required
perl modules, including CGI.pm. The perl included with the msysgit
distro 1.7.8 is broken.. The [unicore folder is missing along with
utf8\_heavy.pl and
CGI.pm](http://groups.google.com/group/msysgit/browse_thread/thread/ba3501f1f0ed95af).
You can verify by checking for perl modules. From an msys console,
execute the following to check:
$ perl -mCGI -mEncode -mFcntl -mFile::Find -mFile::Basename -e ""
You may encounter the following exception:
$ perl -mCGI -mEncode -mFcntl -mFile::Find -mFile::Basename -e ""
Can't locate CGI.pm in @INC (@INC contains: /usr/lib/perl5/5.8.8/msys
/usr/lib/p erl5/5.8.8 /usr/lib/perl5/site_perl/5.8.8/msys
/usr/lib/perl5/site_perl/5.8.8 /u sr/lib/perl5/site_perl .). BEGIN
failed--compilation aborted.
If you’re missing CGI.pm, you’ll have to deploy the module to the msys
environment: You will have to retrieve them from the 5.8.8 distro on :
<http://strawberryperl.com/releases.html>
File: strawberry-perl-5.8.8.3.zip
contents: `bin/` `lib/` `site/`
copy the contents of lib into `msysgit/lib/perl5/5.8.8` and overwrite
existing files.
#### Enable Gitweb Integration
To enable the external gitweb integration, set
[gitweb.url](config-gerrit.html#gitweb.url) with the URL of your gitweb
CGI.
The CGI’s `$projectroot` should be the same directory as
gerrit.basePath, or a fairly current replica. If a replica is being
used, ensure it uses a full mirror, so the `+refs/changes/*+` namespace
is available.
$ git config -f $site_path/etc/gerrit.config --unset gitweb.cgi
$ git config -f $site_path/etc/gerrit.config gitweb.url https://gitweb.corporation.com
If you’re not following the traditional {projectName}.git project naming
conventions, you will want to customize Gerrit to read them. Add the
following:
$ git config -f $site_path/etc/gerrit.config gitweb.type custom
$ git config -f $site_path/etc/gerrit.config gitweb.project ?p=\${project}\;a=summary
$ git config -f $site_path/etc/gerrit.config gitweb.revision ?p=\${project}\;a=commit\;h=\${commit}
$ git config -f $site_path/etc/gerrit.config gitweb.branch ?p=\${project}\;a=shortlog\;h=\${branch}
$ git config -f $site_path/etc/gerrit.config gitweb.roottree ?p=\${project}\;a=tree\;hb=\${commit}
$ git config -f $site_path/etc/gerrit.config gitweb.file ?p=\${project}\;hb=\${commit}\;f=\${file}
$ git config -f $site_path/etc/gerrit.config gitweb.filehistory ?p=\${project}\;a=history\;hb=\${branch}\;f=\${file}
After updating `'$site_path'/etc/gerrit.config`, the Gerrit server must
be restarted and clients must reload the host page to see the change.
Note that when using a custom gitweb configuration, values must be
specified for all of the `project`, `revision`, `branch`, `roottree`,
`file`, and `filehistory` settings, otherwise the configuration will not
be used.
##### Access Control
Gitweb access controls can be implemented using standard web server
access controls. This isn’t typically integrated with Gerrit’s own
access controls. Caution must be taken to ensure the controls are
consistent if access needs to be restricted.
##### Caching Gitweb
If your repository set is large and you are expecting a lot of users,
you may want to look at the caching forks used by high-traffic sites
like kernel.org or repo.or.cz.
### Alternatives to gitweb
There are other alternatives to gitweb that can also be used with
Gerrit, such as cgit.
cgit can be used by specifying `gitweb.type` to be *cgit*.
It is also possible to define custom patterns.
### SEE ALSO
- [Section gitweb](config-gerrit.html#gitweb)
- [cgit](http://git.zx2c4.com/cgit/about/)
## GERRIT
Part of [Gerrit Code Review](index.html)
## SEARCHBOX