## 命名

gitweb.conf - Gitweb（ Git web 界面）配置文件

## 概要

/etc/gitweb.conf，/etc/gitweb-common.conf，$ GITWEBDIR / gitweb_config.perl

## 描述

用于通过 Web 查看 Git 存储库的 gitweb CGI 脚本使用 perl 脚本片段作为其配置文件。您可以使用“ `our $variable = value`” 设置变量; 来自“＃”字符的文本直到行尾被忽略。有关详细信息，请参阅 perlsyn（1）。

一个例子：

    # gitweb configuration file for http://git.example.org

    #

    our $projectroot = "/srv/git"; # FHS recommendation

    our $site_name = 'Example.org >> Repos';

该配置文件用于覆盖`gitweb.cgi`生成脚本时构建到 gitweb 中的默认设置。

虽然可以改变 gitweb CGI 本身的配置设置，但升级后这些更改将会丢失。配置设置也可以放置在 CGI 脚本所在的同一目录下，并使用默认名称`gitweb_config.perl`- 允许通过使用符号链接来使用不同配置的多个 gitweb 实例。

请注意，可以在每个存储库而不是 gitweb 范围内控制某些配置：请参阅 gitweb [1] 联机帮助页上的“每个存储库 gitweb 配置”小节。

## 讨论

Gitweb 按以下顺序从以下源读取配置数据：

- 内置值（一些在构建阶段设置），

- 通用系统范围的配置文件（默认为`/etc/gitweb-common.conf`），

- 每个实例配置文件（默认`gitweb_config.perl`与安装的 gitweb 位于同一目录中），或者如果它不存在，则系统范围配置文件（默认为备用`/etc/gitweb.conf`）。

在稍后的配置文件中获得的值会覆盖上面序列中早先获得的值。

所述公共系统范围的配置文件，所述回退系统范围的配置文件和每实例配置文件的位置被使用编译时生成文件配置变量，分别在编译时定义`GITWEB_CONFIG_COMMON`，`GITWEB_CONFIG_SYSTEM`和`GITWEB_CONFIG`。

您也可以在运行时通过设置以下的环境变量覆盖的 GitWeb 的配置文件地点：`GITWEB_CONFIG_COMMON`，`GITWEB_CONFIG_SYSTEM`和`GITWEB_CONFIG`一个非空值。

配置文件的语法是 Perl 的，因为这些文件是通过将它们作为 Perl 代码片段（ gitweb 本身写入的语言）来处理的。变量通常使用`our`限定符（如“ `our $variable = <value>;`”）来设置，以避免语法错误，如果新版本的 gitweb 不再使用变量并因此停止声明它。

您可以使用 read_config_file（）子例程包含其他配置文件。例如，可能需要将 gitweb 配置与访问控制相关联，以便通过 Gitolite（ Git 存储库管理工具之一）在单独的文件中查看存储库，例如`/etc/gitweb-gitolite.conf`。要包括它，放置

    read_config_file("/etc/gitweb-gitolite.conf");

在使用 gitweb 配置文件的某处，例如在每个安装的 gitweb 配置文件中。请注意，read_config_file（）会检查它自己读取的文件是否存在，如果找不到则不执行任何操作。它还处理包含文件中的错误。

完全没有配置文件的默认配置可能对一些安装非常有效。尽管如此，配置文件对于以多种方式自定义或调整 gitweb 的行为很有用，除非使用可配置`%features`变量明确启用（另请参阅下面的“配置 gitweb 功能”部分），否则某些可选功能将不存在。

## 配置变量

一些配置变量的默认值（嵌入在 CGI 脚本中）在构建 gitweb 期间设置 - 如果是这种情况，则将这个事实放在它们的描述中。有关`INSTALL`构建和安装 gitweb 的指导，请参阅 gitweb 的文件。

### 存储库的位置

下面描述的配置变量控制着 gitweb 如何找到 Git 存储库，以及如何显示和访问存储库。

另请参阅 gitweb [1] 手册页中的“存储库”和后面的小节。

$projectroot

绝对文件系统路径，将被预置为项目路径; 存储库的路径是`$projectroot/$project`。设置为`$GITWEB_PROJECTROOT`在安装过程中。这个变量必须正确设置为gitweb找到存储库。

例如，如果`$projectroot`通过在 gitweb 配置文件中添加以下内容来将其设置为 “/ srv / git” ：

    our $projectroot = "/srv/git";

