| gitweb.conf(5) | |
| ============== | |
| NAME | |
| ---- | |
| gitweb.conf - Gitweb (Git web interface) configuration file | |
| SYNOPSIS | |
| -------- | |
| /etc/gitweb.conf, /etc/gitweb-common.conf, $GITWEBDIR/gitweb_config.perl | |
| DESCRIPTION | |
| ----------- | |
| 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 "`our $variable = value`"; text from a "#" character until the | |
| end of a line is ignored. See *perlsyn*(1) for details. | |
| An example: | |
| # gitweb configuration file for http://git.example.org | |
| # | |
| our $projectroot = "/srv/git"; # FHS recommendation | |
| our $site_name = 'Example.org >> Repos'; | |
| The configuration file is used to override the default settings that | |
| were built into gitweb at the time the 'gitweb.cgi' script was generated. | |
| 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 'gitweb_config.perl' -- allowing | |
| one to have multiple gitweb instances with different configurations by | |
| the use of symlinks. | |
| Note that some configuration can be controlled on per-repository rather than | |
| gitweb-wide basis: see "Per-repository gitweb configuration" subsection on | |
| linkgit:gitweb[1] manpage. | |
| DISCUSSION | |
| ---------- | |
| Gitweb reads configuration data from the following sources in the | |
| following order: | |
| * built-in values (some set during build stage), | |
| * common system-wide configuration file (defaults to | |
| '/etc/gitweb-common.conf'), | |
| * either per-instance configuration file (defaults to 'gitweb_config.perl' | |
| in the same directory as the installed gitweb), or if it does not exists | |
| then fallback system-wide configuration file (defaults to '/etc/gitweb.conf'). | |
| Values obtained in later configuration files override values obtained earlier | |
| in the above sequence. | |
| 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 `GITWEB_CONFIG_COMMON`, `GITWEB_CONFIG_SYSTEM` | |
| and `GITWEB_CONFIG`. | |
| You can also override locations of gitweb configuration files during | |
| runtime by setting the following environment variables: | |
| `GITWEB_CONFIG_COMMON`, `GITWEB_CONFIG_SYSTEM` and `GITWEB_CONFIG` | |
| to a non-empty value. | |
| 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 | |
| `our` qualifier (as in "`our $variable = <value>;`") to avoid syntax | |
| errors if a new version of gitweb no longer uses a variable and therefore | |
| stops declaring it. | |
| 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 | |
| '/etc/gitweb-gitolite.conf'. To include it, put | |
| -------------------------------------------------- | |
| read_config_file("/etc/gitweb-gitolite.conf"); | |
| -------------------------------------------------- | |
| 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. | |
| 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 `%features` variable (see also "Configuring gitweb | |
| features" section below). | |
| CONFIGURATION VARIABLES | |
| ----------------------- | |
| Some configuration variables have their default values (embedded in the CGI | |
| script) set during building gitweb -- if that is the case, this fact is put | |
| in their description. See gitweb's 'INSTALL' file for instructions on building | |
| and installing gitweb. | |
| Location of repositories | |
| ~~~~~~~~~~~~~~~~~~~~~~~~ | |
| The configuration variables described below control how gitweb finds | |
| Git repositories, and how repositories are displayed and accessed. | |
| See also "Repositories" and later subsections in linkgit:gitweb[1] manpage. | |
| $projectroot:: | |
| Absolute filesystem path which will be prepended to project path; | |
| the path to repository is `$projectroot/$project`. Set to | |
| `$GITWEB_PROJECTROOT` during installation. This variable has to be | |
| set correctly for gitweb to find repositories. | |
| + | |
| For example, if `$projectroot` is set to "/srv/git" by putting the following | |
| in gitweb config file: | |
| + | |
| ---------------------------------------------------------------------------- | |
| our $projectroot = "/srv/git"; | |
| ---------------------------------------------------------------------------- | |
| + | |
| then | |
| + | |
| ------------------------------------------------ | |
| http://git.example.com/gitweb.cgi?p=foo/bar.git | |
| ------------------------------------------------ | |
| + | |
| and its path_info based equivalent | |
| + | |
| ------------------------------------------------ | |
| http://git.example.com/gitweb.cgi/foo/bar.git | |
| ------------------------------------------------ | |
| + | |
| will map to the path '/srv/git/foo/bar.git' on the filesystem. | |
| $projects_list:: | |
| Name of a plain text file listing projects, or a name of directory | |
| to be scanned for projects. | |
| + | |
| Project list files should list one project per line, with each line | |
| having the following format | |
| + | |
| ----------------------------------------------------------------------------- | |
| <URI-encoded filesystem path to repository> SP <URI-encoded repository owner> | |
| ----------------------------------------------------------------------------- | |
| + | |
| The default value of this variable is determined by the `GITWEB_LIST` | |
| makefile variable at installation time. If this variable is empty, gitweb | |
| will fall back to scanning the `$projectroot` directory for repositories. | |
| $project_maxdepth:: | |
| If `$projects_list` variable is unset, gitweb will recursively | |
| scan filesystem for Git repositories. The `$project_maxdepth` | |
| is used to limit traversing depth, relative to `$projectroot` | |
| (starting point); it means that directories which are further | |
| from `$projectroot` than `$project_maxdepth` will be skipped. | |
| + | |
| 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. | |
| + | |
| The default value of this variable is determined by the build-time | |
| configuration variable `GITWEB_PROJECT_MAXDEPTH`, which defaults to | |
| 2007. | |
| $export_ok:: | |
| 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 `GITWEB_EXPORT_OK`. This path is | |
| relative to `GIT_DIR`. git-daemon[1] uses 'git-daemon-export-ok', | |
| unless started with `--export-all`. By default this variable is | |
| not set, which means that this feature is turned off. | |
| $export_auth_hook:: | |
| 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: | |
| + | |
| ---------------------------------------------------------------------------- | |
| our $export_auth_hook = sub { return -e "$_[0]/git-daemon-export-ok"; }; | |
| ---------------------------------------------------------------------------- | |
| + | |
| though the above might be done by using `$export_ok` instead | |
| + | |
| ---------------------------------------------------------------------------- | |
| our $export_ok = "git-daemon-export-ok"; | |
| ---------------------------------------------------------------------------- | |
| + | |
| If not set (default), it means that this feature is disabled. | |
| + | |
| See also more involved example in "Controlling access to Git repositories" | |
| subsection on linkgit:gitweb[1] manpage. | |
| $strict_export:: | |
| Only allow viewing of repositories also shown on the overview page. | |
| This for example makes `$gitweb_export_ok` file decide if repository is | |
| available and not only if it is shown. If `$gitweb_list` points to | |
| file with list of project, only those repositories listed would be | |
| available for gitweb. Can be set during building gitweb via | |
| `GITWEB_STRICT_EXPORT`. 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). | |
| Finding files | |
| ~~~~~~~~~~~~~ | |
| The following configuration variables tell gitweb where to find files. | |
| The values of these variables are paths on the filesystem. | |
| $GIT:: | |
| Core git executable to use. By default set to `$GIT_BINDIR/git`, which | |
| in turn is by default set to `$(bindir)/git`. 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. | |
| $mimetypes_file:: | |
| File to use for (filename extension based) guessing of MIME types before | |
| trying '/etc/mime.types'. *NOTE* that this path, if relative, is taken | |
| as relative to the current Git repository, not to CGI script. If unset, | |
| only '/etc/mime.types' is used (if present on filesystem). If no mimetypes | |
| file is found, mimetype guessing based on extension of file is disabled. | |
| Unset by default. | |
| $highlight_bin:: | |
| Path to the highlight executable to use (it must be the one from | |
| http://www.andre-simon.de[] due to assumptions about parameters and output). | |
| By default set to 'highlight'; set it to full path to highlight | |
| executable if it is not installed on your web server's PATH. | |
| Note that 'highlight' feature must be set for gitweb to actually | |
| use syntax highlighting. | |
| + | |
| *NOTE*: 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 `%highlight_basename` and | |
| `%highlight_ext`, 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 `--syntax <syntax>` | |
| to "highlight". The last priority is the "highlight" configuration of | |
| `Shebang` 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. | |
| + | |
| 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: | |
| + | |
| --------------------------------------------------------- | |
| our %highlight_ext; | |
| $highlight_ext{'phtml'} = 'php'; | |
| --------------------------------------------------------- | |
| Links and their targets | |
| ~~~~~~~~~~~~~~~~~~~~~~~ | |
| 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 `@stylesheets` | |
| variable. | |
| @stylesheets:: | |
| 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 `site` stylesheet by putting | |
| + | |
| ---------------------------------------------------------------------------- | |
| push @stylesheets, "gitweb-site.css"; | |
| ---------------------------------------------------------------------------- | |
| + | |
| in the gitweb config file. Those values that are relative paths are | |
| relative to base URI of gitweb. | |
| + | |
| This list should contain the URI of gitweb's standard stylesheet. The default | |
| URI of gitweb stylesheet can be set at build time using the `GITWEB_CSS` | |
| makefile variable. Its default value is 'static/gitweb.css' | |
| (or 'static/gitweb.min.css' if the `CSSMIN` variable is defined, | |
| i.e. if CSS minifier is used during build). | |
| + | |
| *Note*: there is also a legacy `$stylesheet` configuration variable, which was | |
| used by older gitweb. If `$stylesheet` variable is defined, only CSS stylesheet | |
| given by this variable is used by gitweb. | |
| $logo:: | |
| Points to the location where you put 'git-logo.png' 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 `GITWEB_LOGO` variable | |
| By default set to 'static/git-logo.png'. | |
| $favicon:: | |
| Points to the location where you put 'git-favicon.png' 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's URL bar and next to the site name in | |
| bookmarks. Relative to the base URI of gitweb. Can be adjusted at | |
| build time using `GITWEB_FAVICON` variable. | |
| By default set to 'static/git-favicon.png'. | |
| $javascript:: | |
| Points to the location where you put 'gitweb.js' 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 `GITWEB_JS` build-time configuration variable. | |
| + | |
| The default value is either 'static/gitweb.js', or 'static/gitweb.min.js' if | |
| the `JSMIN` build variable was defined, i.e. if JavaScript minifier was used | |
| at build time. *Note* that this single file is generated from multiple | |
| individual JavaScript "modules". | |
| $home_link:: | |
| 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 `$my_uri` variable, or to "/" if `$my_uri` is undefined | |
| or is an empty string). | |
| $home_link_str:: | |
| Label for the "home link" at the top of all pages, leading to `$home_link` | |
| (usually the main gitweb page, which contains the projects list). It is | |
| used as the first component of gitweb's "breadcrumb trail": | |
| `<home link> / <project> / <action>`. Can be set at build time using | |
| the `GITWEB_HOME_LINK_STR` 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. | |
| @extra_breadcrumbs:: | |
| 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 `$home_link_str`) and element | |
| 1 is the target URL (equivalent to `$home_link`). | |
| + | |
| For example, the following setting produces a breadcrumb trail like | |
| "home / dev / projects / ..." where "projects" is the home link. | |
| ---------------------------------------------------------------------------- | |
| our @extra_breadcrumbs = ( | |
| [ 'home' => 'https://www.example.org/' ], | |
| [ 'dev' => 'https://dev.example.org/' ], | |
| ); | |
| ---------------------------------------------------------------------------- | |
| $logo_url:: | |
| $logo_label:: | |
| 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, https://git-scm.com[]; in the past, they pointed | |
| to Git documentation at https://www.kernel.org[]. | |
| Changing gitweb's look | |
| ~~~~~~~~~~~~~~~~~~~~~~ | |
| 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. | |
| $site_name:: | |
| 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 `SERVER_NAME` | |
| `CGI` 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). | |
| + | |
| Can be set using the `GITWEB_SITENAME` at build time. Unset by default. | |
| $site_html_head_string:: | |
| HTML snippet to be included in the <head> section of each page. | |
| Can be set using `GITWEB_SITE_HTML_HEAD_STRING` at build time. | |
| No default value. | |
| $site_header:: | |
| Name of a file with HTML to be included at the top of each page. | |
| Relative to the directory containing the 'gitweb.cgi' script. | |
| Can be set using `GITWEB_SITE_HEADER` at build time. No default | |
| value. | |
| $site_footer:: | |
| Name of a file with HTML to be included at the bottom of each page. | |
| Relative to the directory containing the 'gitweb.cgi' script. | |
| Can be set using `GITWEB_SITE_FOOTER` at build time. No default | |
| value. | |
| $home_text:: | |
| 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 `GITWEB_HOMETEXT` variable. | |
| By default set to 'indextext.html'. | |
| $projects_list_description_width:: | |
| 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 'title' attribute (usually shown on | |
| mouseover). The default is 25, which might be too small if you | |
| use long project descriptions. | |
| $default_projects_order:: | |
| Default value of ordering of projects on projects list page, which | |
| means the ordering used if you don't 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 `$projectroot`), "descr" | |
| (project description), "owner", and "age" (by date of most current | |
| commit). | |
| + | |
| Default value is "project". Unknown value means unsorted. | |
| Changing gitweb's behavior | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| These configuration variables control _internal_ gitweb behavior. | |
| $default_blob_plain_mimetype:: | |
| Default mimetype for the blob_plain (raw) view, if mimetype checking | |
| doesn't result in some other type; by default "text/plain". | |
| Gitweb guesses mimetype of a file to display based on extension | |
| of its filename, using `$mimetypes_file` (if set and file exists) | |
| and '/etc/mime.types' files (see *mime.types*(5) manpage; only | |
| filename extension rules are supported by gitweb). | |
| $default_text_plain_charset:: | |
| Default charset for text files. If this is not set, the web server | |
| configuration will be used. Unset by default. | |
| $fallback_encoding:: | |
| 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 *Encoding::Supported*(3pm) | |
| man page for a list. The default is "latin1", aka. "iso-8859-1". | |
| @diff_opts:: | |
| Rename detection options for git-diff and git-diff-tree. The default is | |
| (\'-M'); set it to (\'-C') or (\'-C', \'-C') to also detect copies, | |
| or set it to () i.e. empty list if you don't want to have renames | |
| detection. | |
| + | |
| *Note* 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 (\'-C') or criss-cross renames (\'-B'). | |
| Some optional features and policies | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| Most of features are configured via `%feature` 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). | |
| @git_base_url_list:: | |
| 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 "`$git_base_url/$project`", | |
| for each element of this list. You can set up multiple base URLs | |
| (for example one for `git://` protocol, and one for `http://` | |
| protocol). | |
| + | |
| Note that per repository configuration can be set in '$GIT_DIR/cloneurl' | |
| file, or as values of multi-value `gitweb.url` configuration variable in | |
| project config. Per-repository configuration takes precedence over value | |
| composed from `@git_base_url_list` elements and project name. | |
| + | |
| You can setup one single value (single entry/item in this list) at build | |
| time by setting the `GITWEB_BASE_URL` 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. | |
| $projects_list_group_categories:: | |
| Whether to enable the grouping of projects by category on the project | |
| list page. The category of a project is determined by the | |
| `$GIT_DIR/category` file or the `gitweb.category` variable in each | |
| repository's configuration. Disabled by default (set to 0). | |
| $project_list_default_category:: | |
| 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 `$projects_list_group_categories` | |
| is true. By default set to "" (empty string). | |
| $prevent_xss:: | |
| 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't trust the content of your repositories. | |
| False by default (set to 0). | |
| $maxload:: | |
| 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 '/proc/loadavg'; the load there is the number of active | |
| tasks on the system -- processes that are actually running -- averaged | |
| over the last minute. | |
| + | |
| Set `$maxload` to undefined value (`undef`) to turn this feature off. | |
| The default value is 300. | |
| $omit_age_column:: | |
| 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. | |
| $omit_owner:: | |
| If true prevents displaying information about repository owner. | |
| $per_request_config:: | |
| 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 | |
| + | |
| -------------------------------------------------------------------------------- | |
| our $per_request_config = sub { | |
| $ENV{GL_USER} = $cgi->remote_user || "gitweb"; | |
| }; | |
| -------------------------------------------------------------------------------- | |
| + | |
| If `$per_request_config` 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). | |
| + | |
| *NOTE*: `$my_url`, `$my_uri`, and `$base_url` 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. | |
| + | |
| This variable matters only when using persistent web environments that | |
| serve multiple requests using single gitweb instance, like mod_perl, | |
| FastCGI or Plackup. | |
| Other variables | |
| ~~~~~~~~~~~~~~~ | |
| Usually you should not need to change (adjust) any of configuration | |
| variables described below; they should be automatically set by gitweb to | |
| correct value. | |
| $version:: | |
| 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 | |
| + | |
| --------------------------------------------------- | |
| our $version .= " with caching"; | |
| --------------------------------------------------- | |
| + | |
| 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. | |
| $my_url:: | |
| $my_uri:: | |
| 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 | |
| `$per_request_config` if you need to set them still. | |
| $base_url:: | |
| Base URL for relative URLs in pages generated by gitweb, | |
| (e.g. `$logo`, `$favicon`, `@stylesheets` if they are relative URLs), | |
| needed and used '<base href="$base_url">' 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 `$per_request_config` if you need to override it anyway. | |
| CONFIGURING GITWEB FEATURES | |
| --------------------------- | |
| Many gitweb features can be enabled (or disabled) and configured using the | |
| `%feature` hash. Names of gitweb features are keys of this hash. | |
| Each `%feature` hash element is a hash reference and has the following | |
| structure: | |
| ---------------------------------------------------------------------- | |
| "<feature_name>" => { | |
| "sub" => <feature-sub (subroutine)>, | |
| "override" => <allow-override (boolean)>, | |
| "default" => [ <options>... ] | |
| }, | |
| ---------------------------------------------------------------------- | |
| Some features cannot be overridden per project. For those | |
| features the structure of appropriate `%feature` hash element has a simpler | |
| form: | |
| ---------------------------------------------------------------------- | |
| "<feature_name>" => { | |
| "override" => 0, | |
| "default" => [ <options>... ] | |
| }, | |
| ---------------------------------------------------------------------- | |
| As one can see it lacks the \'sub' element. | |
| The meaning of each part of feature configuration is described | |
| below: | |
| default:: | |
| List (array reference) of feature parameters (if there are any), | |
| used also to toggle (enable or disable) given feature. | |
| + | |
| Note that it is currently *always* an array reference, even if | |
| feature doesn't accept any configuration parameters, and \'default' | |
| is used only to turn it on or off. In such case you turn feature on | |
| by setting this element to `[1]`, and torn it off by setting it to | |
| `[0]`. See also the passage about the "blame" feature in the "Examples" | |
| section. | |
| + | |
| To disable features that accept parameters (are configurable), you | |
| need to set this element to empty list i.e. `[]`. | |
| override:: | |
| 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. | |
| + | |
| Usually given "<feature>" is configurable via the `gitweb.<feature>` | |
| config variable in the per-repository Git configuration file. | |
| + | |
| *Note* that no feature is overridable by default. | |
| sub:: | |
| 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. | |
| + | |
| You wouldn't need to ever change it in gitweb config file. | |
| Features in `%feature` | |
| ~~~~~~~~~~~~~~~~~~~~~~ | |
| The gitweb features that are configurable via `%feature` 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. | |
| blame:: | |
| Enable the "blame" and "blame_incremental" blob views, showing for | |
| each line the last commit that modified it; see linkgit:git-blame[1]. | |
| This can be very CPU-intensive and is therefore disabled by default. | |
| + | |
| This feature can be configured on a per-repository basis via | |
| repository's `gitweb.blame` configuration variable (boolean). | |
| snapshot:: | |
| Enable and configure the "snapshot" action, which allows user to | |
| download a compressed archive of any tree or commit, as produced | |
| by linkgit:git-archive[1] and possibly additionally compressed. | |
| This can potentially generate high traffic if you have large project. | |
| + | |
| The value of \'default' is a list of names of snapshot formats, | |
| defined in `%known_snapshot_formats` 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. | |
| + | |
| This feature can be configured on a per-repository basis via | |
| repository's `gitweb.blame` configuration variable, which contains | |
| a comma separated list of formats or "none" to disable snapshots. | |
| Unknown values are ignored. | |
| grep:: | |
| Enable grep search, which lists the files in currently selected | |
| tree (directory) containing the given string; see linkgit:git-grep[1]. | |
| This can be potentially CPU-intensive, of course. Enabled by default. | |
| + | |
| This feature can be configured on a per-repository basis via | |
| repository's `gitweb.grep` configuration variable (boolean). | |
| pickaxe:: | |
| 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. | |
| + | |
| The pickaxe search is described in linkgit:git-log[1] (the | |
| description of `-S<string>` option, which refers to pickaxe entry in | |
| linkgit:gitdiffcore[7] for more details). | |
| + | |
| This feature can be configured on a per-repository basis by setting | |
| repository's `gitweb.pickaxe` configuration variable (boolean). | |
| show-sizes:: | |
| Enable showing size of blobs (ordinary files) in a "tree" view, in a | |
| separate column, similar to what `ls -l` does; see description of | |
| `-l` option in linkgit:git-ls-tree[1] manpage. This costs a bit of | |
| I/O. Enabled by default. | |
| + | |
| This feature can be configured on a per-repository basis via | |
| repository's `gitweb.showSizes` configuration variable (boolean). | |
| patches:: | |
| Enable and configure "patches" view, which displays list of commits in email | |
| (plain text) output format; see also linkgit:git-format-patch[1]. | |
| The value is the maximum number of patches in a patchset generated | |
| in "patches" view. Set the 'default' 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. | |
| + | |
| This feature can be configured on a per-repository basis via | |
| repository's `gitweb.patches` configuration variable (integer). | |
| avatar:: | |
| 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. | |
| + | |
| Currently available providers are *"gravatar"* and *"picon"*. | |
| Only one provider at a time can be selected ('default' is one element list). | |
| If an unknown provider is specified, the feature is disabled. | |
| *Note* that some providers might require extra Perl packages to be | |
| installed; see 'gitweb/INSTALL' for more details. | |
| + | |
| This feature can be configured on a per-repository basis via | |
| repository's `gitweb.avatar` configuration variable. | |
| + | |
| See also `%avatar_size` 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 `@stylesheets`), it may be appropriate to change | |
| these values. | |
| highlight:: | |
| Server-side syntax highlight support in "blob" view. It requires | |
| `$highlight_bin` program to be available (see the description of | |
| this variable in the "Configuration variables" section above), | |
| and therefore is disabled by default. | |
| + | |
| This feature can be configured on a per-repository basis via | |
| repository's `gitweb.highlight` configuration variable (boolean). | |
| remote_heads:: | |
| 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. linkgit:git-instaweb[1], which is usually used | |
| to browse local repositories, enables and uses this feature. | |
| + | |
| This feature can be configured on a per-repository basis via | |
| repository's `gitweb.remote_heads` configuration variable (boolean). | |
| The remaining features cannot be overridden on a per project basis. | |
| search:: | |
| Enable text search, which will list the commits which match author, | |
| committer or commit text to a given string; see the description of | |
| `--author`, `--committer` and `--grep` options in linkgit:git-log[1] | |
| manpage. Enabled by default. | |
| + | |
| Project specific override is not supported. | |
| forks:: | |
| If this feature is enabled, gitweb considers projects in | |
| subdirectories of project root (basename) to be forks of existing | |
| projects. For each project +$projname.git+, projects in the | |
| +$projname/+ directory and its subdirectories will not be | |
| shown in the main projects list. Instead, a \'\+' mark is shown | |
| next to +$projname+, which links to a "forks" view that lists all | |
| the forks (all projects in +$projname/+ subdirectory). Additionally | |
| a "forks" view for a project is linked from project summary page. | |
| + | |
| If the project list is taken from a file (+$projects_list+ points to a | |
| file), forks are only recognized if they are listed after the main project | |
| in that file. | |
| + | |
| Project specific override is not supported. | |
| actions:: | |
| Insert custom links to the action bar of all project pages. This | |
| allows you to link to third-party scripts integrating into gitweb. | |
| + | |
| The "default" value consists of a list of triplets in the form | |
| `("<label>", "<link>", "<position>")` where "position" is the label | |
| after which to insert the link, "link" is a format string where `%n` | |
| expands to the project name, `%f` to the project path within the | |
| filesystem (i.e. "$projectroot/$project"), `%h` to the current hash | |
| (\'h' gitweb parameter) and `%b` to the current hash base | |
| (\'hb' gitweb parameter); `%%` expands to \'%'. | |
| + | |
| For example, at the time this page was written, the http://repo.or.cz[] | |
| Git hosting site set it to the following to enable graphical log | |
| (using the third party tool *git-browser*): | |
| + | |
| ---------------------------------------------------------------------- | |
| $feature{'actions'}{'default'} = | |
| [ ('graphiclog', '/git-browser/by-commit.html?r=%n', 'summary')]; | |
| ---------------------------------------------------------------------- | |
| + | |
| This adds a link titled "graphiclog" after the "summary" link, leading to | |
| `git-browser` script, passing `r=<project>` as a query parameter. | |
| + | |
| Project specific override is not supported. | |
| timed:: | |
| 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. | |
| + | |
| Project specific override is not supported. | |
| javascript-timezone:: | |
| 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. | |
| + | |
| The value is a list of three values: a default time zone (for if the client | |
| hasn't 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: `[]`. | |
| + | |
| Typical gitweb config files will only change starting (default) time zone, | |
| and leave other elements at their default values: | |
| + | |
| --------------------------------------------------------------------------- | |
| $feature{'javascript-timezone'}{'default'}[0] = "utc"; | |
| --------------------------------------------------------------------------- | |
| + | |
| The example configuration presented here is guaranteed to be backwards | |
| and forward compatible. | |
| + | |
| 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". | |
| + | |
| Project specific override is not supported. | |
| extra-branch-refs:: | |
| 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: | |
| + | |
| -------------------------------------------------------------------------------- | |
| $feature{'extra-branch-refs'}{'default'} = | |
| ['sandbox', 'wip', 'other']; | |
| -------------------------------------------------------------------------------- | |
| + | |
| This feature can be configured on per-repository basis after setting | |
| $feature{'extra-branch-refs'}{'override'} to true, via repository's | |
| `gitweb.extraBranchRefs` configuration variable, which contains a | |
| space separated list of refs. An example: | |
| + | |
| -------------------------------------------------------------------------------- | |
| [gitweb] | |
| extraBranchRefs = sandbox wip other | |
| -------------------------------------------------------------------------------- | |
| + | |
| 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: | |
| + | |
| -------------------------------------------------------------------------------- | |
| [gitweb] | |
| extraBranchRefs = sandbox | |
| extraBranchRefs = wip other | |
| -------------------------------------------------------------------------------- | |
| + | |
| It is an error to specify a ref that does not pass "git check-ref-format" | |
| scrutiny. Duplicated values are filtered. | |
| EXAMPLES | |
| -------- | |
| 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: | |
| $feature{'blame'}{'default'} = [1]; | |
| $feature{'blame'}{'override'} = 1; | |
| $feature{'pickaxe'}{'default'} = [1]; | |
| $feature{'pickaxe'}{'override'} = 1; | |
| $feature{'snapshot'}{'default'} = ['zip', 'tgz']; | |
| $feature{'snapshot'}{'override'} = 1; | |
| 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 *gzip*(1) to run at level 6 by | |
| adding the following lines to your gitweb configuration file: | |
| $known_snapshot_formats{'zip'}{'disabled'} = 1; | |
| $known_snapshot_formats{'tgz'}{'compressor'} = ['gzip','-6']; | |
| BUGS | |
| ---- | |
| Debugging would be easier if the fallback configuration file | |
| (`/etc/gitweb.conf`) and environment variable to override its location | |
| ('GITWEB_CONFIG_SYSTEM') had names reflecting their "fallback" role. | |
| The current names are kept to avoid breaking working setups. | |
| ENVIRONMENT | |
| ----------- | |
| The location of per-instance and system-wide configuration files can be | |
| overridden using the following environment variables: | |
| GITWEB_CONFIG:: | |
| Sets location of per-instance configuration file. | |
| GITWEB_CONFIG_SYSTEM:: | |
| Sets location of fallback system-wide configuration file. | |
| This file is read only if per-instance one does not exist. | |
| GITWEB_CONFIG_COMMON:: | |
| Sets location of common system-wide configuration file. | |
| FILES | |
| ----- | |
| gitweb_config.perl:: | |
| This is default name of per-instance configuration file. The | |
| format of this file is described above. | |
| /etc/gitweb.conf:: | |
| This is default name of fallback system-wide configuration | |
| file. This file is used only if per-instance configuration | |
| variable is not found. | |
| /etc/gitweb-common.conf:: | |
| This is default name of common system-wide configuration | |
| file. | |
| SEE ALSO | |
| -------- | |
| linkgit:gitweb[1], linkgit:git-instaweb[1] | |
| 'gitweb/README', 'gitweb/INSTALL' | |
| GIT | |
| --- | |
| Part of the linkgit:git[1] suite |