'\" t
.\"     Title: gitweb.conf
.\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\"      Date: 03/07/2022
.\"    Manual: Git Manual
.\"    Source: Git 2.35.1.415.gc2162907e9
.\"  Language: English
.\"
.TH "GITWEB\&.CONF" "5" "03/07/2022" "Git 2\&.35\&.1\&.415\&.gc21629" "Git Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
gitweb.conf \- Gitweb (Git web interface) configuration file
.SH "SYNOPSIS"
.sp
/etc/gitweb\&.conf, /etc/gitweb\-common\&.conf, $GITWEBDIR/gitweb_config\&.perl
.SH "DESCRIPTION"
.sp
The gitweb CGI script for viewing Git repositories over the web uses a perl script fragment as its configuration file\&. You can set variables using "\fBour $variable = value\fR"; text from a "#" character until the end of a line is ignored\&. See \fBperlsyn\fR(1) for details\&.
.sp
An example:
.sp
.if n \{\
.RS 4
.\}
.nf
# gitweb configuration file for http://git\&.example\&.org
#
our $projectroot = "/srv/git"; # FHS recommendation
our $site_name = \(aqExample\&.org >> Repos\(aq;
.fi
.if n \{\
.RE
.\}
.sp
.sp
The configuration file is used to override the default settings that were built into gitweb at the time the \fIgitweb\&.cgi\fR script was generated\&.
.sp
While one could just alter the configuration settings in the gitweb CGI itself, those changes would be lost upon upgrade\&. Configuration settings might also be placed into a file in the same directory as the CGI script with the default name \fIgitweb_config\&.perl\fR \(em allowing one to have multiple gitweb instances with different configurations by the use of symlinks\&.
.sp
Note that some configuration can be controlled on per\-repository rather than gitweb\-wide basis: see "Per\-repository gitweb configuration" subsection on \fBgitweb\fR(1) manpage\&.
.SH "DISCUSSION"
.sp
Gitweb reads configuration data from the following sources in the following order:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
built\-in values (some set during build stage),
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
common system\-wide configuration file (defaults to
\fB/etc/gitweb\-common\&.conf\fR),
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
either per\-instance configuration file (defaults to
\fIgitweb_config\&.perl\fR
in the same directory as the installed gitweb), or if it does not exists then fallback system\-wide configuration file (defaults to
\fB/etc/gitweb\&.conf\fR)\&.
.RE
.sp
Values obtained in later configuration files override values obtained earlier in the above sequence\&.
.sp
Locations of the common system\-wide configuration file, the fallback system\-wide configuration file and the per\-instance configuration file are defined at compile time using build\-time Makefile configuration variables, respectively \fBGITWEB_CONFIG_COMMON\fR, \fBGITWEB_CONFIG_SYSTEM\fR and \fBGITWEB_CONFIG\fR\&.
.sp
You can also override locations of gitweb configuration files during runtime by setting the following environment variables: \fBGITWEB_CONFIG_COMMON\fR, \fBGITWEB_CONFIG_SYSTEM\fR and \fBGITWEB_CONFIG\fR to a non\-empty value\&.
.sp
The syntax of the configuration files is that of Perl, since these files are handled by sourcing them as fragments of Perl code (the language that gitweb itself is written in)\&. Variables are typically set using the \fBour\fR qualifier (as in "\fBour $variable = <value>;\fR") to avoid syntax errors if a new version of gitweb no longer uses a variable and therefore stops declaring it\&.
.sp
You can include other configuration file using read_config_file() subroutine\&. For example, one might want to put gitweb configuration related to access control for viewing repositories via Gitolite (one of Git repository management tools) in a separate file, e\&.g\&. in \fB/etc/gitweb\-gitolite\&.conf\fR\&. To include it, put
.sp
.if n \{\
.RS 4
.\}
.nf
read_config_file("/etc/gitweb\-gitolite\&.conf");
.fi
.if n \{\
.RE
.\}
.sp
.sp
somewhere in gitweb configuration file used, e\&.g\&. in per\-installation gitweb configuration file\&. Note that read_config_file() checks itself that the file it reads exists, and does nothing if it is not found\&. It also handles errors in included file\&.
.sp
The default configuration with no configuration file at all may work perfectly well for some installations\&. Still, a configuration file is useful for customizing or tweaking the behavior of gitweb in many ways, and some optional features will not be present unless explicitly enabled using the configurable \fB%features\fR variable (see also "Configuring gitweb features" section below)\&.
.SH "CONFIGURATION VARIABLES"
.sp
Some configuration variables have their default values (embedded in the CGI script) set during building gitweb \(em if that is the case, this fact is put in their description\&. See gitweb\(cqs \fIINSTALL\fR file for instructions on building and installing gitweb\&.
.SS "Location of repositories"
.sp
The configuration variables described below control how gitweb finds Git repositories, and how repositories are displayed and accessed\&.
.sp
See also "Repositories" and later subsections in \fBgitweb\fR(1) manpage\&.
.PP
$projectroot
.RS 4
Absolute filesystem path which will be prepended to project path; the path to repository is
\fB$projectroot/$project\fR\&. Set to
\fB$GITWEB_PROJECTROOT\fR
during installation\&. This variable has to be set correctly for gitweb to find repositories\&.
.sp
For example, if
\fB$projectroot\fR
is set to "/srv/git" by putting the following in gitweb config file:
.sp
.if n \{\
.RS 4
.\}
.nf
our $projectroot = "/srv/git";
.fi
.if n \{\
.RE
.\}
.sp
then
.sp
.if n \{\
.RS 4
.\}
.nf
http://git\&.example\&.com/gitweb\&.cgi?p=foo/bar\&.git
.fi
.if n \{\
.RE
.\}
.sp
and its path_info based equivalent
.sp
.if n \{\
.RS 4
.\}
.nf
http://git\&.example\&.com/gitweb\&.cgi/foo/bar\&.git
.fi
.if n \{\
.RE
.\}
.sp
will map to the path
\fB/srv/git/foo/bar\&.git\fR
on the filesystem\&.
.RE
.PP
$projects_list
.RS 4
Name of a plain text file listing projects, or a name of directory to be scanned for projects\&.
.sp
Project list files should list one project per line, with each line having the following format
.sp
.if n \{\
.RS 4
.\}
.nf
<URI\-encoded filesystem path to repository> SP <URI\-encoded repository owner>
.fi
.if n \{\
.RE
.\}
.sp
The default value of this variable is determined by the
\fBGITWEB_LIST\fR
makefile variable at installation time\&. If this variable is empty, gitweb will fall back to scanning the
\fB$projectroot\fR
directory for repositories\&.
.RE
.PP
$project_maxdepth
.RS 4
If
\fB$projects_list\fR
variable is unset, gitweb will recursively scan filesystem for Git repositories\&. The
\fB$project_maxdepth\fR
is used to limit traversing depth, relative to
\fB$projectroot\fR
(starting point); it means that directories which are further from
\fB$projectroot\fR
than
\fB$project_maxdepth\fR
will be skipped\&.
.sp
It is purely performance optimization, originally intended for MacOS X, where recursive directory traversal is slow\&. Gitweb follows symbolic links, but it detects cycles, ignoring any duplicate files and directories\&.
.sp
The default value of this variable is determined by the build\-time configuration variable
\fBGITWEB_PROJECT_MAXDEPTH\fR, which defaults to 2007\&.
.RE
.PP
$export_ok
.RS 4
Show repository only if this file exists (in repository)\&. Only effective if this variable evaluates to true\&. Can be set when building gitweb by setting
\fBGITWEB_EXPORT_OK\fR\&. This path is relative to
\fBGIT_DIR\fR\&. git\-daemon[1] uses
\fIgit\-daemon\-export\-ok\fR, unless started with
\fB\-\-export\-all\fR\&. By default this variable is not set, which means that this feature is turned off\&.
.RE
.PP
$export_auth_hook
.RS 4
Function used to determine which repositories should be shown\&. This subroutine should take one parameter, the full path to a project, and if it returns true, that project will be included in the projects list and can be accessed through gitweb as long as it fulfills the other requirements described by $export_ok, $projects_list, and $projects_maxdepth\&. Example:
.sp
.if n \{\
.RS 4
.\}
.nf
our $export_auth_hook = sub { return \-e "$_[0]/git\-daemon\-export\-ok"; };
.fi
.if n \{\
.RE
.\}
.sp
though the above might be done by using
\fB$export_ok\fR
instead
.sp
.if n \{\
.RS 4
.\}
.nf
our $export_ok = "git\-daemon\-export\-ok";
.fi
.if n \{\
.RE
.\}
.sp
If not set (default), it means that this feature is disabled\&.
.sp
See also more involved example in "Controlling access to Git repositories" subsection on
\fBgitweb\fR(1)
manpage\&.
.RE
.PP
$strict_export
.RS 4
Only allow viewing of repositories also shown on the overview page\&. This for example makes
\fB$export_ok\fR
file decide if repository is available and not only if it is shown\&. If
\fB$projects_list\fR
points to file with list of project, only those repositories listed would be available for gitweb\&. Can be set during building gitweb via
\fBGITWEB_STRICT_EXPORT\fR\&. By default this variable is not set, which means that you can directly access those repositories that are hidden from projects list page (e\&.g\&. the are not listed in the $projects_list file)\&.
.RE
.SS "Finding files"
.sp
The following configuration variables tell gitweb where to find files\&. The values of these variables are paths on the filesystem\&.
.PP
$GIT
.RS 4
Core git executable to use\&. By default set to
\fB$GIT_BINDIR/git\fR, which in turn is by default set to
\fB$(bindir)/git\fR\&. If you use Git installed from a binary package, you should usually set this to "/usr/bin/git"\&. This can just be "git" if your web server has a sensible PATH; from security point of view it is better to use absolute path to git binary\&. If you have multiple Git versions installed it can be used to choose which one to use\&. Must be (correctly) set for gitweb to be able to work\&.
.RE
.PP
$mimetypes_file
.RS 4
File to use for (filename extension based) guessing of MIME types before trying
\fB/etc/mime\&.types\fR\&.
\fBNOTE\fR
that this path, if relative, is taken as relative to the current Git repository, not to CGI script\&. If unset, only
\fB/etc/mime\&.types\fR
is used (if present on filesystem)\&. If no mimetypes file is found, mimetype guessing based on extension of file is disabled\&. Unset by default\&.
.RE
.PP
$highlight_bin
.RS 4
Path to the highlight executable to use (it must be the one from
\m[blue]\fBhttp://www\&.andre\-simon\&.de\fR\m[]
due to assumptions about parameters and output)\&. By default set to
\fIhighlight\fR; set it to full path to highlight executable if it is not installed on your web server\(cqs PATH\&. Note that
\fIhighlight\fR
feature must be set for gitweb to actually use syntax highlighting\&.
.sp
\fBNOTE\fR: for a file to be highlighted, its syntax type must be detected and that syntax must be supported by "highlight"\&. The default syntax detection is minimal, and there are many supported syntax types with no detection by default\&. There are three options for adding syntax detection\&. The first and second priority are
\fB%highlight_basename\fR
and
\fB%highlight_ext\fR, which detect based on basename (the full filename, for example "Makefile") and extension (for example "sh")\&. The keys of these hashes are the basename and extension, respectively, and the value for a given key is the name of the syntax to be passed via
\fB\-\-syntax <syntax>\fR
to "highlight"\&. The last priority is the "highlight" configuration of
\fBShebang\fR
regular expressions to detect the language based on the first line in the file, (for example, matching the line "#!/bin/bash")\&. See the highlight documentation and the default config at /etc/highlight/filetypes\&.conf for more details\&.
.sp
For example if repositories you are hosting use "phtml" extension for PHP files, and you want to have correct syntax\-highlighting for those files, you can add the following to gitweb configuration:
.sp
.if n \{\
.RS 4
.\}
.nf
our %highlight_ext;
$highlight_ext{\(aqphtml\(aq} = \(aqphp\(aq;
.fi
.if n \{\
.RE
.\}
.sp
.RE
.SS "Links and their targets"
.sp
The configuration variables described below configure some of gitweb links: their target and their look (text or image), and where to find page prerequisites (stylesheet, favicon, images, scripts)\&. Usually they are left at their default values, with the possible exception of \fB@stylesheets\fR variable\&.
.PP
@stylesheets
.RS 4
List of URIs of stylesheets (relative to the base URI of a page)\&. You might specify more than one stylesheet, for example to use "gitweb\&.css" as base with site specific modifications in a separate stylesheet to make it easier to upgrade gitweb\&. For example, you can add a
\fBsite\fR
stylesheet by putting
.sp
.if n \{\
.RS 4
.\}
.nf
push @stylesheets, "gitweb\-site\&.css";
.fi
.if n \{\
.RE
.\}
.sp
in the gitweb config file\&. Those values that are relative paths are relative to base URI of gitweb\&.
.sp
This list should contain the URI of gitweb\(cqs standard stylesheet\&. The default URI of gitweb stylesheet can be set at build time using the
\fBGITWEB_CSS\fR
makefile variable\&. Its default value is
\fBstatic/gitweb\&.css\fR
(or
\fBstatic/gitweb\&.min\&.css\fR
if the
\fBCSSMIN\fR
variable is defined, i\&.e\&. if CSS minifier is used during build)\&.
.sp
\fBNote\fR: there is also a legacy
\fB$stylesheet\fR
configuration variable, which was used by older gitweb\&. If
\fB$stylesheet\fR
variable is defined, only CSS stylesheet given by this variable is used by gitweb\&.
.RE
.PP
$logo
.RS 4
Points to the location where you put
\fIgit\-logo\&.png\fR
on your web server, or to be more the generic URI of logo, 72x27 size)\&. This image is displayed in the top right corner of each gitweb page and used as a logo for the Atom feed\&. Relative to the base URI of gitweb (as a path)\&. Can be adjusted when building gitweb using
\fBGITWEB_LOGO\fR
variable By default set to
\fBstatic/git\-logo\&.png\fR\&.
.RE
.PP
$favicon
.RS 4
Points to the location where you put
\fIgit\-favicon\&.png\fR
on your web server, or to be more the generic URI of favicon, which will be served as "image/png" type\&. Web browsers that support favicons (website icons) may display them in the browser\(cqs URL bar and next to the site name in bookmarks\&. Relative to the base URI of gitweb\&. Can be adjusted at build time using
\fBGITWEB_FAVICON\fR
variable\&. By default set to
\fBstatic/git\-favicon\&.png\fR\&.
.RE
.PP
$javascript
.RS 4
Points to the location where you put
\fIgitweb\&.js\fR
on your web server, or to be more generic the URI of JavaScript code used by gitweb\&. Relative to the base URI of gitweb\&. Can be set at build time using the
\fBGITWEB_JS\fR
build\-time configuration variable\&.
.sp
The default value is either
\fBstatic/gitweb\&.js\fR, or
\fBstatic/gitweb\&.min\&.js\fR
if the
\fBJSMIN\fR
build variable was defined, i\&.e\&. if JavaScript minifier was used at build time\&.
\fBNote\fR
that this single file is generated from multiple individual JavaScript "modules"\&.
.RE
.PP
$home_link
.RS 4
Target of the home link on the top of all pages (the first part of view "breadcrumbs")\&. By default it is set to the absolute URI of a current page (to the value of
\fB$my_uri\fR
variable, or to "/" if
\fB$my_uri\fR
is undefined or is an empty string)\&.
.RE
.PP
$home_link_str
.RS 4
Label for the "home link" at the top of all pages, leading to
\fB$home_link\fR
(usually the main gitweb page, which contains the projects list)\&. It is used as the first component of gitweb\(cqs "breadcrumb trail":
\fB<home link> / <project> / <action>\fR\&. Can be set at build time using the
\fBGITWEB_HOME_LINK_STR\fR
variable\&. By default it is set to "projects", as this link leads to the list of projects\&. Another popular choice is to set it to the name of site\&. Note that it is treated as raw HTML so it should not be set from untrusted sources\&.
.RE
.PP
@extra_breadcrumbs
.RS 4
Additional links to be added to the start of the breadcrumb trail before the home link, to pages that are logically "above" the gitweb projects list, such as the organization and department which host the gitweb server\&. Each element of the list is a reference to an array, in which element 0 is the link text (equivalent to
\fB$home_link_str\fR) and element 1 is the target URL (equivalent to
\fB$home_link\fR)\&.
.sp
For example, the following setting produces a breadcrumb trail like "home / dev / projects / \&..." where "projects" is the home link\&.
.sp
.if n \{\
.RS 4
.\}
.nf
    our @extra_breadcrumbs = (
      [ \(aqhome\(aq => \(aqhttps://www\&.example\&.org/\(aq ],
      [ \(aqdev\(aq  => \(aqhttps://dev\&.example\&.org/\(aq ],
    );
.fi
.if n \{\
.RE
.\}
.sp
.RE
.PP
$logo_url, $logo_label
.RS 4
URI and label (title) for the Git logo link (or your site logo, if you chose to use different logo image)\&. By default, these both refer to Git homepage,
\m[blue]\fBhttps://git\-scm\&.com\fR\m[]; in the past, they pointed to Git documentation at
\m[blue]\fBhttps://www\&.kernel\&.org\fR\m[]\&.
.RE
.SS "Changing gitweb\(cqs look"
.sp
You can adjust how pages generated by gitweb look using the variables described below\&. You can change the site name, add common headers and footers for all pages, and add a description of this gitweb installation on its main page (which is the projects list page), etc\&.
.PP
$site_name
.RS 4
Name of your site or organization, to appear in page titles\&. Set it to something descriptive for clearer bookmarks etc\&. If this variable is not set or is, then gitweb uses the value of the
\fBSERVER_NAME\fR
\fBCGI\fR
environment variable, setting site name to "$SERVER_NAME Git", or "Untitled Git" if this variable is not set (e\&.g\&. if running gitweb as standalone script)\&.
.sp
Can be set using the
\fBGITWEB_SITENAME\fR
at build time\&. Unset by default\&.
.RE
.PP
$site_html_head_string
.RS 4
HTML snippet to be included in the <head> section of each page\&. Can be set using
\fBGITWEB_SITE_HTML_HEAD_STRING\fR
at build time\&. No default value\&.
.RE
.PP
$site_header
.RS 4
Name of a file with HTML to be included at the top of each page\&. Relative to the directory containing the
\fIgitweb\&.cgi\fR
script\&. Can be set using
\fBGITWEB_SITE_HEADER\fR
at build time\&. No default value\&.
.RE
.PP
$site_footer
.RS 4
Name of a file with HTML to be included at the bottom of each page\&. Relative to the directory containing the
\fIgitweb\&.cgi\fR
script\&. Can be set using
\fBGITWEB_SITE_FOOTER\fR
at build time\&. No default value\&.
.RE
.PP
$home_text
.RS 4
Name of a HTML file which, if it exists, is included on the gitweb projects overview page ("projects_list" view)\&. Relative to the directory containing the gitweb\&.cgi script\&. Default value can be adjusted during build time using
\fBGITWEB_HOMETEXT\fR
variable\&. By default set to
\fIindextext\&.html\fR\&.
.RE
.PP
$projects_list_description_width
.RS 4
The width (in characters) of the "Description" column of the projects list\&. Longer descriptions will be truncated (trying to cut at word boundary); the full description is available in the
\fItitle\fR
attribute (usually shown on mouseover)\&. The default is 25, which might be too small if you use long project descriptions\&.
.RE
.PP
$default_projects_order
.RS 4
Default value of ordering of projects on projects list page, which means the ordering used if you don\(cqt explicitly sort projects list (if there is no "o" CGI query parameter in the URL)\&. Valid values are "none" (unsorted), "project" (projects are by project name, i\&.e\&. path to repository relative to
\fB$projectroot\fR), "descr" (project description), "owner", and "age" (by date of most current commit)\&.
.sp
Default value is "project"\&. Unknown value means unsorted\&.
.RE
.SS "Changing gitweb\(cqs behavior"
.sp
These configuration variables control \fIinternal\fR gitweb behavior\&.
.PP
$default_blob_plain_mimetype
.RS 4
Default mimetype for the blob_plain (raw) view, if mimetype checking doesn\(cqt result in some other type; by default "text/plain"\&. Gitweb guesses mimetype of a file to display based on extension of its filename, using
\fB$mimetypes_file\fR
(if set and file exists) and
\fB/etc/mime\&.types\fR
files (see
\fBmime\&.types\fR(5) manpage; only filename extension rules are supported by gitweb)\&.
.RE
.PP
$default_text_plain_charset
.RS 4
Default charset for text files\&. If this is not set, the web server configuration will be used\&. Unset by default\&.
.RE
.PP
$fallback_encoding
.RS 4
Gitweb assumes this charset when a line contains non\-UTF\-8 characters\&. The fallback decoding is used without error checking, so it can be even "utf\-8"\&. The value must be a valid encoding; see the
\fBEncoding::Supported\fR(3pm) man page for a list\&. The default is "latin1", aka\&. "iso\-8859\-1"\&.
.RE
.PP
@diff_opts
.RS 4
Rename detection options for git\-diff and git\-diff\-tree\&. The default is (\(aq\-M\(aq); set it to (\(aq\-C\(aq) or (\(aq\-C\(aq, \(aq\-C\(aq) to also detect copies, or set it to () i\&.e\&. empty list if you don\(cqt want to have renames detection\&.
.sp
\fBNote\fR
that rename and especially copy detection can be quite CPU\-intensive\&. Note also that non Git tools can have problems with patches generated with options mentioned above, especially when they involve file copies (\(aq\-C\(aq) or criss\-cross renames (\(aq\-B\(aq)\&.
.RE
.SS "Some optional features and policies"
.sp
Most of features are configured via \fB%feature\fR hash; however some of extra gitweb features can be turned on and configured using variables described below\&. This list beside configuration variables that control how gitweb looks does contain variables configuring administrative side of gitweb (e\&.g\&. cross\-site scripting prevention; admittedly this as side effect affects how "summary" pages look like, or load limiting)\&.
.PP
@git_base_url_list
.RS 4
List of Git base URLs\&. These URLs are used to generate URLs describing from where to fetch a project, which are shown on project summary page\&. The full fetch URL is "\fB$git_base_url/$project\fR", for each element of this list\&. You can set up multiple base URLs (for example one for
\fBgit://\fR
protocol, and one for
\fBhttp://\fR
protocol)\&.
.sp
Note that per repository configuration can be set in
\fB$GIT_DIR/cloneurl\fR
file, or as values of multi\-value
\fBgitweb\&.url\fR
configuration variable in project config\&. Per\-repository configuration takes precedence over value composed from
\fB@git_base_url_list\fR
elements and project name\&.
.sp
You can setup one single value (single entry/item in this list) at build time by setting the
\fBGITWEB_BASE_URL\fR
build\-time configuration variable\&. By default it is set to (), i\&.e\&. an empty list\&. This means that gitweb would not try to create project URL (to fetch) from project name\&.
.RE
.PP
$projects_list_group_categories
.RS 4
Whether to enable the grouping of projects by category on the project list page\&. The category of a project is determined by the
\fB$GIT_DIR/category\fR
file or the
\fBgitweb\&.category\fR
variable in each repository\(cqs configuration\&. Disabled by default (set to 0)\&.
.RE
.PP
$project_list_default_category
.RS 4
Default category for projects for which none is specified\&. If this is set to the empty string, such projects will remain uncategorized and listed at the top, above categorized projects\&. Used only if project categories are enabled, which means if
\fB$projects_list_group_categories\fR
is true\&. By default set to "" (empty string)\&.
.RE
.PP
$prevent_xss
.RS 4
If true, some gitweb features are disabled to prevent content in repositories from launching cross\-site scripting (XSS) attacks\&. Set this to true if you don\(cqt trust the content of your repositories\&. False by default (set to 0)\&.
.RE
.PP
$maxload
.RS 4
Used to set the maximum load that we will still respond to gitweb queries\&. If the server load exceeds this value then gitweb will return "503 Service Unavailable" error\&. The server load is taken to be 0 if gitweb cannot determine its value\&. Currently it works only on Linux, where it uses
\fB/proc/loadavg\fR; the load there is the number of active tasks on the system \(em processes that are actually running \(em averaged over the last minute\&.
.sp
Set
\fB$maxload\fR
to undefined value (\fBundef\fR) to turn this feature off\&. The default value is 300\&.
.RE
.PP
$omit_age_column
.RS 4
If true, omit the column with date of the most current commit on the projects list page\&. It can save a bit of I/O and a fork per repository\&.
.RE
.PP
$omit_owner
.RS 4
If true prevents displaying information about repository owner\&.
.RE
.PP
$per_request_config
.RS 4
If this is set to code reference, it will be run once for each request\&. You can set parts of configuration that change per session this way\&. For example, one might use the following code in a gitweb configuration file
.sp
.if n \{\
.RS 4
.\}
.nf
our $per_request_config = sub {
        $ENV{GL_USER} = $cgi\->remote_user || "gitweb";
};
.fi
.if n \{\
.RE
.\}
.sp
If
\fB$per_request_config\fR
is not a code reference, it is interpreted as boolean value\&. If it is true gitweb will process config files once per request, and if it is false gitweb will process config files only once, each time it is executed\&. True by default (set to 1)\&.
.sp
\fBNOTE\fR:
\fB$my_url\fR,
\fB$my_uri\fR, and
\fB$base_url\fR
are overwritten with their default values before every request, so if you want to change them, be sure to set this variable to true or a code reference effecting the desired changes\&.
.sp
This variable matters only when using persistent web environments that serve multiple requests using single gitweb instance, like mod_perl, FastCGI or Plackup\&.
.RE
.SS "Other variables"
.sp
Usually you should not need to change (adjust) any of configuration variables described below; they should be automatically set by gitweb to correct value\&.
.PP
$version
.RS 4
Gitweb version, set automatically when creating gitweb\&.cgi from gitweb\&.perl\&. You might want to modify it if you are running modified gitweb, for example
.sp
.if n \{\
.RS 4
.\}
.nf
our $version \&.= " with caching";
.fi
.if n \{\
.RE
.\}
.sp
if you run modified version of gitweb with caching support\&. This variable is purely informational, used e\&.g\&. in the "generator" meta header in HTML header\&.
.RE
.PP
$my_url, $my_uri
.RS 4
Full URL and absolute URL of the gitweb script; in earlier versions of gitweb you might have need to set those variables, but now there should be no need to do it\&. See
\fB$per_request_config\fR
if you need to set them still\&.
.RE
.PP
$base_url
.RS 4
Base URL for relative URLs in pages generated by gitweb, (e\&.g\&.
\fB$logo\fR,
\fB$favicon\fR,
\fB@stylesheets\fR
if they are relative URLs), needed and used
\fI<base href="$base_url">\fR
only for URLs with nonempty PATH_INFO\&. Usually gitweb sets its value correctly, and there is no need to set this variable, e\&.g\&. to $my_uri or "/"\&. See
\fB$per_request_config\fR
if you need to override it anyway\&.
.RE
.SH "CONFIGURING GITWEB FEATURES"
.sp
Many gitweb features can be enabled (or disabled) and configured using the \fB%feature\fR hash\&. Names of gitweb features are keys of this hash\&.
.sp
Each \fB%feature\fR hash element is a hash reference and has the following structure:
.sp
.if n \{\
.RS 4
.\}
.nf
"<feature_name>" => {
        "sub" => <feature\-sub (subroutine)>,
        "override" => <allow\-override (boolean)>,
        "default" => [ <options>\&.\&.\&. ]
},
.fi
.if n \{\
.RE
.\}
.sp
.sp
Some features cannot be overridden per project\&. For those features the structure of appropriate \fB%feature\fR hash element has a simpler form:
.sp
.if n \{\
.RS 4
.\}
.nf
"<feature_name>" => {
        "override" => 0,
        "default" => [ <options>\&.\&.\&. ]
},
.fi
.if n \{\
.RE
.\}
.sp
.sp
As one can see it lacks the \(aqsub\(aq element\&.
.sp
The meaning of each part of feature configuration is described below:
.PP
default
.RS 4
List (array reference) of feature parameters (if there are any), used also to toggle (enable or disable) given feature\&.
.sp
Note that it is currently
\fBalways\fR
an array reference, even if feature doesn\(cqt accept any configuration parameters, and \(aqdefault\(aq is used only to turn it on or off\&. In such case you turn feature on by setting this element to
\fB[1]\fR, and torn it off by setting it to
\fB[0]\fR\&. See also the passage about the "blame" feature in the "Examples" section\&.
.sp
To disable features that accept parameters (are configurable), you need to set this element to empty list i\&.e\&.
\fB[]\fR\&.
.RE
.PP
override
.RS 4
If this field has a true value then the given feature is overridable, which means that it can be configured (or enabled/disabled) on a per\-repository basis\&.
.sp
Usually given "<feature>" is configurable via the
\fBgitweb\&.<feature>\fR
config variable in the per\-repository Git configuration file\&.
.sp
\fBNote\fR
that no feature is overridable by default\&.
.RE
.PP
sub
.RS 4
Internal detail of implementation\&. What is important is that if this field is not present then per\-repository override for given feature is not supported\&.
.sp
You wouldn\(cqt need to ever change it in gitweb config file\&.
.RE
.SS "Features in \fB%feature\fR"
.sp
The gitweb features that are configurable via \fB%feature\fR hash are listed below\&. This should be a complete list, but ultimately the authoritative and complete list is in gitweb\&.cgi source code, with features described in the comments\&.
.PP
blame
.RS 4
Enable the "blame" and "blame_incremental" blob views, showing for each line the last commit that modified it; see
\fBgit-blame\fR(1)\&. This can be very CPU\-intensive and is therefore disabled by default\&.
.sp
This feature can be configured on a per\-repository basis via repository\(cqs
\fBgitweb\&.blame\fR
configuration variable (boolean)\&.
.RE
.PP
snapshot
.RS 4
Enable and configure the "snapshot" action, which allows user to download a compressed archive of any tree or commit, as produced by
\fBgit-archive\fR(1)
and possibly additionally compressed\&. This can potentially generate high traffic if you have large project\&.
.sp
The value of \(aqdefault\(aq is a list of names of snapshot formats, defined in
\fB%known_snapshot_formats\fR
hash, that you wish to offer\&. Supported formats include "tgz", "tbz2", "txz" (gzip/bzip2/xz compressed tar archive) and "zip"; please consult gitweb sources for a definitive list\&. By default only "tgz" is offered\&.
.sp
This feature can be configured on a per\-repository basis via repository\(cqs
\fBgitweb\&.snapshot\fR
configuration variable, which contains a comma separated list of formats or "none" to disable snapshots\&. Unknown values are ignored\&.
.RE
.PP
grep
.RS 4
Enable grep search, which lists the files in currently selected tree (directory) containing the given string; see
\fBgit-grep\fR(1)\&. This can be potentially CPU\-intensive, of course\&. Enabled by default\&.
.sp
This feature can be configured on a per\-repository basis via repository\(cqs
\fBgitweb\&.grep\fR
configuration variable (boolean)\&.
.RE
.PP
pickaxe
.RS 4
Enable the so called pickaxe search, which will list the commits that introduced or removed a given string in a file\&. This can be practical and quite faster alternative to "blame" action, but it is still potentially CPU\-intensive\&. Enabled by default\&.
.sp
The pickaxe search is described in
\fBgit-log\fR(1)
(the description of
\fB\-S<string>\fR
option, which refers to pickaxe entry in
\fBgitdiffcore\fR(7)
for more details)\&.
.sp
This feature can be configured on a per\-repository basis by setting repository\(cqs
\fBgitweb\&.pickaxe\fR
configuration variable (boolean)\&.
.RE
.PP
show\-sizes
.RS 4
Enable showing size of blobs (ordinary files) in a "tree" view, in a separate column, similar to what
\fBls \-l\fR
does; see description of
\fB\-l\fR
option in
\fBgit-ls-tree\fR(1)
manpage\&. This costs a bit of I/O\&. Enabled by default\&.
.sp
This feature can be configured on a per\-repository basis via repository\(cqs
\fBgitweb\&.showSizes\fR
configuration variable (boolean)\&.
.RE
.PP
patches
.RS 4
Enable and configure "patches" view, which displays list of commits in email (plain text) output format; see also
\fBgit-format-patch\fR(1)\&. The value is the maximum number of patches in a patchset generated in "patches" view\&. Set the
\fIdefault\fR
field to a list containing single item of or to an empty list to disable patch view, or to a list containing a single negative number to remove any limit\&. Default value is 16\&.
.sp
This feature can be configured on a per\-repository basis via repository\(cqs
\fBgitweb\&.patches\fR
configuration variable (integer)\&.
.RE
.PP
avatar
.RS 4
Avatar support\&. When this feature is enabled, views such as "shortlog" or "commit" will display an avatar associated with the email of each committer and author\&.
.sp
Currently available providers are
\fB"gravatar"\fR
and
\fB"picon"\fR\&. Only one provider at a time can be selected (\fIdefault\fR
is one element list)\&. If an unknown provider is specified, the feature is disabled\&.
\fBNote\fR
that some providers might require extra Perl packages to be installed; see
\fBgitweb/INSTALL\fR
for more details\&.
.sp
This feature can be configured on a per\-repository basis via repository\(cqs
\fBgitweb\&.avatar\fR
configuration variable\&.
.sp
See also
\fB%avatar_size\fR
with pixel sizes for icons and avatars ("default" is used for one\-line like "log" and "shortlog", "double" is used for two\-line like "commit", "commitdiff" or "tag")\&. If the default font sizes or lineheights are changed (e\&.g\&. via adding extra CSS stylesheet in
\fB@stylesheets\fR), it may be appropriate to change these values\&.
.RE
.PP
email\-privacy
.RS 4
Redact e\-mail addresses from the generated HTML, etc\&. content\&. This obscures e\-mail addresses retrieved from the author/committer and comment sections of the Git log\&. It is meant to hinder web crawlers that harvest and abuse addresses\&. Such crawlers may not respect robots\&.txt\&. Note that users and user tools also see the addresses as redacted\&. If Gitweb is not the final step in a workflow then subsequent steps may misbehave because of the redacted information they receive\&. Disabled by default\&.
.RE
.PP
highlight
.RS 4
Server\-side syntax highlight support in "blob" view\&. It requires
\fB$highlight_bin\fR
program to be available (see the description of this variable in the "Configuration variables" section above), and therefore is disabled by default\&.
.sp
This feature can be configured on a per\-repository basis via repository\(cqs
\fBgitweb\&.highlight\fR
configuration variable (boolean)\&.
.RE
.PP
remote_heads
.RS 4
Enable displaying remote heads (remote\-tracking branches) in the "heads" list\&. In most cases the list of remote\-tracking branches is an unnecessary internal private detail, and this feature is therefore disabled by default\&.
\fBgit-instaweb\fR(1), which is usually used to browse local repositories, enables and uses this feature\&.
.sp
This feature can be configured on a per\-repository basis via repository\(cqs
\fBgitweb\&.remote_heads\fR
configuration variable (boolean)\&.
.RE
.sp
The remaining features cannot be overridden on a per project basis\&.
.PP
search
.RS 4
Enable text search, which will list the commits which match author, committer or commit text to a given string; see the description of
\fB\-\-author\fR,
\fB\-\-committer\fR
and
\fB\-\-grep\fR
options in
\fBgit-log\fR(1)
manpage\&. Enabled by default\&.
.sp
Project specific override is not supported\&.
.RE
.PP
forks
.RS 4
If this feature is enabled, gitweb considers projects in subdirectories of project root (basename) to be forks of existing projects\&. For each project
\fB$projname\&.git\fR, projects in the
\fB$projname/\fR
directory and its subdirectories will not be shown in the main projects list\&. Instead, a \(aq+\(aq mark is shown next to
\fB$projname\fR, which links to a "forks" view that lists all the forks (all projects in
\fB$projname/\fR
subdirectory)\&. Additionally a "forks" view for a project is linked from project summary page\&.
.sp
If the project list is taken from a file (\fB$projects_list\fR
points to a file), forks are only recognized if they are listed after the main project in that file\&.
.sp
Project specific override is not supported\&.
.RE
.PP
actions
.RS 4
Insert custom links to the action bar of all project pages\&. This allows you to link to third\-party scripts integrating into gitweb\&.
.sp
The "default" value consists of a list of triplets in the form \(oq("<label>", "<link>", "<position>")` where "position" is the label after which to insert the link, "link" is a format string where
\fB%n\fR
expands to the project name,
\fB%f\fR
to the project path within the filesystem (i\&.e\&. "$projectroot/$project"),
\fB%h\fR
to the current hash (\(aqh\(cq gitweb parameter) and \(oq%b` to the current hash base (\(aqhb\(cq gitweb parameter); \(oq%%` expands to \(aq%\(cq\&.
.sp
For example, at the time this page was written, the
\m[blue]\fBhttp://repo\&.or\&.cz\fR\m[]
Git hosting site set it to the following to enable graphical log (using the third party tool
\fBgit\-browser\fR):
.sp
.if n \{\
.RS 4
.\}
.nf
$feature{\(aqactions\(aq}{\(aqdefault\(aq} =
        [ (\(aqgraphiclog\(aq, \(aq/git\-browser/by\-commit\&.html?r=%n\(aq, \(aqsummary\(aq)];
.fi
.if n \{\
.RE
.\}
.sp
This adds a link titled "graphiclog" after the "summary" link, leading to
\fBgit\-browser\fR
script, passing
\fBr=<project>\fR
as a query parameter\&.
.sp
Project specific override is not supported\&.
.RE
.PP
timed
.RS 4
Enable displaying how much time and how many Git commands it took to generate and display each page in the page footer (at the bottom of page)\&. For example the footer might contain: "This page took 6\&.53325 seconds and 13 Git commands to generate\&." Disabled by default\&.
.sp
Project specific override is not supported\&.
.RE
.PP
javascript\-timezone
.RS 4
Enable and configure the ability to change a common time zone for dates in gitweb output via JavaScript\&. Dates in gitweb output include authordate and committerdate in "commit", "commitdiff" and "log" views, and taggerdate in "tag" view\&. Enabled by default\&.
.sp
The value is a list of three values: a default time zone (for if the client hasn\(cqt selected some other time zone and saved it in a cookie), a name of cookie where to store selected time zone, and a CSS class used to mark up dates for manipulation\&. If you want to turn this feature off, set "default" to empty list:
\fB[]\fR\&.
.sp
Typical gitweb config files will only change starting (default) time zone, and leave other elements at their default values:
.sp
.if n \{\
.RS 4
.\}
.nf
$feature{\(aqjavascript\-timezone\(aq}{\(aqdefault\(aq}[0] = "utc";
.fi
.if n \{\
.RE
.\}
.sp
The example configuration presented here is guaranteed to be backwards and forward compatible\&.
.sp
Time zone values can be "local" (for local time zone that browser uses), "utc" (what gitweb uses when JavaScript or this feature is disabled), or numerical time zones in the form of "+/\-HHMM", such as "+0200"\&.
.sp
Project specific override is not supported\&.
.RE
.PP
extra\-branch\-refs
.RS 4
List of additional directories under "refs" which are going to be used as branch refs\&. For example if you have a gerrit setup where all branches under refs/heads/ are official, push\-after\-review ones and branches under refs/sandbox/, refs/wip and refs/other are user ones where permissions are much wider, then you might want to set this variable as follows:
.sp
.if n \{\
.RS 4
.\}
.nf
$feature{\(aqextra\-branch\-refs\(aq}{\(aqdefault\(aq} =
        [\(aqsandbox\(aq, \(aqwip\(aq, \(aqother\(aq];
.fi
.if n \{\
.RE
.\}
.sp
This feature can be configured on per\-repository basis after setting $feature{\fIextra\-branch\-refs\fR}{\fIoverride\fR} to true, via repository\(cqs
\fBgitweb\&.extraBranchRefs\fR
configuration variable, which contains a space separated list of refs\&. An example:
.sp
.if n \{\
.RS 4
.\}
.nf
[gitweb]
        extraBranchRefs = sandbox wip other
.fi
.if n \{\
.RE
.\}
.sp
The gitweb\&.extraBranchRefs is actually a multi\-valued configuration variable, so following example is also correct and the result is the same as of the snippet above:
.sp
.if n \{\
.RS 4
.\}
.nf
[gitweb]
        extraBranchRefs = sandbox
        extraBranchRefs = wip other
.fi
.if n \{\
.RE
.\}
.sp
It is an error to specify a ref that does not pass "git check\-ref\-format" scrutiny\&. Duplicated values are filtered\&.
.RE
.SH "EXAMPLES"
.sp
To enable blame, pickaxe search, and snapshot support (allowing "tar\&.gz" and "zip" snapshots), while allowing individual projects to turn them off, put the following in your GITWEB_CONFIG file:
.sp
.if n \{\
.RS 4
.\}
.nf
$feature{\(aqblame\(aq}{\(aqdefault\(aq} = [1];
$feature{\(aqblame\(aq}{\(aqoverride\(aq} = 1;

$feature{\(aqpickaxe\(aq}{\(aqdefault\(aq} = [1];
$feature{\(aqpickaxe\(aq}{\(aqoverride\(aq} = 1;

$feature{\(aqsnapshot\(aq}{\(aqdefault\(aq} = [\(aqzip\(aq, \(aqtgz\(aq];
$feature{\(aqsnapshot\(aq}{\(aqoverride\(aq} = 1;
.fi
.if n \{\
.RE
.\}
.sp
.sp
If you allow overriding for the snapshot feature, you can specify which snapshot formats are globally disabled\&. You can also add any command\-line options you want (such as setting the compression level)\&. For instance, you can disable Zip compressed snapshots and set \fBgzip\fR(1) to run at level 6 by adding the following lines to your gitweb configuration file:
.sp
.if n \{\
.RS 4
.\}
.nf
$known_snapshot_formats{\(aqzip\(aq}{\(aqdisabled\(aq} = 1;
$known_snapshot_formats{\(aqtgz\(aq}{\(aqcompressor\(aq} = [\(aqgzip\(aq,\(aq\-6\(aq];
.fi
.if n \{\
.RE
.\}
.SH "BUGS"
.sp
Debugging would be easier if the fallback configuration file (\fB/etc/gitweb\&.conf\fR) and environment variable to override its location (\fIGITWEB_CONFIG_SYSTEM\fR) had names reflecting their "fallback" role\&. The current names are kept to avoid breaking working setups\&.
.SH "ENVIRONMENT"
.sp
The location of per\-instance and system\-wide configuration files can be overridden using the following environment variables:
.PP
GITWEB_CONFIG
.RS 4
Sets location of per\-instance configuration file\&.
.RE
.PP
GITWEB_CONFIG_SYSTEM
.RS 4
Sets location of fallback system\-wide configuration file\&. This file is read only if per\-instance one does not exist\&.
.RE
.PP
GITWEB_CONFIG_COMMON
.RS 4
Sets location of common system\-wide configuration file\&.
.RE
.SH "FILES"
.PP
gitweb_config\&.perl
.RS 4
This is default name of per\-instance configuration file\&. The format of this file is described above\&.
.RE
.PP
/etc/gitweb\&.conf
.RS 4
This is default name of fallback system\-wide configuration file\&. This file is used only if per\-instance configuration variable is not found\&.
.RE
.PP
/etc/gitweb\-common\&.conf
.RS 4
This is default name of common system\-wide configuration file\&.
.RE
.SH "SEE ALSO"
.sp
\fBgitweb\fR(1), \fBgit-instaweb\fR(1)
.sp
\fIgitweb/README\fR, \fIgitweb/INSTALL\fR
.SH "GIT"
.sp
Part of the \fBgit\fR(1) suite
