?
This document uses PHP Chinese website manual Release
gitweb - Git web界面(Git倉(cāng)庫(kù)的前端)
要開(kāi)始使用gitweb,請(qǐng)從Git存儲(chǔ)庫(kù)運(yùn)行g(shù)it-instaweb [1]。這將配置并啟動(dòng)您的Web服務(wù)器,并運(yùn)行Web瀏覽器指向gitweb。
Gitweb為Git存儲(chǔ)庫(kù)提供了一個(gè)Web界面。其功能包括:
使用公共根查看多個(gè)Git存儲(chǔ)庫(kù)。
瀏覽版本庫(kù)的每個(gè)版本。
在任何修訂版中查看存儲(chǔ)庫(kù)中文件的內(nèi)容。
查看分支的修訂日志,文件和目錄的歷史記錄,查看什么時(shí)候由誰(shuí)改變。
查看任何文件的責(zé)任/注釋詳細(xì)信息(如果啟用)。
為任何分支生成提交的RSS和Atom提要。這些供稿在現(xiàn)代網(wǎng)絡(luò)瀏覽器中可自動(dòng)發(fā)現(xiàn)。
查看修訂版本中更改的所有內(nèi)容,并逐個(gè)查看修訂版本,查看版本庫(kù)的歷史記錄。
查找提交的消息與提供的搜索詞匹配的提交。
gitweb的行為的各個(gè)方面可以通過(guò)配置文件gitweb_config.perl
或/etc/gitweb.conf
。有關(guān)詳細(xì)信息,請(qǐng)參閱gitweb.conf [5]。
Gitweb可以顯示來(lái)自一個(gè)或多個(gè)Git存儲(chǔ)庫(kù)的信息。這些存儲(chǔ)庫(kù)必須全部在本地文件系統(tǒng)上,并且必須共享公共存儲(chǔ)庫(kù)的根目錄,即全部位于單個(gè)父存儲(chǔ)庫(kù)下(另請(qǐng)參閱“高級(jí)Web服務(wù)器設(shè)置”部分,“具有多個(gè)項(xiàng)目的根目錄的Web服務(wù)器配置”小節(jié))。
our $projectroot = '/path/to/parent/directory';
$projectroot
is 的默認(rèn)值/pub/git
。您可以在構(gòu)建gitweb時(shí)通過(guò)GITWEB_PROJECTROOT
構(gòu)建配置變量來(lái)更改它。
默認(rèn)情況下,所有Git倉(cāng)庫(kù)$projectroot
都是可見(jiàn)的,并可用于gitweb。默認(rèn)情況下,通過(guò)掃描$projectroot
Git存儲(chǔ)庫(kù)的目錄生成項(xiàng)目列表(對(duì)于更精確的對(duì)象數(shù)據(jù)庫(kù); gitweb對(duì)工作區(qū)域不感興趣,并且最適合顯示“裸”存儲(chǔ)庫(kù))。
gitweb中存儲(chǔ)庫(kù)的名稱(chēng)是其$GIT_DIR
(它的對(duì)象數(shù)據(jù)庫(kù))相對(duì)于的路徑$projectroot
。因此,存儲(chǔ)庫(kù)$ repo可以在“$ projectroot / $ repo”找到。
您可以通過(guò)掃描從$ projectroot開(kāi)始的文件系統(tǒng)來(lái)找到存儲(chǔ)庫(kù),而不是讓gitweb通過(guò)從$ projectroot開(kāi)始掃描文件系統(tǒng)來(lái)找到存儲(chǔ)庫(kù),您可以通過(guò)設(shè)置$projects_list
指向帶有項(xiàng)目列表的純文本文件(以及其他信息)來(lái)提供預(yù)先生成的可見(jiàn)項(xiàng)目列表。
該文件使用以下格式:
每行一個(gè)記錄(用于項(xiàng)目/存儲(chǔ)庫(kù)); 不支持行延續(xù)(換行符轉(zhuǎn)義)。
前導(dǎo)和尾隨空白被忽略。
空白分隔的字段; 任何運(yùn)行的空白都可以用作字段分隔符(Perl的“ split(" ", $line)
” 規(guī)則)。
字段使用RFC 3986第2.1節(jié)(百分比編碼)中定義的修改的URI編碼,或者更確切地說(shuō),“查詢(xún)字符串編碼”(請(qǐng)參閱https://en.wikipedia.org/wiki/Query_string#URL_encoding),區(qū)別在于SP (“”)可以編碼為“+”(因此“+”必須也是百分比編碼的)。保留字符為:“%”(用于編碼),“+”(可用于編碼空格),Perl中定義的所有空白字符,包括SP,TAB和LF(用于分隔記錄中的字段)。
當(dāng)前識(shí)別的字段是:<存儲(chǔ)庫(kù)路徑>存儲(chǔ)庫(kù)GIT_DIR的路徑,相對(duì)于$projectroot
作為存儲(chǔ)庫(kù)所有者顯示的<存儲(chǔ)庫(kù)所有者>,最好是全名或電子郵件,或兩者兼而有之
您可以TXT
直接從gitweb 使用project_index操作(項(xiàng)目列表頁(yè)面上的鏈接)生成項(xiàng)目列表索引文件; 另請(qǐng)參閱下面的“使用gitweb生成項(xiàng)目列表”一節(jié)。
示例內(nèi)容:
foo.git Joe+R+Hacker+<joe@example.com>foo/bar.git O+W+Ner+<owner@example.org>
默認(rèn)情況下,這個(gè)文件只控制項(xiàng)目列表頁(yè)面上可見(jiàn)的項(xiàng)目(注意,沒(méi)有指向正確識(shí)別的Git存儲(chǔ)庫(kù)的項(xiàng)目將不會(huì)被gitweb顯示)。即使項(xiàng)目在項(xiàng)目列表頁(yè)面上不可見(jiàn),您仍然可以通過(guò)手工制作gitweb URL來(lái)查看它。通過(guò)將$strict_export
配置變量(參見(jiàn)gitweb.conf [5])設(shè)置為真值,您可以只允許查看也顯示在概覽頁(yè)面上的存儲(chǔ)庫(kù)(即只有項(xiàng)目列表文件中明確列出的項(xiàng)目才可訪(fǎng)問(wèn))。
我們假設(shè)GITWEB_CONFIG具有默認(rèn)的Makefile值,即gitweb_config.perl
。將以下內(nèi)容放入gitweb_make_index.perl
文件中:
read_config_file("gitweb_config.perl");$projects_list = $projectroot;
然后創(chuàng)建以下腳本以適合GITWEB_LIST構(gòu)建配置變量(或$projects_list
gitweb config中的變量)的格式獲取項(xiàng)目列表:
#!/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
運(yùn)行該腳本并將其輸出保存到文件中。這個(gè)文件然后可以用作項(xiàng)目列表文件,這意味著你可以設(shè)置$projects_list
它的文件名。
默認(rèn)情況下,所有Git倉(cāng)庫(kù)$projectroot
都是可見(jiàn)的,并可用于gitweb。然而,你可以配置gitweb控制對(duì)存儲(chǔ)庫(kù)的訪(fǎng)問(wèn)。
如“項(xiàng)目列表文件格式”部分所述,您可以通過(guò)在項(xiàng)目列表文件中選擇性地包含存儲(chǔ)庫(kù)并將gitweb配置變量設(shè)置為指向它來(lái)控制哪些項(xiàng)目可見(jiàn)$projects_list
。通過(guò)$strict_export
設(shè)置,項(xiàng)目列表文件也可用于控制哪些存儲(chǔ)庫(kù)可用。
您可以將gitweb配置為僅列出并允許通過(guò)$export_ok
gitweb配置文件中的變量查看顯式導(dǎo)出的存儲(chǔ)庫(kù); 請(qǐng)參閱gitweb.conf [5]手冊(cè)頁(yè)。如果它的計(jì)算結(jié)果為true,那么gitweb只有$export_ok
在它的對(duì)象數(shù)據(jù)庫(kù)中存在名為by的文件時(shí)才顯示存儲(chǔ)庫(kù)(如果目錄有指定的魔術(shù)文件$export_ok
)。例如默認(rèn)情況下git-daemon [1](除非使用--export-all
選項(xiàng))允許僅為那些具有git-daemon-export-ok
文件的存儲(chǔ)庫(kù)提取數(shù)據(jù)。添加我們的$ export_ok =“git-daemon-export-ok”;
使gitweb顯示,并只允許訪(fǎng)問(wèn)那些可以通過(guò)git://
協(xié)議獲取的存儲(chǔ)庫(kù)。
最后,可以指定一個(gè)任意perl子例程,這個(gè)子例程會(huì)被每個(gè)資源庫(kù)調(diào)用以確定它是否可以導(dǎo)出。子例程接收項(xiàng)目(存儲(chǔ)庫(kù))的絕對(duì)路徑作為其唯一參數(shù)(即“$ projectroot / $ project”)。例如,如果您使用mod_perl來(lái)運(yùn)行腳本,并為您的存儲(chǔ)庫(kù)配置了愚蠢的HTTP協(xié)議認(rèn)證,那么只有當(dāng)用戶(hù)有權(quán)讀取這些文件時(shí),才可以使用以下掛接:$ export_auth_hook = sub {use Apache2 :: SubRequest(); 使用Apache2 :: Const -compile => qw(HTTP_OK); my $ path =“$ _0 / HEAD”; 我的$ r = Apache2 :: RequestUtil->請(qǐng)求; my $ sub = $ r-> lookup_file($ path); 返回$子>文件名eq $路徑&& $子>狀態(tài)== Apache2 ::常量:: HTTP_OK; };
您可以通過(guò)在GIT_DIR
Git存儲(chǔ)庫(kù)中創(chuàng)建文件或通過(guò)設(shè)置一些repo配置變量(in GIT_DIR/config
,參見(jiàn)git-config [1])來(lái)配置gitweb中顯示的單個(gè)存儲(chǔ)庫(kù)。
您可以在存儲(chǔ)庫(kù)中使用以下文件:
README.html
<div>
塊元素中的gitweb項(xiàng)目“摘要”頁(yè)面中包含的html文件(HTML片段)。您可以使用它來(lái)獲取項(xiàng)目的更長(zhǎng)描述,提供鏈接(例如項(xiàng)目的主頁(yè))等。只有在XSS預(yù)防功能關(guān)閉的情況下才能識(shí)別這種情況($prevent_xss
錯(cuò)誤,請(qǐng)參閱gitweb.conf [5]); 在未來(lái)XSS預(yù)防開(kāi)啟時(shí)安全地包含自述文件的方法可能會(huì)被制定出來(lái)。
description (or gitweb.description
)
Short(簡(jiǎn)稱(chēng)為$projects_list_description_width
項(xiàng)目列表頁(yè)面,默認(rèn)為25個(gè)字符;請(qǐng)參閱gitweb.conf [5])(項(xiàng)目庫(kù)的項(xiàng)目)單行描述。純文本文件; HTML將被轉(zhuǎn)義。默認(rèn)設(shè)置為
Unnamed repository; edit this file to name it for gitweb.
在創(chuàng)建存儲(chǔ)庫(kù)期間通常安裝在模板中/usr/share/git-core/templates/
。您可以使用gitweb.description
repo配置變量,但該文件優(yōu)先。
category (or gitweb.category
)
項(xiàng)目的單線(xiàn)類(lèi)別,用于在$projects_list_group_categories
啟用時(shí)對(duì)項(xiàng)目進(jìn)行分組。默認(rèn)情況下(文件和配置變量不存在),未分類(lèi)的項(xiàng)目放在$project_list_default_category
類(lèi)別中。您可以使用gitweb.category
repo配置變量,但該文件優(yōu)先。
配置變量$projects_list_group_categories
和$project_list_default_category
描述在gitweb.conf [5]
cloneurl (or multiple-valued gitweb.url
)
帶有存儲(chǔ)庫(kù)URL的文件(用于克隆和提取),每行一個(gè)。顯示在項(xiàng)目摘要頁(yè)面中。您可以使用多值gitweb.url
存儲(chǔ)庫(kù)配置變量,但該文件優(yōu)先。
這是每個(gè)存儲(chǔ)庫(kù)增強(qiáng)/版本的基于全局前綴的@git_base_url_list
gitweb配置變量(請(qǐng)參閱gitweb.conf [5])。
gitweb.owner
您可以使用gitweb.owner
存儲(chǔ)庫(kù)配置變量來(lái)設(shè)置存儲(chǔ)庫(kù)的所有者。它顯示在項(xiàng)目列表和摘要頁(yè)面中。
如果未設(shè)置,則使用文件系統(tǒng)目錄的所有者(通過(guò)GECOS字段,即來(lái)自getpwuid(3)的實(shí)名字段),如果$projects_list
未設(shè)置(gitweb掃描$projectroot
存儲(chǔ)庫(kù)); 如果$projects_list
指向使用存儲(chǔ)庫(kù)列表的文件,則項(xiàng)目所有者將默認(rèn)為此文件對(duì)給定存儲(chǔ)庫(kù)的值。
various gitweb.*
config variables (in config)
閱讀%feature
哈希的詳細(xì)列表和描述。另請(qǐng)參閱gitweb.conf中的“配置gitweb功能”部分[5]
Gitweb可以使用基于URL的path_info(組件),或者它可以通過(guò)查詢(xún)參數(shù)傳遞所有必要的信息。典型的gitweb網(wǎng)址分為五個(gè)部分:
.../gitweb.cgi/<repo>/<action>/<revision>:/<path>?<arguments>
回購(gòu)
操作將在其上執(zhí)行的存儲(chǔ)庫(kù)。
除了列出所有可用項(xiàng)目的所有操作(無(wú)論采用何種形式),都需要此參數(shù)。
action
將要運(yùn)行的操作。默認(rèn)為projects_list
如果沒(méi)有設(shè)置回購(gòu),summary
否則。
調(diào)整
顯示修訂。默認(rèn)為HEAD。
path
執(zhí)行操作的<repository>中的路徑,用于需要它的操作。
arguments
任何控制動(dòng)作行為的參數(shù)。
某些操作需要或允許指定兩個(gè)修訂版本,有時(shí)甚至包含兩個(gè)路徑名。在大多數(shù)通用形式中,這樣的基于路徑信息(組件)的gitweb URL看起來(lái)像這樣:
.../gitweb.cgi/<repo>/<action>/<revision_from>:/<path_from>..<revision_to>:/<path_to>?<arguments>
每個(gè)動(dòng)作都以子例程的形式實(shí)現(xiàn),并且必須存在于%動(dòng)作哈希中。某些操作默認(rèn)情況下處于禁用狀態(tài),必須通過(guò)功能機(jī)制啟用。例如,要啟用blame
視圖,請(qǐng)將以下內(nèi)容添加到gitweb配置文件中:
$feature{'blame'}{'default'} = [1];
標(biāo)準(zhǔn)行動(dòng)是:
project_list
列出可用的Git存儲(chǔ)庫(kù)。如果在URL中未指定存儲(chǔ)庫(kù),則這是默認(rèn)命令。
summary
顯示關(guān)于給定存儲(chǔ)庫(kù)的摘要 如果在URL中沒(méi)有指定操作,則這是默認(rèn)命令,并且只指定存儲(chǔ)庫(kù)。
heads remotes
列出給定存儲(chǔ)庫(kù)中的所有本地或全部遠(yuǎn)程跟蹤分支。
后者默認(rèn)情況下不可用,除非已配置。
tags
列出給定存儲(chǔ)庫(kù)中的所有標(biāo)記(輕量級(jí)和注釋?zhuān)?/p>
blob tree
在給定的版本中顯示給定存儲(chǔ)庫(kù)路徑中的文件和目錄。如果在URL中沒(méi)有指定任何操作,并且給出路徑,則這是默認(rèn)命令。
blob_plain
在給定路徑和修訂版本中,返回給定存儲(chǔ)庫(kù)中文件的原始數(shù)據(jù)。此行為的鏈接已標(biāo)記raw
。
blobdiff
顯示同一文件的兩個(gè)修訂之間的差異。
blame blame_incremental
顯示文件的責(zé)任(也稱(chēng)為注釋?zhuān)┬畔?。在每行的基礎(chǔ)上,它顯示該行最后更改的版本以及提交更改的用戶(hù)。增量版本(如果啟用了JavaScript,則會(huì)自動(dòng)使用該版本)使用Ajax向指定文件的內(nèi)容逐漸添加責(zé)備信息。
出于性能原因,此操作默認(rèn)處于禁用狀態(tài)。
提交commitdiff
顯示有關(guān)存儲(chǔ)庫(kù)中特定提交的信息。該commit
視圖更詳細(xì)地顯示了有關(guān)提交的信息,該commitdiff
操作顯示了給定提交的變更集。
patch
以純文本郵件格式返回提交,適用于使用git-am [1]。
tag
顯示特定的注釋標(biāo)簽(標(biāo)簽對(duì)象)。
log shortlog
顯示給定分支的日志信息(提交消息或僅提交主題)(從給定修訂開(kāi)始)。
該shortlog
視圖是更緊湊; 它顯示每行一次提交。
history
從給定修訂(默認(rèn)為HEAD,即默認(rèn)分支)開(kāi)始,顯示給定存儲(chǔ)庫(kù)路徑中文件或目錄的歷史記錄。
這種觀點(diǎn)與shortlog
觀點(diǎn)相似。
rss atom
生成對(duì)存儲(chǔ)庫(kù)的更改的RSS(或Atom)訂閱源。
本節(jié)介紹如何配置一些常用的Web服務(wù)器來(lái)運(yùn)行g(shù)itweb。在所有情況下,/path/to/gitweb
在這些例子中是你運(yùn)行g(shù)itweb并且包含的目錄gitweb_config.perl
。
如果您已經(jīng)配置了一個(gè)未在此處列出的gitweb的Web服務(wù)器,請(qǐng)發(fā)送說(shuō)明,以便它們可以包含在未來(lái)版本中。
必須將Apache配置為在安裝gitweb的目錄中支持CGI腳本。我們假設(shè)它是/var/www/cgi-bin
目錄。
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"<Directory "/var/www/cgi-bin"> Options Indexes FollowSymlinks ExecCGI AllowOverride None Order allow,deny Allow from all</Directory>
使用該配置,瀏覽存儲(chǔ)庫(kù)的完整路徑是:
http://server/cgi-bin/gitweb.cgi
你可以在gitweb中使用mod_perl。您必須安裝Apache :: Registry(用于mod_perl 1.x)或ModPerl :: Registry(用于mod_perl 2.x)以啟用此支持。
假設(shè)安裝了gitweb /var/www/perl
,以下Apache配置(適用于mod_perl 2.x)是合適的。
Alias /perl "/var/www/perl"<Directory "/var/www/perl"> SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders Options Indexes FollowSymlinks +ExecCGI AllowOverride None Order allow,deny Allow from all</Directory>
使用該配置,瀏覽存儲(chǔ)庫(kù)的完整路徑是:
http://server/perl/gitweb.cgi
Gitweb與Apache和FastCGI協(xié)同工作。首先,您需要重命名,復(fù)制或?qū)itweb.cgi鏈接到gitweb.fcgi。假設(shè)gitweb安裝在/usr/share/gitweb
目錄中。以下Apache配置是合適的(未測(cè)試?。?/p>
FastCgiServer /usr/share/gitweb/gitweb.cgi ScriptAlias /gitweb /usr/share/gitweb/gitweb.cgi Alias /gitweb/static /usr/share/gitweb/static<Directory /usr/share/gitweb/static> SetHandler default-handler</Directory>
使用該配置,瀏覽存儲(chǔ)庫(kù)的完整路徑是:
http://server/gitweb
所有這些示例都使用請(qǐng)求重寫(xiě),并且需要mod_rewrite
(或等效;下面的示例是為Apache編寫(xiě)的)。
如果你想為gitweb和你的http://
倉(cāng)庫(kù)都有一個(gè)URL ,你可以像這樣配置Apache:
<VirtualHost *:80> 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]</VirtualHost>
上面的配置希望你的公共倉(cāng)庫(kù)可以作為可復(fù)制的Git URL和可瀏覽的gitweb界面一起存在/pub/git
并且將作為它們服務(wù)http://git.domain.org/dir-under-pub-git
。如果你啟動(dòng)你的git-daemon [1],--base-path=/pub/git --export-all
那么你甚至可以使用git://
完全相同路徑的URL。
設(shè)置環(huán)境變量GITWEB_CONFIG
會(huì)告訴gitweb使用指定的文件(即在本例中/etc/gitweb.conf
)作為gitweb的配置。在上面的例子中,你并不需要它。只有當(dāng)你的配置文件與內(nèi)置不同的地方(在編譯gitweb的時(shí)候)gitweb_config.perl
或者/etc/gitweb.conf
。有關(guān)詳細(xì)信息,請(qǐng)參閱gitweb.conf [5],特別是有關(guān)優(yōu)先級(jí)規(guī)則的信息。
如果您使用示例中的重寫(xiě)規(guī)則,則可能還需要在您的gitweb配置文件中使用/etc/gitweb.conf
以下內(nèi)容(以下示例):
@stylesheets = ("/some/absolute/path/gitweb.css");$my_uri = "/";$home_link = "/";$per_request_config = 1;
現(xiàn)在,盡管gitweb應(yīng)該在需要時(shí)創(chuàng)建HTML基本標(biāo)記(為相對(duì)鏈接設(shè)置基本URI),所以它應(yīng)該自動(dòng)工作。
如果您想要將gitweb用于多個(gè)項(xiàng)目根目錄,您可以按照以下方式編輯Apache虛擬主機(jī)和gitweb配置文件。
虛擬主機(jī)配置(在Apache配置文件中)應(yīng)該如下所示:
<VirtualHost *:80> 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/~<user>/ RewriteRule ^/\~([^\/]+)(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi \ [QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT] # http://git.example.org/+<user>/ #RewriteRule ^/\+([^\/]+)(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi \ [QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT] # http://git.example.org/user/<user>/ #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]</VirtualHost>
這里實(shí)際的項(xiàng)目根目錄通過(guò)GITWEB_PROJECT_ROOT
web服務(wù)器的環(huán)境變量傳遞給gitweb ,所以你需要把下面的代碼放到gitweb配置文件中(/etc/gitweb.conf
在上面的例子中):
$projectroot = $ENV{'GITWEB_PROJECTROOT'} || "/pub/git";
請(qǐng)注意,這需要為每個(gè)請(qǐng)求設(shè)置,因此要么$per_request_config
必須是false,要么上面的代碼必須放在引用的代碼中$per_request_config
;
這些配置有兩件事。首先,<user>
服務(wù)器的每個(gè)unix用戶(hù)()都能夠?yàn)g覽通過(guò)~/public_git/
以下URL 找到的gitweb Git存儲(chǔ)庫(kù):
http://git.example.org/~<user>/
如果您不想在服務(wù)器上使用此功能,只需刪除第二個(gè)重寫(xiě)規(guī)則即可。
如果您已經(jīng)mod_userdir
在您的虛擬主機(jī)中使用過(guò),或者您不想使用'?'作為第一個(gè)字符,則只需評(píng)論或刪除第二個(gè)重寫(xiě)規(guī)則,然后根據(jù)需要取消注釋以下內(nèi)容之一。
其次,在倉(cāng)庫(kù)中發(fā)現(xiàn)/pub/scm/
并/var/git/
會(huì)通過(guò)訪(fǎng)問(wèn)http://git.example.org/scm/
和http://git.example.org/var/
。您可以通過(guò)添加第三和第四個(gè)重寫(xiě)規(guī)則來(lái)添加任意數(shù)量的項(xiàng)目根目錄。
如果你通過(guò)放在gitweb中啟用PATH_INFO用法
$feature{'pathinfo'}{'default'} = [1];
在你的gitweb配置文件中,可以設(shè)置你的服務(wù)器,使它消耗并生成表單中的URL
http://git.example.com/project.git/shortlog/sometag
即沒(méi)有gitweb.cgi
部分,通過(guò)使用如下配置。此配置假定/var/www/gitweb
您的Web服務(wù)器的DocumentRoot包含gitweb.cgi腳本和補(bǔ)充靜態(tài)文件(stylesheet,favicon,JavaScript):
<VirtualHost *:80> ServerAlias git.example.com DocumentRoot /var/www/gitweb <Directory /var/www/gitweb> 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] </Directory></VirtualHost>
重寫(xiě)規(guī)則保證現(xiàn)有的靜態(tài)文件將被正確地提供,而任何其他URL將作為PATH_INFO參數(shù)傳遞給gitweb。
請(qǐng)注意,在這種情況下,你不需要特殊的設(shè)置@stylesheets
,$my_uri
和$home_link
,但你失去了“啞客戶(hù)端”訪(fǎng)問(wèn)項(xiàng)目的.git迪爾斯(在“同一網(wǎng)址的GitWeb和獲取”部分所述)。后者的一個(gè)可能的解決方法如下:在你的項(xiàng)目的根目錄中(例如/pub/git
)有沒(méi)有 .git擴(kuò)展名的項(xiàng)目(例如,/pub/git/project
而不是/pub/git/project.git
),并配置Apache如下:
<VirtualHost *:80> ServerAlias git.example.com DocumentRoot /var/www/gitweb AliasMatch ^(/.*?)(\.git)(/.*)?$ /pub/git$1$3 <Directory /var/www/gitweb> 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] </Directory></VirtualHost>
額外的AliasMatch使其成為可能
http://git.example.com/project.git
將原始訪(fǎng)問(wèn)該項(xiàng)目的Git目錄(以便項(xiàng)目可以克?。?,同時(shí)
http://git.example.com/project
將提供人性化的gitweb訪(fǎng)問(wèn)。
這個(gè)解決方案并不是100%的,因?yàn)槿绻硞€(gè)項(xiàng)目有一個(gè)名為ref(branch,tag)的開(kāi)頭git/
,那么路徑如
http://git.example.com/project/command/abranch..git/abranch
將失敗并出現(xiàn)404錯(cuò)誤。
請(qǐng)將任何錯(cuò)誤或功能請(qǐng)求報(bào)告給git@vger.kernel.org,將“gitweb”放在電子郵件主題中。