]>
Commit | Line | Data |
---|---|---|
6d3902b0 DN |
1 | gitweb.conf(5) |
2 | ============== | |
3 | ||
4 | NAME | |
5 | ---- | |
6 | gitweb.conf - Gitweb (git web interface) configuration file | |
7 | ||
8 | SYNOPSIS | |
9 | -------- | |
10 | /etc/gitweb.conf, /etc/gitweb-common.conf, $GITWEBDIR/gitweb_config.perl | |
11 | ||
12 | DESCRIPTION | |
13 | ----------- | |
14 | ||
15 | The gitweb CGI script for viewing Git repositories over the web uses a | |
16 | perl script fragment as its configuration file. You can set variables | |
17 | using "`our $variable = value`"; text from a "#" character until the | |
18 | end of a line is ignored. See *perlsyn*(1) for details. | |
19 | ||
20 | An example: | |
21 | ||
22 | # gitweb configuration file for http://git.example.org | |
23 | # | |
24 | our $projectroot = "/srv/git"; # FHS recommendation | |
25 | our $site_name = 'Example.org >> Repos'; | |
26 | ||
27 | ||
28 | The configuration file is used to override the default settings that | |
29 | were built into gitweb at the time the 'gitweb.cgi' script was generated. | |
30 | ||
31 | While one could just alter the configuration settings in the gitweb | |
32 | CGI itself, those changes would be lost upon upgrade. Configuration | |
33 | settings might also be placed into a file in the same directory as the | |
34 | CGI script with the default name 'gitweb_config.perl' -- allowing | |
35 | one to have multiple gitweb instances with different configurations by | |
36 | the use of symlinks. | |
37 | ||
07ea4df2 JN |
38 | Note that some configuration can be controlled on per-repository rather than |
39 | gitweb-wide basis: see "Per-repository gitweb configuration" subsection on | |
40 | linkgit:gitweb[1] manpage. | |
41 | ||
6d3902b0 DN |
42 | |
43 | DISCUSSION | |
44 | ---------- | |
45 | Gitweb reads configuration data from the following sources in the | |
46 | following order: | |
47 | ||
48 | * built-in values (some set during build stage), | |
49 | ||
50 | * common system-wide configuration file (defaults to | |
51 | '/etc/gitweb-common.conf'), | |
52 | ||
53 | * either per-instance configuration file (defaults to 'gitweb_config.perl' | |
54 | in the same directory as the installed gitweb), or if it does not exists | |
55 | then fallback system-wide configuration file (defaults to '/etc/gitweb.conf'). | |
56 | ||
57 | Values obtained in later configuration files override values obtained earlier | |
58 | in the above sequence. | |
59 | ||
60 | Locations of the common system-wide configuration file, the fallback | |
61 | system-wide configuration file and the per-instance configuration file | |
62 | are defined at compile time using build-time Makefile configuration | |
63 | variables, respectively `GITWEB_CONFIG_COMMON`, `GITWEB_CONFIG_SYSTEM` | |
64 | and `GITWEB_CONFIG`. | |
65 | ||
66 | You can also override locations of gitweb configuration files during | |
67 | runtime by setting the following environment variables: | |
68 | `GITWEB_CONFIG_COMMON`, `GITWEB_CONFIG_SYSTEM` and `GITWEB_CONFIG` | |
69 | to a non-empty value. | |
70 | ||
71 | ||
72 | The syntax of the configuration files is that of Perl, since these files are | |
73 | handled by sourcing them as fragments of Perl code (the language that | |
74 | gitweb itself is written in). Variables are typically set using the | |
75 | `our` qualifier (as in "`our $variable = <value>;`") to avoid syntax | |
76 | errors if a new version of gitweb no longer uses a variable and therefore | |
77 | stops declaring it. | |
78 | ||
79 | You can include other configuration file using read_config_file() | |
80 | subroutine. For example, one might want to put gitweb configuration | |
81 | related to access control for viewing repositories via Gitolite (one | |
82 | of git repository management tools) in a separate file, e.g. in | |
83 | '/etc/gitweb-gitolite.conf'. To include it, put | |
84 | ||
85 | -------------------------------------------------- | |
86 | read_config_file("/etc/gitweb-gitolite.conf"); | |
87 | -------------------------------------------------- | |
88 | ||
89 | somewhere in gitweb configuration file used, e.g. in per-installation | |
90 | gitweb configuration file. Note that read_config_file() checks itself | |
91 | that the file it reads exists, and does nothing if it is not found. | |
92 | It also handles errors in included file. | |
93 | ||
94 | ||
95 | The default configuration with no configuration file at all may work | |
96 | perfectly well for some installations. Still, a configuration file is | |
97 | useful for customizing or tweaking the behavior of gitweb in many ways, and | |
98 | some optional features will not be present unless explicitly enabled using | |
99 | the configurable `%features` variable (see also "Configuring gitweb | |
100 | features" section below). | |
101 | ||
102 | ||
103 | CONFIGURATION VARIABLES | |
104 | ----------------------- | |
105 | Some configuration variables have their default values (embedded in the CGI | |
106 | script) set during building gitweb -- if that is the case, this fact is put | |
107 | in their description. See gitweb's 'INSTALL' file for instructions on building | |
108 | and installing gitweb. | |
109 | ||
110 | ||
111 | Location of repositories | |
112 | ~~~~~~~~~~~~~~~~~~~~~~~~ | |
113 | The configuration variables described below control how gitweb finds | |
114 | git repositories, and how repositories are displayed and accessed. | |
115 | ||
07ea4df2 JN |
116 | See also "Repositories" and later subsections in linkgit:gitweb[1] manpage. |
117 | ||
6d3902b0 DN |
118 | $projectroot:: |
119 | Absolute filesystem path which will be prepended to project path; | |
120 | the path to repository is `$projectroot/$project`. Set to | |
121 | `$GITWEB_PROJECTROOT` during installation. This variable has to be | |
122 | set correctly for gitweb to find repositories. | |
123 | + | |
124 | For example, if `$projectroot` is set to "/srv/git" by putting the following | |
125 | in gitweb config file: | |
126 | + | |
127 | ---------------------------------------------------------------------------- | |
128 | our $projectroot = "/srv/git"; | |
129 | ---------------------------------------------------------------------------- | |
130 | + | |
131 | then | |
132 | + | |
133 | ------------------------------------------------ | |
134 | http://git.example.com/gitweb.cgi?p=foo/bar.git | |
135 | ------------------------------------------------ | |
136 | + | |
137 | and its path_info based equivalent | |
138 | + | |
139 | ------------------------------------------------ | |
140 | http://git.example.com/gitweb.cgi/foo/bar.git | |
141 | ------------------------------------------------ | |
142 | + | |
143 | will map to the path '/srv/git/foo/bar.git' on the filesystem. | |
144 | ||
145 | $projects_list:: | |
146 | Name of a plain text file listing projects, or a name of directory | |
147 | to be scanned for projects. | |
148 | + | |
149 | Project list files should list one project per line, with each line | |
150 | having the following format | |
151 | + | |
152 | ----------------------------------------------------------------------------- | |
153 | <URI-encoded filesystem path to repository> SP <URI-encoded repository owner> | |
154 | ----------------------------------------------------------------------------- | |
155 | + | |
156 | The default value of this variable is determined by the `GITWEB_LIST` | |
157 | makefile variable at installation time. If this variable is empty, gitweb | |
158 | will fall back to scanning the `$projectroot` directory for repositories. | |
159 | ||
160 | $project_maxdepth:: | |
161 | If `$projects_list` variable is unset, gitweb will recursively | |
162 | scan filesystem for git repositories. The `$project_maxdepth` | |
163 | is used to limit traversing depth, relative to `$projectroot` | |
164 | (starting point); it means that directories which are further | |
165 | from `$projectroot` than `$project_maxdepth` will be skipped. | |
166 | + | |
167 | It is purely performance optimization, originally intended for MacOS X, | |
168 | where recursive directory traversal is slow. Gitweb follows symbolic | |
169 | links, but it detects cycles, ignoring any duplicate files and directories. | |
170 | + | |
171 | The default value of this variable is determined by the build-time | |
172 | configuration variable `GITWEB_PROJECT_MAXDEPTH`, which defaults to | |
173 | 2007. | |
174 | ||
175 | $export_ok:: | |
176 | Show repository only if this file exists (in repository). Only | |
177 | effective if this variable evaluates to true. Can be set when | |
178 | building gitweb by setting `GITWEB_EXPORT_OK`. This path is | |
179 | relative to `GIT_DIR`. git-daemon[1] uses 'git-daemon-export-ok', | |
180 | unless started with `--export-all`. By default this variable is | |
181 | not set, which means that this feature is turned off. | |
182 | ||
183 | $export_auth_hook:: | |
184 | Function used to determine which repositories should be shown. | |
185 | This subroutine should take one parameter, the full path to | |
186 | a project, and if it returns true, that project will be included | |
187 | in the projects list and can be accessed through gitweb as long | |
188 | as it fulfills the other requirements described by $export_ok, | |
189 | $projects_list, and $projects_maxdepth. Example: | |
190 | + | |
191 | ---------------------------------------------------------------------------- | |
192 | our $export_auth_hook = sub { return -e "$_[0]/git-daemon-export-ok"; }; | |
193 | ---------------------------------------------------------------------------- | |
194 | + | |
195 | though the above might be done by using `$export_ok` instead | |
196 | + | |
197 | ---------------------------------------------------------------------------- | |
198 | our $export_ok = "git-daemon-export-ok"; | |
199 | ---------------------------------------------------------------------------- | |
200 | + | |
201 | If not set (default), it means that this feature is disabled. | |
07ea4df2 JN |
202 | + |
203 | See also more involved example in "Controlling access to git repositories" | |
204 | subsection on linkgit:gitweb[1] manpage. | |
6d3902b0 DN |
205 | |
206 | $strict_export:: | |
207 | Only allow viewing of repositories also shown on the overview page. | |
208 | This for example makes `$gitweb_export_ok` file decide if repository is | |
209 | available and not only if it is shown. If `$gitweb_list` points to | |
210 | file with list of project, only those repositories listed would be | |
211 | available for gitweb. Can be set during building gitweb via | |
212 | `GITWEB_STRICT_EXPORT`. By default this variable is not set, which | |
213 | means that you can directly access those repositories that are hidden | |
214 | from projects list page (e.g. the are not listed in the $projects_list | |
215 | file). | |
216 | ||
217 | ||
218 | Finding files | |
219 | ~~~~~~~~~~~~~ | |
220 | The following configuration variables tell gitweb where to find files. | |
221 | The values of these variables are paths on the filesystem. | |
222 | ||
223 | $GIT:: | |
224 | Core git executable to use. By default set to `$GIT_BINDIR/git`, which | |
225 | in turn is by default set to `$(bindir)/git`. If you use git installed | |
226 | from a binary package, you should usually set this to "/usr/bin/git". | |
227 | This can just be "git" if your web server has a sensible PATH; from | |
228 | security point of view it is better to use absolute path to git binary. | |
229 | If you have multiple git versions installed it can be used to choose | |
230 | which one to use. Must be (correctly) set for gitweb to be able to | |
231 | work. | |
232 | ||
233 | $mimetypes_file:: | |
234 | File to use for (filename extension based) guessing of MIME types before | |
235 | trying '/etc/mime.types'. *NOTE* that this path, if relative, is taken | |
236 | as relative to the current git repository, not to CGI script. If unset, | |
237 | only '/etc/mime.types' is used (if present on filesystem). If no mimetypes | |
238 | file is found, mimetype guessing based on extension of file is disabled. | |
239 | Unset by default. | |
240 | ||
241 | $highlight_bin:: | |
242 | Path to the highlight executable to use (it must be the one from | |
243 | http://www.andre-simon.de[] due to assumptions about parameters and output). | |
244 | By default set to 'highlight'; set it to full path to highlight | |
245 | executable if it is not installed on your web server's PATH. | |
246 | Note that 'highlight' feature must be set for gitweb to actually | |
b4ab1980 | 247 | use syntax highlighting. |
6d3902b0 DN |
248 | + |
249 | *NOTE*: if you want to add support for new file type (supported by | |
250 | "highlight" but not used by gitweb), you need to modify `%highlight_ext` | |
251 | or `%highlight_basename`, depending on whether you detect type of file | |
252 | based on extension (for example "sh") or on its basename (for example | |
253 | "Makefile"). The keys of these hashes are extension and basename, | |
254 | respectively, and value for given key is name of syntax to be passed via | |
255 | `--syntax <syntax>` to highlighter. | |
256 | + | |
257 | For example if repositories you are hosting use "phtml" extension for | |
258 | PHP files, and you want to have correct syntax-highlighting for those | |
259 | files, you can add the following to gitweb configuration: | |
260 | + | |
261 | --------------------------------------------------------- | |
262 | our %highlight_ext; | |
263 | $highlight_ext{'phtml'} = 'php'; | |
264 | --------------------------------------------------------- | |
265 | ||
266 | ||
267 | Links and their targets | |
268 | ~~~~~~~~~~~~~~~~~~~~~~~ | |
269 | The configuration variables described below configure some of gitweb links: | |
270 | their target and their look (text or image), and where to find page | |
271 | prerequisites (stylesheet, favicon, images, scripts). Usually they are left | |
272 | at their default values, with the possible exception of `@stylesheets` | |
273 | variable. | |
274 | ||
275 | @stylesheets:: | |
276 | List of URIs of stylesheets (relative to the base URI of a page). You | |
277 | might specify more than one stylesheet, for example to use "gitweb.css" | |
278 | as base with site specific modifications in a separate stylesheet | |
279 | to make it easier to upgrade gitweb. For example, you can add | |
280 | a `site` stylesheet by putting | |
281 | + | |
282 | ---------------------------------------------------------------------------- | |
283 | push @stylesheets, "gitweb-site.css"; | |
284 | ---------------------------------------------------------------------------- | |
285 | + | |
286 | in the gitweb config file. Those values that are relative paths are | |
287 | relative to base URI of gitweb. | |
288 | + | |
289 | This list should contain the URI of gitweb's standard stylesheet. The default | |
290 | URI of gitweb stylesheet can be set at build time using the `GITWEB_CSS` | |
291 | makefile variable. Its default value is 'static/gitweb.css' | |
292 | (or 'static/gitweb.min.css' if the `CSSMIN` variable is defined, | |
293 | i.e. if CSS minifier is used during build). | |
294 | + | |
295 | *Note*: there is also a legacy `$stylesheet` configuration variable, which was | |
296 | used by older gitweb. If `$stylesheet` variable is defined, only CSS stylesheet | |
297 | given by this variable is used by gitweb. | |
298 | ||
299 | $logo:: | |
300 | Points to the location where you put 'git-logo.png' on your web | |
301 | server, or to be more the generic URI of logo, 72x27 size). This image | |
302 | is displayed in the top right corner of each gitweb page and used as | |
303 | a logo for the Atom feed. Relative to the base URI of gitweb (as a path). | |
304 | Can be adjusted when building gitweb using `GITWEB_LOGO` variable | |
305 | By default set to 'static/git-logo.png'. | |
306 | ||
307 | $favicon:: | |
308 | Points to the location where you put 'git-favicon.png' on your web | |
309 | server, or to be more the generic URI of favicon, which will be served | |
310 | as "image/png" type. Web browsers that support favicons (website icons) | |
311 | may display them in the browser's URL bar and next to the site name in | |
312 | bookmarks. Relative to the base URI of gitweb. Can be adjusted at | |
313 | build time using `GITWEB_FAVICON` variable. | |
314 | By default set to 'static/git-favicon.png'. | |
315 | ||
316 | $javascript:: | |
317 | Points to the location where you put 'gitweb.js' on your web server, | |
318 | or to be more generic the URI of JavaScript code used by gitweb. | |
319 | Relative to the base URI of gitweb. Can be set at build time using | |
320 | the `GITWEB_JS` build-time configuration variable. | |
321 | + | |
322 | The default value is either 'static/gitweb.js', or 'static/gitweb.min.js' if | |
323 | the `JSMIN` build variable was defined, i.e. if JavaScript minifier was used | |
324 | at build time. *Note* that this single file is generated from multiple | |
325 | individual JavaScript "modules". | |
326 | ||
327 | $home_link:: | |
328 | Target of the home link on the top of all pages (the first part of view | |
329 | "breadcrumbs"). By default it is set to the absolute URI of a current page | |
330 | (to the value of `$my_uri` variable, or to "/" if `$my_uri` is undefined | |
331 | or is an empty string). | |
332 | ||
333 | $home_link_str:: | |
334 | Label for the "home link" at the top of all pages, leading to `$home_link` | |
335 | (usually the main gitweb page, which contains the projects list). It is | |
336 | used as the first component of gitweb's "breadcrumb trail": | |
337 | `<home link> / <project> / <action>`. Can be set at build time using | |
338 | the `GITWEB_HOME_LINK_STR` variable. By default it is set to "projects", | |
339 | as this link leads to the list of projects. Other popular choice it to | |
340 | set it to the name of site. | |
341 | ||
342 | $logo_url:: | |
343 | $logo_label:: | |
344 | URI and label (title) for the Git logo link (or your site logo, | |
345 | if you chose to use different logo image). By default, these both | |
346 | refer to git homepage, http://git-scm.com[]; in the past, they pointed | |
347 | to git documentation at http://www.kernel.org[]. | |
348 | ||
349 | ||
350 | Changing gitweb's look | |
351 | ~~~~~~~~~~~~~~~~~~~~~~ | |
352 | You can adjust how pages generated by gitweb look using the variables described | |
353 | below. You can change the site name, add common headers and footers for all | |
354 | pages, and add a description of this gitweb installation on its main page | |
355 | (which is the projects list page), etc. | |
356 | ||
357 | $site_name:: | |
358 | Name of your site or organization, to appear in page titles. Set it | |
359 | to something descriptive for clearer bookmarks etc. If this variable | |
360 | is not set or is, then gitweb uses the value of the `SERVER_NAME` | |
361 | CGI environment variable, setting site name to "$SERVER_NAME Git", | |
362 | or "Untitled Git" if this variable is not set (e.g. if running gitweb | |
363 | as standalone script). | |
364 | + | |
365 | Can be set using the `GITWEB_SITENAME` at build time. Unset by default. | |
366 | ||
c1355b7f LH |
367 | $site_html_head_string:: |
368 | HTML snippet to be included in the <head> section of each page. | |
369 | Can be set using `GITWEB_SITE_HTML_HEAD_STRING` at build time. | |
370 | No default value. | |
371 | ||
6d3902b0 DN |
372 | $site_header:: |
373 | Name of a file with HTML to be included at the top of each page. | |
374 | Relative to the directory containing the 'gitweb.cgi' script. | |
375 | Can be set using `GITWEB_SITE_HEADER` at build time. No default | |
376 | value. | |
377 | ||
378 | $site_footer:: | |
379 | Name of a file with HTML to be included at the bottom of each page. | |
380 | Relative to the directory containing the 'gitweb.cgi' script. | |
381 | Can be set using `GITWEB_SITE_FOOTER` at build time. No default | |
382 | value. | |
383 | ||
384 | $home_text:: | |
385 | Name of a HTML file which, if it exists, is included on the | |
386 | gitweb projects overview page ("projects_list" view). Relative to | |
387 | the directory containing the gitweb.cgi script. Default value | |
388 | can be adjusted during build time using `GITWEB_HOMETEXT` variable. | |
389 | By default set to 'indextext.html'. | |
390 | ||
391 | $projects_list_description_width:: | |
392 | The width (in characters) of the "Description" column of the projects list. | |
393 | Longer descriptions will be truncated (trying to cut at word boundary); | |
394 | the full description is available in the 'title' attribute (usually shown on | |
395 | mouseover). The default is 25, which might be too small if you | |
396 | use long project descriptions. | |
397 | ||
398 | $default_projects_order:: | |
399 | Default value of ordering of projects on projects list page, which | |
400 | means the ordering used if you don't explicitly sort projects list | |
401 | (if there is no "o" CGI query parameter in the URL). Valid values | |
402 | are "none" (unsorted), "project" (projects are by project name, | |
403 | i.e. path to repository relative to `$projectroot`), "descr" | |
404 | (project description), "owner", and "age" (by date of most current | |
405 | commit). | |
406 | + | |
407 | Default value is "project". Unknown value means unsorted. | |
408 | ||
409 | ||
410 | Changing gitweb's behavior | |
411 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
412 | These configuration variables control _internal_ gitweb behavior. | |
413 | ||
414 | $default_blob_plain_mimetype:: | |
415 | Default mimetype for the blob_plain (raw) view, if mimetype checking | |
416 | doesn't result in some other type; by default "text/plain". | |
417 | Gitweb guesses mimetype of a file to display based on extension | |
418 | of its filename, using `$mimetypes_file` (if set and file exists) | |
419 | and '/etc/mime.types' files (see *mime.types*(5) manpage; only | |
420 | filename extension rules are supported by gitweb). | |
421 | ||
422 | $default_text_plain_charset:: | |
423 | Default charset for text files. If this is not set, the web server | |
424 | configuration will be used. Unset by default. | |
425 | ||
426 | $fallback_encoding:: | |
427 | Gitweb assumes this charset when a line contains non-UTF-8 characters. | |
428 | The fallback decoding is used without error checking, so it can be even | |
429 | "utf-8". The value must be a valid encoding; see the *Encoding::Supported*(3pm) | |
430 | man page for a list. The default is "latin1", aka. "iso-8859-1". | |
431 | ||
432 | @diff_opts:: | |
433 | Rename detection options for git-diff and git-diff-tree. The default is | |
434 | (\'-M'); set it to (\'-C') or (\'-C', \'-C') to also detect copies, | |
435 | or set it to () i.e. empty list if you don't want to have renames | |
436 | detection. | |
437 | + | |
438 | *Note* that rename and especially copy detection can be quite | |
439 | CPU-intensive. Note also that non git tools can have problems with | |
440 | patches generated with options mentioned above, especially when they | |
441 | involve file copies (\'-C') or criss-cross renames (\'-B'). | |
442 | ||
443 | ||
444 | Some optional features and policies | |
445 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
446 | Most of features are configured via `%feature` hash; however some of extra | |
447 | gitweb features can be turned on and configured using variables described | |
448 | below. This list beside configuration variables that control how gitweb | |
449 | looks does contain variables configuring administrative side of gitweb | |
450 | (e.g. cross-site scripting prevention; admittedly this as side effect | |
451 | affects how "summary" pages look like, or load limiting). | |
452 | ||
453 | @git_base_url_list:: | |
454 | List of git base URLs. These URLs are used to generate URLs | |
455 | describing from where to fetch a project, which are shown on | |
456 | project summary page. The full fetch URL is "`$git_base_url/$project`", | |
457 | for each element of this list. You can set up multiple base URLs | |
458 | (for example one for `git://` protocol, and one for `http://` | |
459 | protocol). | |
460 | + | |
461 | Note that per repository configuration can be set in '$GIT_DIR/cloneurl' | |
462 | file, or as values of multi-value `gitweb.url` configuration variable in | |
463 | project config. Per-repository configuration takes precedence over value | |
464 | composed from `@git_base_url_list` elements and project name. | |
465 | + | |
466 | You can setup one single value (single entry/item in this list) at build | |
467 | time by setting the `GITWEB_BASE_URL` built-time configuration variable. | |
468 | By default it is set to (), i.e. an empty list. This means that gitweb | |
469 | would not try to create project URL (to fetch) from project name. | |
470 | ||
471 | $projects_list_group_categories:: | |
472 | Whether to enables the grouping of projects by category on the project | |
473 | list page. The category of a project is determined by the | |
474 | `$GIT_DIR/category` file or the `gitweb.category` variable in each | |
475 | repository's configuration. Disabled by default (set to 0). | |
476 | ||
477 | $project_list_default_category:: | |
478 | Default category for projects for which none is specified. If this is | |
479 | set to the empty string, such projects will remain uncategorized and | |
480 | listed at the top, above categorized projects. Used only if project | |
481 | categories are enabled, which means if `$projects_list_group_categories` | |
482 | is true. By default set to "" (empty string). | |
483 | ||
484 | $prevent_xss:: | |
485 | If true, some gitweb features are disabled to prevent content in | |
486 | repositories from launching cross-site scripting (XSS) attacks. Set this | |
487 | to true if you don't trust the content of your repositories. | |
488 | False by default (set to 0). | |
489 | ||
490 | $maxload:: | |
491 | Used to set the maximum load that we will still respond to gitweb queries. | |
492 | If the server load exceeds this value then gitweb will return | |
493 | "503 Service Unavailable" error. The server load is taken to be 0 | |
494 | if gitweb cannot determine its value. Currently it works only on Linux, | |
495 | where it uses '/proc/loadavg'; the load there is the number of active | |
496 | tasks on the system -- processes that are actually running -- averaged | |
497 | over the last minute. | |
498 | + | |
499 | Set `$maxload` to undefined value (`undef`) to turn this feature off. | |
500 | The default value is 300. | |
501 | ||
5710be46 KK |
502 | $omit_age_column:: |
503 | If true, omit the column with date of the most current commit on the | |
504 | projects list page. It can save a bit of I/O and a fork per repository. | |
505 | ||
0ebe7827 KK |
506 | $omit_owner:: |
507 | If true prevents displaying information about repository owner. | |
508 | ||
6d3902b0 DN |
509 | $per_request_config:: |
510 | If this is set to code reference, it will be run once for each request. | |
511 | You can set parts of configuration that change per session this way. | |
512 | For example, one might use the following code in a gitweb configuration | |
513 | file | |
514 | + | |
515 | -------------------------------------------------------------------------------- | |
516 | our $per_request_config = sub { | |
517 | $ENV{GL_USER} = $cgi->remote_user || "gitweb"; | |
518 | }; | |
519 | -------------------------------------------------------------------------------- | |
520 | + | |
521 | If `$per_request_config` is not a code reference, it is interpreted as boolean | |
522 | value. If it is true gitweb will process config files once per request, | |
523 | and if it is false gitweb will process config files only once, each time it | |
524 | is executed. True by default (set to 1). | |
525 | + | |
526 | *NOTE*: `$my_url`, `$my_uri`, and `$base_url` are overwritten with their default | |
527 | values before every request, so if you want to change them, be sure to set | |
528 | this variable to true or a code reference effecting the desired changes. | |
529 | + | |
530 | This variable matters only when using persistent web environments that | |
531 | serve multiple requests using single gitweb instance, like mod_perl, | |
532 | FastCGI or Plackup. | |
533 | ||
534 | ||
535 | Other variables | |
536 | ~~~~~~~~~~~~~~~ | |
537 | Usually you should not need to change (adjust) any of configuration | |
538 | variables described below; they should be automatically set by gitweb to | |
539 | correct value. | |
540 | ||
541 | ||
542 | $version:: | |
543 | Gitweb version, set automatically when creating gitweb.cgi from | |
544 | gitweb.perl. You might want to modify it if you are running modified | |
545 | gitweb, for example | |
546 | + | |
547 | --------------------------------------------------- | |
548 | our $version .= " with caching"; | |
549 | --------------------------------------------------- | |
550 | + | |
551 | if you run modified version of gitweb with caching support. This variable | |
552 | is purely informational, used e.g. in the "generator" meta header in HTML | |
553 | header. | |
554 | ||
555 | $my_url:: | |
556 | $my_uri:: | |
557 | Full URL and absolute URL of the gitweb script; | |
558 | in earlier versions of gitweb you might have need to set those | |
559 | variables, but now there should be no need to do it. See | |
560 | `$per_request_config` if you need to set them still. | |
561 | ||
562 | $base_url:: | |
563 | Base URL for relative URLs in pages generated by gitweb, | |
564 | (e.g. `$logo`, `$favicon`, `@stylesheets` if they are relative URLs), | |
565 | needed and used '<base href="$base_url">' only for URLs with nonempty | |
566 | PATH_INFO. Usually gitweb sets its value correctly, | |
567 | and there is no need to set this variable, e.g. to $my_uri or "/". | |
568 | See `$per_request_config` if you need to override it anyway. | |
569 | ||
570 | ||
571 | CONFIGURING GITWEB FEATURES | |
572 | --------------------------- | |
573 | Many gitweb features can be enabled (or disabled) and configured using the | |
574 | `%feature` hash. Names of gitweb features are keys of this hash. | |
575 | ||
576 | Each `%feature` hash element is a hash reference and has the following | |
577 | structure: | |
578 | ---------------------------------------------------------------------- | |
579 | "<feature_name>" => { | |
580 | "sub" => <feature-sub (subroutine)>, | |
581 | "override" => <allow-override (boolean)>, | |
582 | "default" => [ <options>... ] | |
583 | }, | |
584 | ---------------------------------------------------------------------- | |
585 | Some features cannot be overridden per project. For those | |
586 | features the structure of appropriate `%feature` hash element has a simpler | |
587 | form: | |
588 | ---------------------------------------------------------------------- | |
589 | "<feature_name>" => { | |
590 | "override" => 0, | |
591 | "default" => [ <options>... ] | |
592 | }, | |
593 | ---------------------------------------------------------------------- | |
594 | As one can see it lacks the \'sub' element. | |
595 | ||
596 | The meaning of each part of feature configuration is described | |
597 | below: | |
598 | ||
599 | default:: | |
600 | List (array reference) of feature parameters (if there are any), | |
601 | used also to toggle (enable or disable) given feature. | |
602 | + | |
603 | Note that it is currently *always* an array reference, even if | |
604 | feature doesn't accept any configuration parameters, and \'default' | |
605 | is used only to turn it on or off. In such case you turn feature on | |
606 | by setting this element to `[1]`, and torn it off by setting it to | |
607 | `[0]`. See also the passage about the "blame" feature in the "Examples" | |
608 | section. | |
609 | + | |
610 | To disable features that accept parameters (are configurable), you | |
611 | need to set this element to empty list i.e. `[]`. | |
612 | ||
613 | override:: | |
614 | If this field has a true value then the given feature is | |
615 | overriddable, which means that it can be configured | |
616 | (or enabled/disabled) on a per-repository basis. | |
617 | + | |
618 | Usually given "<feature>" is configurable via the `gitweb.<feature>` | |
619 | config variable in the per-repository git configuration file. | |
620 | + | |
621 | *Note* that no feature is overriddable by default. | |
622 | ||
623 | sub:: | |
624 | Internal detail of implementation. What is important is that | |
625 | if this field is not present then per-repository override for | |
626 | given feature is not supported. | |
627 | + | |
628 | You wouldn't need to ever change it in gitweb config file. | |
629 | ||
630 | ||
631 | Features in `%feature` | |
632 | ~~~~~~~~~~~~~~~~~~~~~~ | |
633 | The gitweb features that are configurable via `%feature` hash are listed | |
634 | below. This should be a complete list, but ultimately the authoritative | |
635 | and complete list is in gitweb.cgi source code, with features described | |
636 | in the comments. | |
637 | ||
638 | blame:: | |
639 | Enable the "blame" and "blame_incremental" blob views, showing for | |
640 | each line the last commit that modified it; see linkgit:git-blame[1]. | |
641 | This can be very CPU-intensive and is therefore disabled by default. | |
642 | + | |
643 | This feature can be configured on a per-repository basis via | |
644 | repository's `gitweb.blame` configuration variable (boolean). | |
645 | ||
646 | snapshot:: | |
647 | Enable and configure the "snapshot" action, which allows user to | |
648 | download a compressed archive of any tree or commit, as produced | |
649 | by linkgit:git-archive[1] and possibly additionally compressed. | |
650 | This can potentially generate high traffic if you have large project. | |
651 | + | |
652 | The value of \'default' is a list of names of snapshot formats, | |
653 | defined in `%known_snapshot_formats` hash, that you wish to offer. | |
654 | Supported formats include "tgz", "tbz2", "txz" (gzip/bzip2/xz | |
655 | compressed tar archive) and "zip"; please consult gitweb sources for | |
656 | a definitive list. By default only "tgz" is offered. | |
657 | + | |
658 | This feature can be configured on a per-repository basis via | |
659 | repository's `gitweb.blame` configuration variable, which contains | |
660 | a comma separated list of formats or "none" to disable snapshots. | |
661 | Unknown values are ignored. | |
662 | ||
663 | grep:: | |
664 | Enable grep search, which lists the files in currently selected | |
665 | tree (directory) containing the given string; see linkgit:git-grep[1]. | |
666 | This can be potentially CPU-intensive, of course. Enabled by default. | |
667 | + | |
668 | This feature can be configured on a per-repository basis via | |
669 | repository's `gitweb.grep` configuration variable (boolean). | |
670 | ||
671 | pickaxe:: | |
672 | Enable the so called pickaxe search, which will list the commits | |
673 | that introduced or removed a given string in a file. This can be | |
674 | practical and quite faster alternative to "blame" action, but it is | |
675 | still potentially CPU-intensive. Enabled by default. | |
676 | + | |
677 | The pickaxe search is described in linkgit:git-log[1] (the | |
678 | description of `-S<string>` option, which refers to pickaxe entry in | |
679 | linkgit:gitdiffcore[7] for more details). | |
680 | + | |
681 | This feature can be configured on a per-repository basis by setting | |
682 | repository's `gitweb.pickaxe` configuration variable (boolean). | |
683 | ||
684 | show-sizes:: | |
685 | Enable showing size of blobs (ordinary files) in a "tree" view, in a | |
686 | separate column, similar to what `ls -l` does; see description of | |
687 | `-l` option in linkgit:git-ls-tree[1] manpage. This costs a bit of | |
688 | I/O. Enabled by default. | |
689 | + | |
690 | This feature can be configured on a per-repository basis via | |
691 | repository's `gitweb.showsizes` configuration variable (boolean). | |
692 | ||
693 | patches:: | |
694 | Enable and configure "patches" view, which displays list of commits in email | |
695 | (plain text) output format; see also linkgit:git-format-patch[1]. | |
696 | The value is the maximum number of patches in a patchset generated | |
697 | in "patches" view. Set the 'default' field to a list containing single | |
698 | item of or to an empty list to disable patch view, or to a list | |
699 | containing a single negative number to remove any limit. | |
700 | Default value is 16. | |
701 | + | |
702 | This feature can be configured on a per-repository basis via | |
703 | repository's `gitweb.patches` configuration variable (integer). | |
704 | ||
705 | avatar:: | |
706 | Avatar support. When this feature is enabled, views such as | |
707 | "shortlog" or "commit" will display an avatar associated with | |
708 | the email of each committer and author. | |
709 | + | |
710 | Currently available providers are *"gravatar"* and *"picon"*. | |
711 | Only one provider at a time can be selected ('default' is one element list). | |
712 | If an unknown provider is specified, the feature is disabled. | |
713 | *Note* that some providers might require extra Perl packages to be | |
714 | installed; see 'gitweb/INSTALL' for more details. | |
715 | + | |
716 | This feature can be configured on a per-repository basis via | |
717 | repository's `gitweb.avatar` configuration variable. | |
718 | + | |
719 | See also `%avatar_size` with pixel sizes for icons and avatars | |
720 | ("default" is used for one-line like "log" and "shortlog", "double" | |
721 | is used for two-line like "commit", "commitdiff" or "tag"). If the | |
722 | default font sizes or lineheights are changed (e.g. via adding extra | |
723 | CSS stylesheet in `@stylesheets`), it may be appropriate to change | |
724 | these values. | |
725 | ||
726 | highlight:: | |
727 | Server-side syntax highlight support in "blob" view. It requires | |
728 | `$highlight_bin` program to be available (see the description of | |
729 | this variable in the "Configuration variables" section above), | |
730 | and therefore is disabled by default. | |
731 | + | |
732 | This feature can be configured on a per-repository basis via | |
733 | repository's `gitweb.highlight` configuration variable (boolean). | |
734 | ||
735 | remote_heads:: | |
736 | Enable displaying remote heads (remote-tracking branches) in the "heads" | |
737 | list. In most cases the list of remote-tracking branches is an | |
738 | unnecessary internal private detail, and this feature is therefore | |
739 | disabled by default. linkgit:git-instaweb[1], which is usually used | |
740 | to browse local repositories, enables and uses this feature. | |
741 | + | |
742 | This feature can be configured on a per-repository basis via | |
743 | repository's `gitweb.remote_heads` configuration variable (boolean). | |
744 | ||
745 | ||
746 | The remaining features cannot be overridden on a per project basis. | |
747 | ||
748 | search:: | |
749 | Enable text search, which will list the commits which match author, | |
750 | committer or commit text to a given string; see the description of | |
751 | `--author`, `--committer` and `--grep` options in linkgit:git-log[1] | |
752 | manpage. Enabled by default. | |
753 | + | |
754 | Project specific override is not supported. | |
755 | ||
756 | forks:: | |
757 | If this feature is enabled, gitweb considers projects in | |
758 | subdirectories of project root (basename) to be forks of existing | |
6cf378f0 JK |
759 | projects. For each project +$projname.git+, projects in the |
760 | +$projname/+ directory and its subdirectories will not be | |
761 | shown in the main projects list. Instead, a \'\+' mark is shown | |
762 | next to +$projname+, which links to a "forks" view that lists all | |
763 | the forks (all projects in +$projname/+ subdirectory). Additionally | |
6d3902b0 DN |
764 | a "forks" view for a project is linked from project summary page. |
765 | + | |
6cf378f0 | 766 | If the project list is taken from a file (+$projects_list+ points to a |
6d3902b0 DN |
767 | file), forks are only recognized if they are listed after the main project |
768 | in that file. | |
769 | + | |
770 | Project specific override is not supported. | |
771 | ||
772 | actions:: | |
773 | Insert custom links to the action bar of all project pages. This | |
774 | allows you to link to third-party scripts integrating into gitweb. | |
775 | + | |
776 | The "default" value consists of a list of triplets in the form | |
777 | `("<label>", "<link>", "<position>")` where "position" is the label | |
778 | after which to insert the link, "link" is a format string where `%n` | |
779 | expands to the project name, `%f` to the project path within the | |
780 | filesystem (i.e. "$projectroot/$project"), `%h` to the current hash | |
781 | (\'h' gitweb parameter) and `%b` to the current hash base | |
782 | (\'hb' gitweb parameter); `%%` expands to \'%'. | |
783 | + | |
784 | For example, at the time this page was written, the http://repo.or.cz[] | |
785 | git hosting site set it to the following to enable graphical log | |
786 | (using the third party tool *git-browser*): | |
787 | + | |
788 | ---------------------------------------------------------------------- | |
789 | $feature{'actions'}{'default'} = | |
790 | [ ('graphiclog', '/git-browser/by-commit.html?r=%n', 'summary')]; | |
791 | ---------------------------------------------------------------------- | |
792 | + | |
793 | This adds a link titled "graphiclog" after the "summary" link, leading to | |
794 | `git-browser` script, passing `r=<project>` as a query parameter. | |
795 | + | |
796 | Project specific override is not supported. | |
797 | ||
798 | timed:: | |
799 | Enable displaying how much time and how many git commands it took to | |
800 | generate and display each page in the page footer (at the bottom of | |
801 | page). For example the footer might contain: "This page took 6.53325 | |
802 | seconds and 13 git commands to generate." Disabled by default. | |
803 | + | |
804 | Project specific override is not supported. | |
805 | ||
806 | javascript-timezone:: | |
807 | Enable and configure the ability to change a common timezone for dates | |
808 | in gitweb output via JavaScript. Dates in gitweb output include | |
809 | authordate and committerdate in "commit", "commitdiff" and "log" | |
810 | views, and taggerdate in "tag" view. Enabled by default. | |
811 | + | |
812 | The value is a list of three values: a default timezone (for if the client | |
813 | hasn't selected some other timezone and saved it in a cookie), a name of cookie | |
814 | where to store selected timezone, and a CSS class used to mark up | |
815 | dates for manipulation. If you want to turn this feature off, set "default" | |
816 | to empty list: `[]`. | |
817 | + | |
818 | Typical gitweb config files will only change starting (default) timezone, | |
819 | and leave other elements at their default values: | |
820 | + | |
821 | --------------------------------------------------------------------------- | |
822 | $feature{'javascript-timezone'}{'default'}[0] = "utc"; | |
823 | --------------------------------------------------------------------------- | |
824 | + | |
825 | The example configuration presented here is guaranteed to be backwards | |
826 | and forward compatible. | |
827 | + | |
828 | Timezone values can be "local" (for local timezone that browser uses), "utc" | |
829 | (what gitweb uses when JavaScript or this feature is disabled), or numerical | |
830 | timezones in the form of "+/-HHMM", such as "+0200". | |
831 | + | |
832 | Project specific override is not supported. | |
833 | ||
834 | ||
835 | EXAMPLES | |
836 | -------- | |
837 | ||
838 | To enable blame, pickaxe search, and snapshot support (allowing "tar.gz" and | |
839 | "zip" snapshots), while allowing individual projects to turn them off, put | |
840 | the following in your GITWEB_CONFIG file: | |
841 | ||
842 | $feature{'blame'}{'default'} = [1]; | |
843 | $feature{'blame'}{'override'} = 1; | |
844 | ||
845 | $feature{'pickaxe'}{'default'} = [1]; | |
846 | $feature{'pickaxe'}{'override'} = 1; | |
847 | ||
848 | $feature{'snapshot'}{'default'} = ['zip', 'tgz']; | |
849 | $feature{'snapshot'}{'override'} = 1; | |
850 | ||
851 | If you allow overriding for the snapshot feature, you can specify which | |
852 | snapshot formats are globally disabled. You can also add any command line | |
853 | options you want (such as setting the compression level). For instance, you | |
854 | can disable Zip compressed snapshots and set *gzip*(1) to run at level 6 by | |
855 | adding the following lines to your gitweb configuration file: | |
856 | ||
857 | $known_snapshot_formats{'zip'}{'disabled'} = 1; | |
858 | $known_snapshot_formats{'tgz'}{'compressor'} = ['gzip','-6']; | |
859 | ||
860 | ENVIRONMENT | |
861 | ----------- | |
862 | The location of per-instance and system-wide configuration files can be | |
863 | overridden using the following environment variables: | |
864 | ||
865 | GITWEB_CONFIG:: | |
866 | Sets location of per-instance configuration file. | |
867 | GITWEB_CONFIG_SYSTEM:: | |
868 | Sets location of fallback system-wide configuration file. | |
869 | This file is read only if per-instance one does not exist. | |
870 | GITWEB_CONFIG_COMMON:: | |
871 | Sets location of common system-wide configuration file. | |
872 | ||
873 | ||
874 | FILES | |
875 | ----- | |
876 | gitweb_config.perl:: | |
877 | This is default name of per-instance configuration file. The | |
878 | format of this file is described above. | |
879 | /etc/gitweb.conf:: | |
880 | This is default name of fallback system-wide configuration | |
881 | file. This file is used only if per-instance configuration | |
882 | variable is not found. | |
883 | /etc/gitweb-common.conf:: | |
884 | This is default name of common system-wide configuration | |
885 | file. | |
886 | ||
887 | ||
888 | SEE ALSO | |
889 | -------- | |
890 | linkgit:gitweb[1], linkgit:git-instaweb[1] | |
891 | ||
892 | 'gitweb/README', 'gitweb/INSTALL' | |
893 | ||
894 | GIT | |
895 | --- | |
896 | Part of the linkgit:git[1] suite |