然后

    http://git.example.com/gitweb.cgi?p=foo/bar.git

和它的基于 path_info 的等价物

    http://git.example.com/gitweb.cgi/foo/bar.git

将映射到`/srv/git/foo/bar.git`文件系统上的路径。

$projects_list

列出项目的纯文本文件的名称或要为项目扫描的目录名称。

项目列表文件应每行列出一个项目，每行具有以下格式

    <URI-encoded filesystem path to repository> SP <URI-encoded repository owner>

此变量的默认值由`GITWEB_LIST`安装时的 makefile 变量确定。如果这个变量是空的，gitweb 将回退到扫描`$projectroot`目录的存储库。

$project_maxdepth

如果`$projects_list`变量未设置，gitweb 将递归扫描 Git 存储库的文件系统。所述`$project_maxdepth`用于限制横动深度，相对于`$projectroot`（起点）; 这意味着目录其进一步从`$projectroot`比`$project_maxdepth`将被跳过。

它纯粹是性能优化，最初用于 MacOS X ，递归目录遍历速度慢。Gitweb 遵循符号链接，但它检测周期，忽略任何重复的文件和目录。

此变量的默认值由构建时配置变量确定，该变量`GITWEB_PROJECT_MAXDEPTH`默认为2007。

$export_ok

仅当该文件存在时才显示存储库（在存储库中）。只有当这个变量的计算结果为真时才有效。通过设置构建 gitweb 时可以设置`GITWEB_EXPORT_OK`。这条路是相对的`GIT_DIR`。git-daemon1 使用`git-daemon-export-ok`，除非开始`--export-all`。默认情况下，这个变量没有设置，这意味着这个功能被关闭。

$export_auth_hook

用于确定应显示哪些存储库的函数。这个子程序应该带一个参数，一个项目的完整路径，如果它返回 true ，那么该项目将被包含在项目列表中，只要满足 $ export_ok 描述的其他需求，就可以通过 gitweb 访问 $ projects_list 和 $ projects_maxdepth 。例：

    our $export_auth_hook = sub { return -e "$_[0]/git-daemon-export-ok"; };

尽管上述可以通过使用`$export_ok`替代来完成

    our $export_ok = "git-daemon-export-ok";

如果未设置（默认），则表示此功能已禁用。

另请参阅 gitweb [1] 联机帮助页中的“控制对 Git 存储库的访问”小节中更多涉及的示例。

$strict_export

只允许查看概览页面上显示的存储库。例如，这使得`$gitweb_export_ok`文件可以决定版本库是否可用，而不仅仅是如何显示。如果`$gitweb_list`指向包含项目列表的文件，则只有列出的那些存储库可用于 gitweb 。可以在通过构建 gitweb 时设置`GITWEB_STRICT_EXPORT`。默认情况下，这个变量没有设置，这意味着你可以直接访问隐藏在项目列表页面中的那些存储库（例如，没有在 $ projects_list 文件中列出）。

### 查找文件

以下配置变量告诉 gitweb 在哪里可以找到文件。这些变量的值是文件系统上的路径。

$GIT

使用核心 git 可执行文件。默认设置为`$GIT_BINDIR/git`，默认设置为`$(bindir)/git`。如果您使用从二进制包安装的 Git ，通常应将其设置为 “/ usr / bin / git” 。如果你的 web 服务器有一个合理的 PATH ，这可能只是 “git” ; 从安全角度来看，最好使用绝对路径来使用 git 二进制。如果您安装了多个 Git 版本，则可以使用它来选择要使用的版本。必须（正确）设置 gitweb 才能工作。

$mimetypes_file

在尝试之前用于（基于文件扩展名）MIME 类型猜测的文件`/etc/mime.types`。注意这条路径，如果是相对的，取决于当前的 Git 仓库，而不是 CGI 脚本。如果未设置，则仅`/etc/mime.types`使用（如果存在于文件系统中）。如果未找到 mimetypes 文件，则禁用基于文件扩展名的 mimetype 猜测。取消默认设置。

$highlight_bin

由于对参数和输出的假设，它必须是来自http://www.andre-simon.de的路径。默认设置为`highlight`; 将其设置为完整路径以突出显示可执行文件，如果它未安装在您的 Web 服务器的PATH 上 。请注意，该`highlight`功能必须设置为 gitweb 实际使用语法高亮。

