uTools-Manuals/docs/git/gitweb.html
2019-04-08 23:22:26 +08:00

80 lines
36 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="c-markdown doc-markdown"><div class="doc-postil"><div class="c-markdown"><h2>Name</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>gitweb  -  Git web界面Git仓库的前端</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>概要</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>要开始使用gitweb请从Git存储库运行git-instaweb [1]。这将配置并启动您的Web服务器并运行Web浏览器指向gitweb。</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>描述</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>Gitweb为Git存储库提供了一个Web界面。其功能包括</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>使用公共根查看多个Git存储库。</p></li><li><p>浏览版本库的每个版本。</p></li><li><p>在任何修订版中查看存储库中文件的内容。</p></li><li><p>查看分支的修订日志,文件和目录的历史记录,查看什么时候由谁改变。</p></li><li><p>查看任何文件的责任/注释详细信息(如果启用)。</p></li><li><p>为任何分支生成提交的RSS和Atom提要。这些供稿在现代网络浏览器中可自动发现。</p></li><li><p>查看修订版本中更改的所有内容,并逐个查看修订版本,查看版本库的历史记录。</p></li><li><p>查找提交的消息与提供的搜索词匹配的提交。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><h2>组态</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>gitweb的行为的各个方面可以通过配置文件<code>gitweb_config.perl</code><code>/etc/gitweb.conf</code>。有关详细信息请参阅gitweb.conf [5]。</p></div></div><div class="doc-postil"><div class="c-markdown"><h3></h3></div></div><div class="doc-postil"><div class="c-markdown"><p>Gitweb可以显示来自一个或多个Git存储库的信息。这些存储库必须全部在本地文件系统上并且必须共享公共存储库的根目录即全部位于单个父存储库下另请参阅“高级Web服务器设置”部分“具有多个项目的根目录的Web服务器配置”小节</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">our $projectroot = '/path/to/parent/directory';</pre></div></div><div class="doc-postil"><div class="c-markdown"><p><code>$projectroot</code>is 的默认值<code>/pub/git</code>。您可以在构建gitweb时通过<code>GITWEB_PROJECTROOT</code>构建配置变量来更改它。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>默认情况下所有Git仓库<code>$projectroot</code>都是可见的并可用于gitweb。默认情况下通过扫描<code>$projectroot</code>Git存储库的目录生成项目列表对于更精确的对象数据库; gitweb对工作区域不感兴趣并且最适合显示“裸”存储库</p></div></div><div class="doc-postil"><div class="c-markdown"><p>gitweb中存储库的名称是其<code>$GIT_DIR</code>(它的对象数据库)相对于的路径<code>$projectroot</code>。因此,存储库$ repo可以在“$ projectroot / $ repo”找到。</p></div></div><div class="doc-postil"><div class="c-markdown"><h3>项目列表文件格式</h3></div></div><div class="doc-postil"><div class="c-markdown"><p>您可以通过扫描从$ projectroot开始的文件系统来找到存储库而不是让gitweb通过从$ projectroot开始扫描文件系统来找到存储库您可以通过设置<code>$projects_list</code>指向带有项目列表的纯文本文件(以及其他信息)来提供预先生成的可见项目列表。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>该文件使用以下格式:</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>每行一个记录(用于项目/存储库); 不支持行延续(换行符转义)。</p></li><li><p>前导和尾随空白被忽略。</p></li><li><p>空白分隔的字段; 任何运行的空白都可以用作字段分隔符Perl的“ <code>split(" ", $line)</code>” 规则)。</p></li><li><p>字段使用RFC 3986第2.1节百分比编码中定义的修改的URI编码或者更确切地说“查询字符串编码”请参阅https://en.wikipedia.org/wiki/Query_string#URL_encoding区别在于SP (“”)可以编码为“+”(因此“+”必须也是百分比编码的)。保留字符为:“%”(用于编码),“+”可用于编码空格Perl中定义的所有空白字符包括SPTAB和LF用于分隔记录中的字段</p></li><li><p>当前识别的字段是:&lt;存储库路径&gt;存储库GIT_DIR的路径相对于<code>$projectroot</code> 作为存储库所有者显示的&lt;存储库所有者&gt;,最好是全名或电子邮件,或两者兼而有之</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><p>您可以<code>TXT</code>直接从gitweb 使用project_index操作项目列表页面上的链接生成项目列表索引文件; 另请参阅下面的“使用gitweb生成项目列表”一节。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>示例内容:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">foo.git       Joe+R+Hacker+&lt;joe@example.com&gt;foo/bar.git   O+W+Ner+&lt;owner@example.org&gt;</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>默认情况下,这个文件只控制项目列表页面上<strong>可见</strong>的项目注意没有指向正确识别的Git存储库的项目将不会被gitweb显示。即使项目在项目列表页面上不可见您仍然可以通过手工制作gitweb URL来查看它。通过将<code>$strict_export</code>配置变量参见gitweb.conf [5])设置为真值,您可以只允许查看也显示在概览页面上的存储库(即只有项目列表文件中明确列出的项目才可访问)。</p></div></div><div class="doc-postil"><div class="c-markdown"><h3>使用gitweb生成项目列表</h3></div></div><div class="doc-postil"><div class="c-markdown"><p>我们假设GITWEB_CONFIG具有默认的Makefile值<code>gitweb_config.perl</code>。将以下内容放入<code>gitweb_make_index.perl</code>文件中:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">read_config_file("gitweb_config.perl");$projects_list = $projectroot;</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>然后创建以下脚本以适合GITWEB_LIST构建配置变量<code>$projects_list</code>gitweb config中的变量的格式获取项目列表</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">#!/bin/shexport GITWEB_CONFIG="gitweb_make_index.perl"export GATEWAY_INTERFACE="CGI/1.1"export HTTP_ACCEPT="*/*"export REQUEST_METHOD="GET"export QUERY_STRING="a=project_index"perl -- /var/www/cgi-bin/gitweb.cgi</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>运行该脚本并将其输出保存到文件中。这个文件然后可以用作项目列表文件,这意味着你可以设置<code>$projects_list</code>它的文件名。</p></div></div><div class="doc-postil"><div class="c-markdown"><h3>控制对Git存储库的访问</h3></div></div><div class="doc-postil"><div class="c-markdown"><p>默认情况下所有Git仓库<code>$projectroot</code>都是可见的并可用于gitweb。然而你可以配置gitweb控制对存储库的访问。</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>如“项目列表文件格式”部分所述您可以通过在项目列表文件中选择性地包含存储库并将gitweb配置变量设置为指向它来控制哪些项目<strong>可见</strong><code>$projects_list</code>。通过<code>$strict_export</code>设置,项目列表文件也可用于控制哪些存储库<strong>可用</strong></p></li><li><p>您可以将gitweb配置为仅列出并允许通过<code>$export_ok</code>gitweb配置文件中的变量查看显式导出的存储库; 请参阅gitweb.conf [5]手册页。如果它的计算结果为true那么gitweb只有<code>$export_ok</code>在它的对象数据库中存在名为by的文件时才显示存储库如果目录有指定的魔术文件<code>$export_ok</code>。例如默认情况下git-daemon [1](除非使用<code>--export-all</code>选项)允许仅为那些具有<code>git-daemon-export-ok</code>文件的存储库提取数据。添加我们的$ export_ok =“git-daemon-export-ok”;</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><p>使gitweb显示并只允许访问那些可以通过<code>git://</code>协议获取的存储库。</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>最后可以指定一个任意perl子例程这个子例程会被每个资源库调用以确定它是否可以导出。子例程接收项目存储库的绝对路径作为其唯一参数即“$ projectroot / $ project”。例如如果您使用mod_perl来运行脚本并为您的存储库配置了愚蠢的HTTP协议认证那么只有当用户有权读取这些文件时才可以使用以下挂接$ export_auth_hook = sub {use Apache2 :: SubRequest; 使用Apache2 :: Const -compile =&gt; qwHTTP_OK; my $ path =“$ _0 / HEAD”; 我的$ r = Apache2 :: RequestUtil-&gt;请求; my $ sub = $ r-&gt; lookup_file$ path; 返回$子&gt;文件名eq $路径&amp;&amp; $子&gt;状态== Apache2 ::常量:: HTTP_OK; };</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><h3>每个版本库的gitweb配置</h3></div></div><div class="doc-postil"><div class="c-markdown"><p>您可以通过在<code>GIT_DIR</code>Git存储库中创建文件或通过设置一些repo配置变量in <code>GIT_DIR/config</code>参见git-config [1]来配置gitweb中显示的单个存储库。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>您可以在存储库中使用以下文件:</p></div></div><div class="doc-postil"><div class="c-markdown"><p>README.html</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>&lt;div&gt;</code>块元素中的gitweb项目“摘要”页面中包含的html文件HTML片段。您可以使用它来获取项目的更长描述提供链接例如项目的主页等。只有在XSS预防功能关闭的情况下才能识别这种情况<code>$prevent_xss</code>错误请参阅gitweb.conf [5]; 在未来XSS预防开启时安全地包含自述文件的方法可能会被制定出来。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>description (or <code>gitweb.description</code>)</p></div></div><div class="doc-postil"><div class="c-markdown"><p>Short简称为<code>$projects_list_description_width</code>项目列表页面默认为25个字符;请参阅gitweb.conf [5])(项目库的项目)单行描述。纯文本文件; HTML将被转义。默认设置为</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">Unnamed repository; edit this file to name it for gitweb.</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>在创建存储库期间通常安装在模板中<code>/usr/share/git-core/templates/</code>。您可以使用<code>gitweb.description</code>repo配置变量但该文件优先。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>category (or <code>gitweb.category</code>)</p></div></div><div class="doc-postil"><div class="c-markdown"><p>项目的单线类别,用于在<code>$projects_list_group_categories</code>启用时对项目进行分组。默认情况下(文件和配置变量不存在),未分类的项目放在<code>$project_list_default_category</code>类别中。您可以使用<code>gitweb.category</code>repo配置变量但该文件优先。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>配置变量<code>$projects_list_group_categories</code><code>$project_list_default_category</code>描述在gitweb.conf [5]</p></div></div><div class="doc-postil"><div class="c-markdown"><p>cloneurl (or multiple-valued <code>gitweb.url</code>)</p></div></div><div class="doc-postil"><div class="c-markdown"><p>带有存储库URL的文件用于克隆和提取每行一个。显示在项目摘要页面中。您可以使用多值<code>gitweb.url</code>存储库配置变量,但该文件优先。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这是每个存储库增强/版本的基于全局前缀的<code>@git_base_url_list</code>gitweb配置变量请参阅gitweb.conf [5])。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>gitweb.owner</p></div></div><div class="doc-postil"><div class="c-markdown"><p>您可以使用<code>gitweb.owner</code>存储库配置变量来设置存储库的所有者。它显示在项目列表和摘要页面中。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>如果未设置则使用文件系统目录的所有者通过GECOS字段即来自<strong>getpwuid</strong>3的实名字段如果<code>$projects_list</code>未设置gitweb扫描<code>$projectroot</code>存储库); 如果<code>$projects_list</code>指向使用存储库列表的文件,则项目所有者将默认为此文件对给定存储库的值。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>various <code>gitweb.*</code> config variables (in config)</p></div></div><div class="doc-postil"><div class="c-markdown"><p>阅读<code>%feature</code>哈希的详细列表和描述。另请参阅gitweb.conf中的“配置gitweb功能”部分[5]</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>行动和网址</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>Gitweb可以使用基于URL的path_info组件或者它可以通过查询参数传递所有必要的信息。典型的gitweb网址分为五个部分</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">.../gitweb.cgi/&lt;repo&gt;/&lt;action&gt;/&lt;revision&gt;:/&lt;path&gt;?&lt;arguments&gt;</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>回购</p></div></div><div class="doc-postil"><div class="c-markdown"><p>操作将在其上执行的存储库。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>除了列出所有可用项目的所有操作(无论采用何种形式),都需要此参数。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>action</p></div></div><div class="doc-postil"><div class="c-markdown"><p>将要运行的操作。默认为<code>projects_list</code>如果没有设置回购,<code>summary</code>否则。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>调整</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示修订。默认为HEAD。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>path</p></div></div><div class="doc-postil"><div class="c-markdown"><p>执行操作的&lt;repository&gt;中的路径,用于需要它的操作。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>arguments</p></div></div><div class="doc-postil"><div class="c-markdown"><p>任何控制动作行为的参数。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>某些操作需要或允许指定两个修订版本有时甚至包含两个路径名。在大多数通用形式中这样的基于路径信息组件的gitweb URL看起来像这样</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">.../gitweb.cgi/&lt;repo&gt;/&lt;action&gt;/&lt;revision_from&gt;:/&lt;path_from&gt;..&lt;revision_to&gt;:/&lt;path_to&gt;?&lt;arguments&gt;</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>每个动作都以子例程的形式实现,并且必须存在于%动作哈希中。某些操作默认情况下处于禁用状态,必须通过功能机制启用。例如,要启用<code>blame</code>视图请将以下内容添加到gitweb配置文件中</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">$feature{'blame'}{'default'} = [1];</pre></div></div><div class="doc-postil"><div class="c-markdown"><h3>操作:</h3></div></div><div class="doc-postil"><div class="c-markdown"><p>标准行动是:</p></div></div><div class="doc-postil"><div class="c-markdown"><p>project_list</p></div></div><div class="doc-postil"><div class="c-markdown"><p>列出可用的Git存储库。如果在URL中未指定存储库则这是默认命令。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>summary</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示关于给定存储库的摘要 如果在URL中没有指定操作则这是默认命令并且只指定存储库。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>heads   remotes</p></div></div><div class="doc-postil"><div class="c-markdown"><p>列出给定存储库中的所有本地或全部远程跟踪分支。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>后者默认情况下不可用,除非已配置。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>tags</p></div></div><div class="doc-postil"><div class="c-markdown"><p>列出给定存储库中的所有标记(轻量级和注释)。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>blob   tree</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在给定的版本中显示给定存储库路径中的文件和目录。如果在URL中没有指定任何操作并且给出路径则这是默认命令。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>blob_plain</p></div></div><div class="doc-postil"><div class="c-markdown"><p>在给定路径和修订版本中,返回给定存储库中文件的原始数据。此行为的链接已标记<code>raw</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>blobdiff</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示同一文件的两个修订之间的差异。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>blame   blame_incremental</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示文件的责任也称为注释信息。在每行的基础上它显示该行最后更改的版本以及提交更改的用户。增量版本如果启用了JavaScript则会自动使用该版本使用Ajax向指定文件的内容逐渐添加责备信息。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>出于性能原因,此操作默认处于禁用状态。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>提交commitdiff</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示有关存储库中特定提交的信息。该<code>commit</code>视图更详细地显示了有关提交的信息,该<code>commitdiff</code>操作显示了给定提交的变更集。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>patch</p></div></div><div class="doc-postil"><div class="c-markdown"><p>以纯文本邮件格式返回提交适用于使用git-am [1]。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>tag</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示特定的注释标签(标签对象)。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>log   shortlog</p></div></div><div class="doc-postil"><div class="c-markdown"><p>显示给定分支的日志信息(提交消息或仅提交主题)(从给定修订开始)。</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>shortlog</code>视图是更紧凑; 它显示每行一次提交。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>history</p></div></div><div class="doc-postil"><div class="c-markdown"><p>从给定修订默认为HEAD即默认分支开始显示给定存储库路径中文件或目录的历史记录。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这种观点与<code>shortlog</code>观点相似。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>rss   atom</p></div></div><div class="doc-postil"><div class="c-markdown"><p>生成对存储库的更改的RSS或Atom订阅源。</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>网络服务器配置</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>本节介绍如何配置一些常用的Web服务器来运行gitweb。在所有情况下<code>/path/to/gitweb</code>在这些例子中是你运行gitweb并且包含的目录<code>gitweb_config.perl</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>如果您已经配置了一个未在此处列出的gitweb的Web服务器请发送说明以便它们可以包含在未来版本中。</p></div></div><div class="doc-postil"><div class="c-markdown"><h3>Apache作为CGI</h3></div></div><div class="doc-postil"><div class="c-markdown"><p>必须将Apache配置为在安装gitweb的目录中支持CGI脚本。我们假设它是<code>/var/www/cgi-bin</code>目录。</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"&lt;Directory "/var/www/cgi-bin"&gt;
    Options Indexes FollowSymlinks ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all&lt;/Directory&gt;</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>使用该配置,浏览存储库的完整路径是:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">http://server/cgi-bin/gitweb.cgi</pre></div></div><div class="doc-postil"><div class="c-markdown"><h3>Apache with mod_perl, via ModPerl::Registry</h3></div></div><div class="doc-postil"><div class="c-markdown"><p>你可以在gitweb中使用mod_perl。您必须安装Apache :: Registry用于mod_perl 1.x或ModPerl :: Registry用于mod_perl 2.x以启用此支持。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>假设安装了gitweb <code>/var/www/perl</code>以下Apache配置适用于mod_perl 2.x是合适的。</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">Alias /perl "/var/www/perl"&lt;Directory "/var/www/perl"&gt;
    SetHandler perl-script
    PerlResponseHandler ModPerl::Registry
    PerlOptions +ParseHeaders
    Options Indexes FollowSymlinks +ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all&lt;/Directory&gt;</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>使用该配置,浏览存储库的完整路径是:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">http://server/perl/gitweb.cgi</pre></div></div><div class="doc-postil"><div class="c-markdown"><h3>Apache与FastCGI</h3></div></div><div class="doc-postil"><div class="c-markdown"><p>Gitweb与Apache和FastCGI协同工作。首先您需要重命名复制或将gitweb.cgi链接到gitweb.fcgi。假设gitweb安装在<code>/usr/share/gitweb</code>目录中。以下Apache配置是合适的未测试</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">FastCgiServer /usr/share/gitweb/gitweb.cgi
