:linkattrs:
== 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
link:config-gerrit.html#gitweb.cgi[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 -f $site_path/etc/gerrit.config gitweb.type gitweb
  git config -f $site_path/etc/gerrit.config gitweb.cgi /usr/lib/cgi-bin/gitweb.cgi
  git config -f $site_path/etc/gerrit.config --unset gitweb.url
----

Alternatively, if Gerrit is served behind reverse proxy, it can
generate different URLs for gitweb's 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 -f $site_path/etc/gerrit.config gitweb.type gitweb
  git config -f $site_path/etc/gerrit.config gitweb.cgi /usr/lib/cgi-bin/gitweb.cgi
  git config -f $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.

[[linuxGitWeb]]
==== 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 that's 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:

link:http://localhost/gitweb[http://localhost/gitweb]

[[WindowsGitWeb]]
==== Windows Installation

Instructions are available for installing the gitweb module distributed with
MsysGit:

link:https://github.com/msysgit/msysgit/wiki/GitWeb[GitWeb,role=external,window=_blank]

If you don't have Apache installed, you can download the appropriate build for
Windows from link:http://www.apachelounge.com/download[apachelounge.org].

After you have installed Apache, you will want to create a link:http://httpd.apache.org/docs/2.0/platform/windows.html#winsvc[new service user
account,role=external,window=_blank] to use with Apache.

If you're 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 link:http://technet.microsoft.com/en-us/library/cc794944(WS.10).aspx["run as service",role=external,window=_blank] 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 link:http://groups.google.com/group/msysgit/browse_thread/thread/ba3501f1f0ed95af[unicore folder is missing along with utf8_heavy.pl and CGI.pm,role=external,window=_blank]. 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[role=external,window=_blank]

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.

**NOTE**: Windows is not recommended as a server-side platform for
running Gerrit Code Review, because of the lack of adoption from the Gerrit Community,
incomplete functional validation and lack of security testing. Gerrit on
Windows Server is not actively supported even though it may still be
fully or partially functioning as expected.

==== Enable Gitweb Integration

To enable the external gitweb integration, set
link:config-gerrit.html#gitweb.url[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 gitweb.type gitweb
  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. Gitea can be used
with custom patterns for example:

----
  git config -f $site_path/etc/gerrit.config gitweb.type custom
  git config -f $site_path/etc/gerrit.config gitweb.urlEncode false
  git config -f $site_path/etc/gerrit.config gitweb.linkname gitea
  git config -f $site_path/etc/gerrit.config gitweb.url https://gitea.example.org/
  git config -f $site_path/etc/gerrit.config gitweb.branch ${project}/src/branch/${branch}
  git config -f $site_path/etc/gerrit.config gitweb.file ${project}/src/commit/${hash}/${file}
  git config -f $site_path/etc/gerrit.config gitweb.filehistory ${project}/commits/branch/${branch}/${file}
  git config -f $site_path/etc/gerrit.config gitweb.project ${project}
  git config -f $site_path/etc/gerrit.config gitweb.revision ${project}/commit/${commit}
  git config -f $site_path/etc/gerrit.config gitweb.roottree ${project}/src/commit/${commit}
  git config -f $site_path/etc/gerrit.config gitweb.tag ${project}/src/tag/${tag}
----

=== SEE ALSO

* link:config-gerrit.html#gitweb[Section gitweb]
* link:http://git.zx2c4.com/cgit/about/[cgit,role=external,window=_blank]

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