注：对于要突出显示的文件，必须检测其语法类型，并且必须通过“突出显示”支持该语法。默认的语法检测是最小的，并且有许多支持的语法类型，默认情况下不检测。有三种添加语法检测的选项。第一个和第二个优先级是`%highlight_basename`and `%highlight_ext`，它根据基本名称（完整的文件名，例如“Makefile”）和扩展名（例如“sh”）进行检测。这些散列的键分别是基本名称和扩展名，给定键的值是要传递`--syntax <syntax>`给“高亮” 的语法的名称。最后的优先级是“高亮”配置`Shebang`正则表达式根据文件中的第一行检测语言（例如，匹配行“＃！/ bin / bash”）。有关更多详细信息，请参阅高亮文档和在 /etc/highlight/filetypes.conf 中的默认配置。

例如，如果您要托管的存储库使用 PHP 文件的 “phtml” 扩展名，并且希望为这些文件提供正确的语法高亮显示，则可以将以下内容添加到 gitweb 配置中：

    our %highlight_ext;$highlight_ext{'phtml'} = 'php';

### 链接及其目标

下面描述的配置变量配置了一些 gitweb 链接：它们的目标和它们的外观（文本或图像），以及在哪里可以找到页面先决条件（stylesheet，favicon，images，scripts）。通常它们保持其默认值，可能的例外是`@stylesheets`变量。

@stylesheets

样式表的 URI 列表（相对于页面的基本 URI ）。您可以指定多个样式表，例如，在单独的样式表中使用 “gitweb.css” 作为基础，并使用特定于站点的修改，以便升级 gitweb 。例如，您可以`site`通过放置来添加样式表

    push @stylesheets, "gitweb-site.css";

在 gitweb 配置文件中。那些相对路径的值是相对于 gitweb 的基本 URI 。

该列表应该包含 gitweb 标准样式表的 URI 。gitweb 样式表的缺省 URI 可以在`GITWEB_CSS`生成时使用 makefile 变量进行设置。其默认值是`static/gitweb.css`（或者`static/gitweb.min.css`如果`CSSMIN`变量已定义，即如果在构建过程中使用了 CSS 缩小器）。

注意：还有一个传统的`$stylesheet`配置变量，旧的 gitweb 使用它。如果`$stylesheet`定义了变量，那么只有 gitweb 使用此变量给出的 CSS 样式表。

$logo

指向您放置`git-logo.png`在您的 Web 服务器上，或者指向标识的通用 URI ，72x27大小）。该图像显示在每个 gitweb 页面的右上角，并用作 Atom 订阅源的徽标。相对于 gitweb 的基本 URI（作为路径）。使用`GITWEB_LOGO`变量构建 gitweb 时可以调整默认设置为`static/git-logo.png`。

$favicon

指向您放置`git-favicon.png`在 Web 服务器上的位置，或者指向 favicon 的通用 URI ，它将作为 “image / png” 类型提供。支持网站图标（网站图标）的网页浏览器可能会在浏览器的网址列中显示它们，并且会在书签中的站点名称旁显示它们。相对于 gitweb 的基本 URI 。可以在构建时使用`GITWEB_FAVICON`变量进行调整。默认设置为`static/git-favicon.png`。

$javascript

指向您放置`gitweb.js`在您的 Web 服务器上的位置，或指向 gitweb 使用的 JavaScript 代码的 URI 的更一般化。相对于 gitweb 的基本 URI 。可以在构建时使用`GITWEB_JS`构建时配置变量进行设置。

默认值是`static/gitweb.js`或者`static/gitweb.min.js`如果`JSMIN`构建变量已定义，即如果在构建时使用了 JavaScript 缩放器。请注意，这个单个文件是由多个单独的 JavaScript “模块”生成的。

$home_link

所有页面顶部的首页链接目标（视图“面包屑”的第一部分）。默认情况下，它被设置为当前页面的绝对 URI（`$my_uri`如果`$my_uri`是未定义的或者是空字符串，则设置为变量的值或“/” ）。

$home_link_str

`$home_link`（通常是包含项目列表的主要 gitweb 页面）的所有页面顶部的“主页链接”标签。它被用作 gitweb 的 “breadcrumb trail” 的第一个组件：`<home link> / <project> / <action>`。可以在构建时使用`GITWEB_HOME_LINK_STR`变量进行设置。默认情况下，它被设置为 “projects” ，因为此链接会导致项目列表。另一个流行的选择是将其设置为网站的名称。请注意，它被视为原始 HTML ，因此不应从不受信任的来源设置。