ScriptAlias /gitweb /usr/share/gitweb/gitweb.cgi
Alias /gitweb/static /usr/share/gitweb/static&lt;Directory /usr/share/gitweb/static&gt;
    SetHandler default-handler&lt;/Directory&gt;</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>使用该配置,浏览存储库的完整路径是:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">http://server/gitweb</pre></div></div><div class="doc-postil"><div class="c-markdown"><h2>高级Web服务器设置</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>所有这些示例都使用请求重写,并且需要<code>mod_rewrite</code>(或等效;下面的示例是为Apache编写的</p></div></div><div class="doc-postil"><div class="c-markdown"><h3>gitweb的唯一URL和抓取</h3></div></div><div class="doc-postil"><div class="c-markdown"><p>如果你想为gitweb和你的<code>http://</code>仓库都有一个URL 你可以像这样配置Apache</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">&lt;VirtualHost *:80&gt;
    ServerName    git.example.org
    DocumentRoot  /pub/git
    SetEnv        GITWEB_CONFIG   /etc/gitweb.conf
    # turning on mod rewrite
    RewriteEngine on
    # make the front page an internal rewrite to the gitweb script
    RewriteRule ^/$  /cgi-bin/gitweb.cgi
    # make access for "dumb clients" work
    RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ \                /cgi-bin/gitweb.cgi%{REQUEST_URI}  [L,PT]&lt;/VirtualHost&gt;</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>上面的配置希望你的公共仓库可以作为可复制的Git URL和可浏览的gitweb界面一起存在<code>/pub/git</code>并且将作为它们服务<code>http://git.domain.org/dir-under-pub-git</code>。如果你启动你的git-daemon [1]<code>--base-path=/pub/git --export-all</code>那么你甚至可以使用<code>git://</code>完全相同路径的URL。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>设置环境变量<code>GITWEB_CONFIG</code>会告诉gitweb使用指定的文件即在本例中<code>/etc/gitweb.conf</code>作为gitweb的配置。在上面的例子中你并不需要它。只有当你的配置文件与内置不同的地方在编译gitweb的时候<code>gitweb_config.perl</code>或者<code>/etc/gitweb.conf</code>。有关详细信息请参阅gitweb.conf [5],特别是有关优先级规则的信息。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>如果您使用示例中的重写规则,则<strong>可能</strong>还需要在您的gitweb配置文件中使用<code>/etc/gitweb.conf</code>以下内容(以下示例):</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">@stylesheets = ("/some/absolute/path/gitweb.css");$my_uri    = "/";$home_link = "/";$per_request_config = 1;</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>现在尽管gitweb应该在需要时创建HTML基本标记为相对链接设置基本URI所以它应该自动工作。</p></div></div><div class="doc-postil"><div class="c-markdown"><h3>具有多个项目根目录的Web服务器配置</h3></div></div><div class="doc-postil"><div class="c-markdown"><p>如果您想要将gitweb用于多个项目根目录您可以按照以下方式编辑Apache虚拟主机和gitweb配置文件。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>虚拟主机配置在Apache配置文件中应该如下所示</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">&lt;VirtualHost *:80&gt;
    ServerName    git.example.org
    DocumentRoot  /pub/git
    SetEnv        GITWEB_CONFIG  /etc/gitweb.conf
    # turning on mod rewrite
    RewriteEngine on
    # make the front page an internal rewrite to the gitweb script
    RewriteRule ^/$  /cgi-bin/gitweb.cgi  [QSA,L,PT]
    # look for a public_git folder in unix users' home
    # http://git.example.org/~&lt;user&gt;/
    RewriteRule ^/\~([^\/]+)(/|/gitweb.cgi)?$        /cgi-bin/gitweb.cgi \                [QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT]
    # http://git.example.org/+&lt;user&gt;/
    #RewriteRule ^/\+([^\/]+)(/|/gitweb.cgi)?$        /cgi-bin/gitweb.cgi \                 [QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT]
    # http://git.example.org/user/&lt;user&gt;/
    #RewriteRule ^/user/([^\/]+)/(gitweb.cgi)?$        /cgi-bin/gitweb.cgi \                 [QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT]
    # defined list of project roots
    RewriteRule ^/scm(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi \                [QSA,E=GITWEB_PROJECTROOT:/pub/scm/,L,PT]
    RewriteRule ^/var(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi \                [QSA,E=GITWEB_PROJECTROOT:/var/git/,L,PT]
    # make access for "dumb clients" work
    RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ \                /cgi-bin/gitweb.cgi%{REQUEST_URI}  [L,PT]&lt;/VirtualHost&gt;</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>这里实际的项目根目录通过<code>GITWEB_PROJECT_ROOT</code>web服务器的环境变量传递给gitweb 所以你需要把下面的代码放到gitweb配置文件中<code>/etc/gitweb.conf</code>在上面的例子中):</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">$projectroot = $ENV{'GITWEB_PROJECTROOT'} || "/pub/git";</pre></div></div><div class="doc-postil"><div class="c-markdown"><p><strong>请注意</strong>,这需要为每个请求设置,因此要么<code>$per_request_config</code>必须是false要么上面的代码必须放在引用的代码中<code>$per_request_config</code>;</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这些配置有两件事。首先,<code>&lt;user&gt;</code>服务器的每个unix用户都能够浏览通过<code>~/public_git/</code>以下URL 找到的gitweb Git存储库</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">http://git.example.org/~&lt;user&gt;/</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>如果您不想在服务器上使用此功能,只需删除第二个重写规则即可。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>如果您已经<code>mod_userdir</code>在您的虚拟主机中使用过,或者您不想使用'〜'作为第一个字符,则只需评论或删除第二个重写规则,然后根据需要取消注释以下内容之一。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>其次,在仓库中发现<code>/pub/scm/</code><code>/var/git/</code>会通过访问<code>http://git.example.org/scm/</code><code>http://git.example.org/var/</code>。您可以通过添加第三和第四个重写规则来添加任意数量的项目根目录。</p></div></div><div class="doc-postil"><div class="c-markdown"><h3>PATH_INFO usage</h3></div></div><div class="doc-postil"><div class="c-markdown"><p>如果你通过放在gitweb中启用PATH_INFO用法</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">$feature{'pathinfo'}{'default'} = [1];</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>在你的gitweb配置文件中可以设置你的服务器使它消耗并生成表单中的URL</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">http://git.example.com/project.git/shortlog/sometag</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>即没有<code>gitweb.cgi</code>部分,通过使用如下配置。此配置假定<code>/var/www/gitweb</code>您的Web服务器的DocumentRoot包含gitweb.cgi脚本和补充静态文件stylesheetfaviconJavaScript</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">&lt;VirtualHost *:80&gt;
        ServerAlias git.example.com
        DocumentRoot /var/www/gitweb        &lt;Directory /var/www/gitweb&gt;
                Options ExecCGI
                AddHandler cgi-script cgi
                DirectoryIndex gitweb.cgi
                RewriteEngine On
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteRule ^.* /gitweb.cgi/$0 [L,PT]        &lt;/Directory&gt;&lt;/VirtualHost&gt;</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>重写规则保证现有的静态文件将被正确地提供而任何其他URL将作为PATH_INFO参数传递给gitweb。</p></div></div><div class="doc-postil"><div class="c-markdown"><p><strong>请注意</strong>,在这种情况下,你不需要特殊的设置<code>@stylesheets</code><code>$my_uri</code><code>$home_link</code>,但你失去了“哑客户端”访问项目的.git迪尔斯在“同一网址的GitWeb和获取”部分所述。后者的一个可能的解决方法如下在你的项目的根目录中例如<code>/pub/git</code>)有<strong>没有</strong> .git扩展名的项目例如<code>/pub/git/project</code>而不是<code>/pub/git/project.git</code>并配置Apache如下</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">&lt;VirtualHost *:80&gt;
        ServerAlias git.example.com
        DocumentRoot /var/www/gitweb
        AliasMatch ^(/.*?)(\.git)(/.*)?$ /pub/git$1$3        &lt;Directory /var/www/gitweb&gt;
                Options ExecCGI
                AddHandler cgi-script cgi
                DirectoryIndex gitweb.cgi
                RewriteEngine On
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteRule ^.* /gitweb.cgi/$0 [L,PT]        &lt;/Directory&gt;&lt;/VirtualHost&gt;</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>额外的AliasMatch使其成为可能</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">http://git.example.com/project.git</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>将原始访问该项目的Git目录以便项目可以克隆同时</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">http://git.example.com/project</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>将提供人性化的gitweb访问。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>这个解决方案并不是100因为如果某个项目有一个名为refbranchtag的开头<code>git/</code>,那么路径如</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">http://git.example.com/project/command/abranch..git/abranch</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>将失败并出现404错误。</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>Bugs</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>请将任何错误或功能请求报告给git@vger.kernel.org将“gitweb”放在电子邮件主题中。</p></div></div></div>