@extra_breadcrumbs

在 home 链接之前添加到面包屑路径起始处的附加链接到逻辑上位于 gitweb 项目列表之上的页面（例如托管 gitweb 服务器的组织和部门）。列表中的每个元素都是对数组的引用，其中元素0是链接文本（等同于`$home_link_str`），元素1是目标 URL（等同于`$home_link`）。

例如，以下设置会生成一个浏览路径记录，如 “home / dev / projects / ...” ，其中 “projects” 是主链接。

        our @extra_breadcrumbs = (      [ 'home' => 'https://www.example.org/' ],      [ 'dev'  => 'https://dev.example.org/' ],    );

$logo_url $logo_label

Git 徽标链接（或您的网站徽标，如果您选择使用不同的徽标图像）的 URI 和标签（标题）。默认情况下，这两个参考 Git 主页，https://git-scm.com ; 过去，他们在https://www.kernel.org上提到了 Git 文档。

### 改变 gitweb 的外观

您可以使用下面描述的变量来调整由 gitweb 生成的页面的外观。您可以更改站点名称，为所有页面添加常用页眉和页脚，并在其主页面上（这是项目列表页面）添加此 gitweb 安装的描述等。

$site_name

您的网站或组织的名称，以显示在网页标题中。将其设置为描述清晰书签等的内容。如果未设置此变量或者是，则 gitweb 将使用`SERVER_NAME` `CGI`环境变量的值，将站点名称设置为 “$ SERVER_NAME Git” 或 “未命名Git”（如果未设置此变量） （例如，如果将 gitweb 作为独立脚本运行）。

可以在构建时使用`GITWEB_SITENAME`，取消默认设置。

$site_html_head_string

将 HTML 片段包含在每个页面的 <head> 部分中。可以`GITWEB_SITE_HTML_HEAD_STRING`在构建时使用。没有默认值。

$site_header

包含 HTML 的文件的名称将包含在每个页面的顶部。相对于包含`gitweb.cgi`脚本的目录。可以`GITWEB_SITE_HEADER`在构建时使用。没有默认值。

$site_footer

包含 HTML 的文件的名称将包含在每个页面的底部。相对于包含`gitweb.cgi`脚本的目录。可以`GITWEB_SITE_FOOTER`在构建时使用。没有默认值。

$home_text

如果存在，将包含在 gitweb 项目概览页面（ “projects_list” 视图）中的 HTML 文件的名称。相对于包含 gitweb.cgi 脚本的目录。默认值可以在编译时使用`GITWEB_HOMETEXT`变量进行调整。默认设置为`indextext.html`。

$projects_list_description_width

项目列表中 “Description” 列的宽度（以字符为单位）。更长的描述将被截断（试图在字边界处切割）; 该`title`属性中提供了完整的描述（通常在鼠标悬停中显示）。默认值为25，如果使用长项目描述，则可能太小。

$default_projects_order

项目列表页面上项目排序的默认值，这意味着如果您没有显式地对项目列表进行排序（如果 URL 中没有“o” CGI 查询参数），则使用排序。有效值为“none”（未分类），“Project”（项目名称，即相对于存储库的路径`$projectroot`），“descr”（项目描述），“owner”和“age”（按最新日期承诺）。

默认值是“project”。未知值意味着未排序。

### 改变 gitweb 的行为

这些配置变量控制着`internal` gitweb 的行为。

$default_blob_plain_mimetype

默认的 mimetype 为 blob_plain（原始）视图，如果 mimetype 检查不会导致其他类型; 默认情况下是“text / plain”。Gitweb 根据文件名的扩展名，使用`$mimetypes_file`（如果设置和文件存在）和`/etc/mime.types`文件（参见 mime.types（5）联机帮助页; gitweb 仅支持文件扩展名规则）来猜测文件的 mimetype 。

$default_text_plain_charset

文本文件的默认字符集。如果未设置，则将使用 Web 服务器配置。取消默认设置。

$fallback_encoding

当一行包含非 UTF-8 字符时，Gitweb 会假定这个字符集。回退解码使用时没有错误检查，所以它甚至可以是 “utf-8” 。该值必须是有效的编码; 请参阅 Encoding :: Supported（3pm）手册页获取列表。默认值是“latin1”，又名，“ISO-8859-1”。

@diff_opts

重命名 git-diff 和 git-diff-tree 的检测选项。默认值是（'-M'）; 将其设置为（'-C'）或（'-C'，'-C'）以检测副本，或者将其设置为（），即空列表，如果您不想重命名检测。

请注意，重命名和尤其是复制检测可能会占用相当大的 CPU 资源。还要注意，非 Git 工具在使用上述选项生成的补丁时可能会遇到问题，尤其是涉及文件副本（'-C'）或十字交叉重命名（'-B'）的补丁时。

### 一些可选功能和策略

大多数功能都是通过`%feature`散列来配置的; 然而一些额外的 gitweb 功能可以打开并使用下面描述的变量进行配置。除了控制 gitweb 外观的配置变量外，这个列表还包含配置 gitweb 的管理端的变量（例如，跨站脚本预防;毫无疑问，这是副作用会影响“汇总”页面的外观或负载限制）。

@git_base_url_list

Git 基准 URL 列表。这些 URL 用于生成描述从何处获取项目的 URL ，这些 URL 显示在项目摘要页面上。完整提取网址为“ `$git_base_url/$project`”，用于此列表的每个元素。您可以设置多个基本 URL（例如一个用于`git://`协议，另一个用于`http://`协议）。

请注意，每个存储库配置可以在`$GIT_DIR/cloneurl`文件中设置，也可以`gitweb.url`在项目配置中设置为多值配置变量的值。每个存储库配置优先于由`@git_base_url_list`元素和项目名称组成的值。

通过设置`GITWEB_BASE_URL`构建时配置变量，您可以在构建时设置一个单一值（此列表中的单个条目/项目）。默认情况下它被设置为（），即一个空列表。这意味着 gitweb 不会尝试从项目名称创建项目 URL（以获取）。

$projects_list_group_categories

是否在项目列表页面上按类别启用项目分组。项目的类别由每个存储库配置中的`$GIT_DIR/category`文件或`gitweb.category`变量确定。默认情况下禁用（设置为0）。

$project_list_default_category

未指定任何项目的默认类别。如果将其设置为空字符串，则这些项目将保持未分类并列在分类项目上方的顶部。仅在启用项目类别时使用，这意味着如果`$projects_list_group_categories`为真。默认情况下设置为“”（空字符串）。

$prevent_xss

如果为 true ，则会禁用某些 gitweb 功能，以防止存储库中的内容启动跨站点脚本攻击（ XSS ）攻击。如果您不信任存储库的内容，请将其设置为 true 。默认为 False（设为0）。

$maxload

用于设置我们仍会响应 gitweb 查询的最大负载。如果服务器负载超过这个值，那么 gitweb 将返回“503服务不可用”错误。如果 gitweb 无法确定其值，则服务器负载将被视为0。目前它只能在 Linux 上使用`/proc/loadavg`; 负载中存在系统上活动任务的数量 - 实际运行的进程 - 在最后一分钟的平均值。

设置`$maxload`为未定义的值（`undef`）以关闭此功能。默认值是300。

$omit_age_column

如果为 true ，则省略项目列表页面上最近提交日期的列。它可以为每个存储库节省一点 I / O 和一个分支。

$omit_owner

如果为 true，则显示有关存储库所有者的信息

$per_request_config

如果这被设置为代码引用，它将为每个请求运行一次。您可以通过这种方式设置每个会话更改的配置部分。例如，可以在 gitweb 配置文件中使用以下代码

    our $per_request_config = sub {

            $ENV{GL_USER} = $cgi->remote_user || "gitweb";};

如果`$per_request_config`不是代码引用，则将其解释为布尔值。如果它是真的，gitweb 会根据请求处理一次配置文件，如果它是假的，gitweb 将只处理一次配置文件，每次执行它。默认情况下为真（设置为1）。

注：`$my_url`，`$my_uri`以及`$base_url`与它们的默认值覆盖每个请求之前，所以如果你想改变他们，一定要将此变量设置为 true 或代码参考实现所期望的变化。

这个变量只在使用使用单个 gitweb 实例服务多个请求的持久性 Web 环境时才起作用，如 mod_perl，FastCGI 或 Plackup 。

### 其他变量

通常你不需要改变（调整）下面描述的任何配置变量; 它们应该被 gitweb 自动设置为正确的值。

$version

Gitweb 版本，在从 gitweb.perl 创建 gitweb.cgi 时自动设置。例如，如果您正在运行修改的 gitweb ，则可能需要对其进行修改

    our $version .= " with caching";

如果你运行带有缓存支持的修改版本的 gitweb 。这个变量纯粹是信息性的，用在例如 HTML 标题中的 “generator” meta 标题中。

$my_url $my_uri

gitweb 脚本的完整 URL 和绝对 URL ; 在早期版本的 gitweb 中，您可能需要设置这些变量，但现在应该不需要这样做。看看`$per_request_config`你是否需要设置它们。

$base_url

在通过的 GitWeb 生成的页面基本 URL 为相对 URL（例如`$logo`，`$favicon`，`@stylesheets`如果他们是相对 URL ），并且需要使用`<base href="$base_url">`仅适用于非空 PATH_INFO 的 URL 。通常 gitweb 会正确设置它的值，并且不需要设置这个变量，例如 $ my_uri 或 “/” 。`$per_request_config`无论如何，看看你是否需要重写它。

## 配置 gitweb 功能

许多 gitweb 功能可以启用（或禁用）并使用`%feature`散列进行配置。gitweb 功能的名称是这个散列的关键。

每个`%feature`哈希元素都是一个哈希引用，并具有以下结构：

    "<feature_name>" => {        "sub" => <feature-sub (subroutine)>,        "override" => <allow-override (boolean)>,        "default" => [ <options>... ]},

每个项目不能覆盖一些功能。对于这些特征，适当的`%feature`散列元素的结构具有更简单的形式：

    "<feature_name>" => {        "override" => 0,        "default" => [ <options>... ]},

正如人们可以看到它缺乏 'sub' 元素。

功能配置的每个部分的含义如下所述：

默认

列表（数组参考）功能参数（如果有），也用于切换（启用或禁用）给定功能。

请注意，即使功能不接受任何配置参数，它当前始终是数组引用，而 'default' 仅用于打开或关闭它。在这种情况下，您可以通过设置此元素来打开功能`[1]`，并将其设置为关闭`[0]`。另请参阅关于“示例”部分中的“责备”功能的文章。

要禁用接受参数的功能（可配置），您需要将此元素设置为空列表，即`[]`。

覆盖

如果此字段具有真值，那么给定的功能是可覆盖的，这意味着它可以基于每个存储库进行配置（或启用/禁用）。

通常，通过`gitweb.<feature>`，每个存储库 Git 配置文件中的配置变量可以配置 “<feature>” 。

请注意，默认情况下，任何功能都不可覆盖。

sub

内部细节的实施。重要的是，如果此字段不存在，则不支持给定功能的每个存储库覆盖。

你不需要在 gitweb 配置文件中改变它。

### `%feature` 的功能

`%feature`下面列出了可通过哈希配置的 gitweb 功能。这应该是一个完整的列表，但最终的权威性和完整列表位于 gitweb.cgi 源代码中，具有注释中描述的功能。

blame

启用 “blame” 和 “blame_incremental” blob 视图，为每行显示最后一次修改它的提交; 见 git-blame [1]。这可能非常耗费 CPU 资源，因此默认情况下是禁用的。

可以通过存储库的`gitweb.blame`配置变量（布尔值）在每个存储库上配置此功能。

snapshot

启用并配置 “snapshot” 操作，该操作允许用户下载由 git-archive [1] 生成并可能另外压缩的任何树或提交的压缩归档文件。如果您有大型项目，这可能会产生高流量。

'default' 的值是`%known_snapshot_formats`您希望提供的哈希定义的快照格式名称列表。支持的格式包括 “tgz” ，“tbz2” ，“txz”（ gzip / bzip2 / xz 压缩的 tar 归档文件）和 “zip” ; 请咨询 gitweb 来源获取最终列表。默认情况下只提供 “tgz” 。

可以通过存储库的`gitweb.blame`配置变量（每个存储库基于每个存储库）配置此功能，该变量包含逗号分隔的格式列表或 “none” 以禁用快照。未知值将被忽略。

grep

启用 grep 搜索，该搜索列出当前选定树（目录）中包含给定字符串的文件; 请参阅 git-grep [1]。当然，这可能是 CPU 密集型的。默认启用。

可以通过存储库的`gitweb.grep`配置变量（布尔值）在每个存储库上配置此功能。

pickaxe

启用所谓的镐搜索，它将列出引入或删除文件中给定字符串的提交。这可以是实用的，并且可以比 “blame” 操作更快，但仍然可能是 CPU 密集型的。默认启用。

在 git-log [1] 中描述了`-S<string>`镐头搜索（选项的描述，在 gitdiffcore [7] 中引用镐头输入以获得更多细节）。

通过设置存储库的`gitweb.pickaxe`配置变量（布尔值），可以在每个存储库的基础上配置此功能。

show-sizes

在“树”视图中，在单独的列中启用显示 blob（普通文件）的大小，类似于什么`ls -l`; 请参阅`-l` git-ls-tree [1] 手册页中的选项说明。这花费了一点 I / O 。默认启用。

可以通过存储库的`gitweb.showSizes`配置变量（布尔值）在每个存储库上配置此功能。

patches

启用并配置“修补程序”视图，该视图显示电子邮件（纯文本）输出格式的提交列表; 另请参阅 git-format-patch [1] 。该值是“修补程序”视图中生成的修补程序集中修补程序的最大数量。将该`default`字段设置为包含单个项目的列表或包含空列表以禁用修补程序视图，或包含单个负数的列表以删除任何限制。默认值是16。

可以通过存储库的`gitweb.patches`配置变量（整数）在每个存储库上配置此功能。

avatar

Avatar 支持。启用此功能后，诸如 “shortlog” 或 “commit” 之类的视图将显示与每个提交者和作者的电子邮件相关联的化身。

目前可用的提供商是“gravatar”和“picon”。一次只能选择一个提供者（`default`是一个元素列表）。如果指定了未知的提供者，则该功能被禁用。请注意，某些提供程序可能需要安装额外的 Perl 程序包; 看到`gitweb/INSTALL`更多的细节。

可以通过存储库的`gitweb.avatar`配置变量以每个存储库为基础配置此功能。

另请参阅`%avatar_size`图标和头像的像素大小（“默认”用于像“log”和“shortlog”这样的单线，“double”用于像“commit”，“commitdiff”或“tag”这样的双线） 。如果默认字体大小或线条高度发生变化（例如，通过添加额外的 CSS 样式表`@stylesheets`），可能需要更改这些值。

highlight

“blob”视图中的服务器端语法高亮支持。它要求`$highlight_bin`程序可用（请参阅上面“配置变量”一节中对此变量的描述），因此默认情况下是禁用的。

可以通过存储库的`gitweb.highlight`配置变量（布尔值）在每个存储库上配置此功能。

remote_heads

在 “heads” 列表中启用显示远程头（远程跟踪分支）。在大多数情况下，远程跟踪分支列表是不必要的内部私人细节，因此默认情况下禁用此功能。通常用于浏览本地存储库的 git-instaweb [1] 启用并使用此功能。

可以通过存储库的`gitweb.remote_heads`配置变量（布尔值）在每个存储库上配置此功能。

其余功能不能在每个项目的基础上重写。

search

启用文本搜索，该搜索将列出与作者，提交者或提交文本匹配给定字符串的提交; 看到的说明`--author`，`--committer`并且`--grep`在 GIT 中日志[1]手册页的选项。默认启用。

不支持项目特定的覆盖。

forks

如果启用此功能，gitweb 会将项目根目录（ basename ）的子目录中的项目视为现有项目的分支。对于每个项目`$projname.git`，`$projname/`目录及其子目录中的项目将不会显示在主项目列表中。相反，“+”标记显示在+ $ projname +旁边，该标记链接到列出所有分支（`$projname/`子目录中的所有项目）的“分支”视图。此外，项目摘要页面链接了项目的“分支”视图。

如果项目列表是从文件中获取的（`$projects_list`指向文件），则只有在该文件中的主项目之后列出了叉才会被识别。

不支持项目特定的覆盖。

actions

将自定义链接插入到所有项目页面的操作栏中。这使您可以链接到集成到 gitweb 中的第三方脚本。

“default”值由一个三元组列表组成`("<label>", "<link>", "<position>")`，其中“position”是插入链接的标签，“link”是`%n`扩展为项目名称的格式字符串，`%f`文件系统中的项目路径即“$ projectroot / $ project”），`%h`到当前散列（'h'gitweb参数）和`%b`当前散列基数（'hb'gitweb参数）; `%%`扩展为'％'。

例如，在编写此页面时，http: //repo.or.cz Git 托管站点将其设置为以下内容以启用图形日志（使用第三方工具 git-browser ）：

    $feature{'actions'}{'default'} =        [ ('graphiclog', '/git-browser/by-commit.html?r=%n', 'summary')];

这会在 “graphiclog” 链接之后添加一个标题为 “graphiclog” 的链接，导致`git-browser`脚本`r=<project>`作为查询参数传递。

不支持项目特定的覆盖。

timed

启用显示页面页脚（页面底部）中每页生成和显示所花费的时间和多少次 Git 命令。例如，页脚可能包含：“此页面需要6.53325秒和13个 Git 命令才能生成。” 默认情况下禁用。

不支持项目特定的覆盖。

javascript-timezone

启用并配置通过 JavaScript 在 gitweb 输出中更改日期的常用时区的功能。gitweb 输出中的日期包括 “commit” ，“commitdiff” 和 “log” 视图中的 authordate 和 committerdate ，以及 “tag” 视图中的 taggerdate 。默认启用。

该值是三个值的列表：默认时区（用于客户端未选择其他时区并将其保存在 cookie 中），用于存储所选时区的 cookie 的名称以及使用的 CSS 类标记操作的日期。如果您想关闭此功能，请将 “default” 设置为空列表：`[]`。

典型的 gitweb 配置文件只会改变开始（默认）时区，并将其他元素保留为默认值：

    $feature{'javascript-timezone'}{'default'}[0] = "utc";

这里介绍的示例配置保证了向前和向后兼容。

时区值可以是“本地”（对于浏览器使用的本地时区），“utc”（当 JavaScript 或此功能被禁用时 gitweb 使用的）或数字时区，例如 “+/- HHMM” 作为 “+0200” 。

不支持项目特定的覆盖。

extra-branch-refs

“refs” 下将被用作分支参考的附加目录列表。例如，如果您有一个 gerrit 安装程序，其中 refs / heads / 下的所有分支都是官方的，在 refs / sandbox / 下的 push-after-review 和分支，refs / wip 和 refs / other 是权限更宽的用户，你可能想要如下设置这个变量：

    $feature{'extra-branch-refs'}{'default'} =        ['sandbox', 'wip', 'other'];

可以通过存储库的配置变量（其中包含空格分隔的引用列表）将$ feature { `extra-branch-refs`} { `override`}设置为 true后，在每个存储库中配置此功能`gitweb.extraBranchRefs`。一个例子：

    [gitweb]

            extraBranchRefs = sandbox wip other

gitweb.extraBranchRefs 实际上是一个多值配置变量，所以下面的例子也是正确的，结果与上面的片段相同：

    [gitweb]

            extraBranchRefs = sandbox

            extraBranchRefs = wip other

指定不通过 “git check-ref-format” 审查的 ref 是错误的。重复的值被过滤。

## 例子

要启用 blame ，镐搜索和快照支持（允许 “tar.gz” 和 “zip” 快照），同时允许单个项目关闭它们，请将以下内容放入 GITWEB_CONFIG 文件中：

    $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;

如果允许覆盖快照功能，则可以指定全局禁用哪些快照格式。您还可以添加所需的任何命令行选项（例如设置压缩级别）。例如，您可以禁用 Zip 压缩快照并将 gzip（1）设置为在级别6上运行，方法是将以下行添加到 gitweb 配置文件中：

    $known_snapshot_formats{'zip'}{'disabled'} = 1;$known_snapshot_formats{'tgz'}{'compressor'} = ['gzip','-6'];

## Bugs

如果备用配置文件（`/etc/gitweb.conf`）和环境变量覆盖其位置（`GITWEB_CONFIG_SYSTEM`）的名称反映其“fallback”角色，则调试会更容易。保留当前名称以避免破坏工作设置。

## 环境

使用以下环境变量可以覆盖每个实例和系统范围的配置文件的位置：

GITWEB_CONFIG

设置每个实例配置文件的位置。

GITWEB_CONFIG_SYSTEM

设置备用系统范围配置文件的位置。只有在每个实例不存在的情况下，该文件才被读取。

GITWEB_CONFIG_COMMON

设置常用系统配置文件的位置。

## Files

gitweb_config.perl

这是每个实例配置文件的默认名称。上面描述了这个文件的格式。

/etc/gitweb.conf

这是备用系统范围配置文件的默认名称。只有在未找到每个实例的配置变量时才使用此文件。

/etc/gitweb-common.conf

这是通用系统配置文件的默认名称。