日本語 ▾ トピック ▾ 最新バージョン ▾ gitweb は 2.47.0 で最終更新されました

名前

gitweb - Git ウェブインターフェース (Git リポジトリのウェブフロントエンド)

概要

gitweb を使い始めるには、Git リポジトリから git-instaweb[1] を実行してください。これにより、ウェブサーバーが設定および起動され、gitweb を指すウェブブラウザが起動します。

説明

Gitweb は Git リポジトリへのウェブインターフェースを提供します。その機能には以下が含まれます。

  • 共通のルートを持つ複数のGitリポジトリの表示。

  • リポジトリのすべてのリビジョンの閲覧。

  • 任意のリビジョンにおけるリポジトリ内のファイルの内容表示。

  • ブランチのリビジョンログ、ファイルやディレクトリの履歴を表示し、何が、いつ、誰によって変更されたかを確認する。

  • 任意のファイルの blame/アノテーションの詳細表示 (有効な場合)。

  • 任意のブランチのコミットのRSSおよびAtomフィードを生成。これらのフィードは最新のウェブブラウザで自動検出可能。

  • リビジョンで変更されたすべてを表示し、リビジョンを一度に1つずつステップ実行して、リポジトリの履歴を表示する。

  • 指定された検索語句に一致するコミットメッセージを持つコミットを検索。

gitweb のソースコードは、gitweb 自身を使って閲覧できる https://repo.or.cz/w/git.git/tree/HEAD:/gitweb/ を参照してください。

設定

gitweb のさまざまな挙動は、設定ファイル gitweb_config.perl または /etc/gitweb.conf を通じて制御できます。詳細については gitweb.conf[5] を参照してください。

リポジトリ

Gitweb は1つまたは複数のGitリポジトリからの情報を表示できます。これらのリポジトリはすべてローカルファイルシステム上に存在し、共通のリポジトリルートを共有している必要があります。つまり、すべてが単一の親リポジトリの下にある必要があります(ただし、「高度なウェブサーバー設定」セクション、「複数のプロジェクトルートを持つウェブサーバー設定」サブセクションも参照してください)。

our $projectroot = '/path/to/parent/directory';

$projectroot のデフォルト値は /pub/git です。これは、gitweb のビルド時に GITWEB_PROJECTROOT ビルド設定変数を通じて変更できます。

デフォルトでは、$projectroot 配下のすべてのGitリポジトリはgitwebに表示され、利用可能です。プロジェクトのリストは、デフォルトで$projectroot ディレクトリをスキャンしてGitリポジトリ(より正確にはオブジェクトデータベース)を検出することにより生成されます。gitwebは作業領域には関心がなく、「bare」リポジトリの表示に最も適しています。

gitwebにおけるリポジトリの名前は、$projectrootに対するその$GIT_DIR(そのオブジェクトデータベース)への相対パスです。したがって、リポジトリ$repoは「$projectroot/$repo」で見つけることができます。

プロジェクトリストファイルの形式

$projectroot からファイルシステムをスキャンして gitweb がリポジトリを見つける代わりに、$projects_list をプロジェクトのリスト(追加情報を含む)を含むプレーンテキストファイルを指すように設定することで、事前に生成された表示可能なプロジェクトのリストを提供できます。

このファイルは以下の形式を使用します

  • 1行につき1レコード(プロジェクト/リポジトリ用)。行継続(改行エスケープ)はサポートされません。

  • 先頭と末尾の空白は無視されます。

  • 空白で区切られたフィールド。任意の連続した空白はフィールド区切り文字として使用できます(Perlの「split(" ", $line)」のルール)。

  • フィールドは、RFC 3986、セクション2.1 (パーセントエンコーディング) で定義されている修正URIエンコーディング、またはむしろ「クエリ文字列エンコーディング」(https://en.wikipedia.org/wiki/Query_string#URL_encoding を参照)を使用します。違いは、SP (" ") が "+" としてエンコードできること(したがって "+" もパーセントエンコードする必要があること)です。

    予約文字は:「%」(エンコードに使用)、「+」(スペースのエンコードに使用可能)、Perlで定義されているSP、TAB、LFを含むすべての空白文字(レコード内のフィールドを区切るために使用)です。

  • 現在認識されているフィールドは以下の通りです

    <リポジトリパス>

    リポジトリのGIT_DIRへのパス、$projectrootからの相対パス

    <リポジトリ所有者>

    リポジトリの所有者として表示されます。できればフルネーム、またはメールアドレス、あるいはその両方

プロジェクトリストのインデックスファイルは、gitweb から直接 project_index アクション(プロジェクトリストページのTXTリンク)を使用して生成できます。下の「gitweb を使用してプロジェクトリストを生成する」セクションも参照してください。

内容例

foo.git       Joe+R+Hacker+<joe@example.com>
foo/bar.git   O+W+Ner+<owner@example.org>

デフォルトでは、このファイルはプロジェクトリストページでどのプロジェクトが表示されるかのみを制御します(正しく認識されたGitリポジトリを指さないエントリはgitwebによって表示されないことに注意してください)。プロジェクトがプロジェクトリストページに表示されない場合でも、gitweb URLを手動で作成することで表示できます。$strict_export設定変数(gitweb.conf[5]参照)をtrueに設定することにより、概要ページに表示されているリポジトリのみの表示を許可できます(つまり、プロジェクトリストファイルに明示的にリストされているプロジェクトのみがアクセス可能になります)。

gitweb を使用してプロジェクトリストを生成する

GITWEB_CONFIG がデフォルトのMakefile値、すなわち gitweb_config.perl であると仮定します。以下の内容を gitweb_make_index.perl ファイルに記述してください

read_config_file("gitweb_config.perl");
$projects_list = $projectroot;

次に、GITWEB_LIST ビルド設定変数(または gitweb 設定の $projects_list 変数)に適した形式でプロジェクトのリストを取得するための次のスクリプトを作成します

#!/bin/sh

export 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

このスクリプトを実行し、その出力をファイルに保存します。このファイルはプロジェクトリストファイルとして使用でき、つまり$projects_list をそのファイル名に設定できるということです。

Gitリポジリへのアクセス制御

デフォルトでは、$projectroot 配下のすべてのGitリポジトリはgitwebに表示され、利用可能です。ただし、gitwebがリポジトリへのアクセスをどのように制御するかを設定できます。

  • 「プロジェクトリストファイルの形式」セクションで説明されているように、プロジェクトリストファイルにリポジトリを選択的に含め、$projects_list gitweb設定変数をそれを指すように設定することで、どのプロジェクトが表示されるかを制御できます。$strict_export が設定されている場合、プロジェクトリストファイルは、どのリポジトリが利用可能かも制御するために使用できます。

  • gitweb は、gitweb 設定ファイル内の $export_ok 変数を使用して、明示的にエクスポートされたリポジトリのみをリストし、表示を許可するように設定できます。gitweb.conf[5] のマニュアルページを参照してください。$export_ok が true と評価される場合、gitweb は、そのオブジェクトデータベース内に $export_ok という名前のファイルが存在する場合にのみリポジトリを表示します(ディレクトリに $export_ok というマジックファイルがある場合)。

    例えば、git-daemon[1] はデフォルトで(--export-all オプションが使用されない限り)、git-daemon-export-ok ファイルを持つリポジトリのみをプルすることを許可します。以下を追加すると、

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

    gitweb が git:// プロトコル経由でフェッチ可能なリポジトリのみを表示し、アクセスを許可するようにします。

  • 最後に、各リポジトリがエクスポート可能であるかを判断するために呼び出される任意のPerlサブルーチンを指定することができます。このサブルーチンは、プロジェクト(リポジトリ)への絶対パスを唯一のパラメータとして受け取ります(つまり「$projectroot/$project」)。

    例えば、mod_perl を使用してスクリプトを実行し、リポジトリに簡易 HTTP プロトコル認証が設定されている場合、以下のフックを使用して、ユーザーがファイルを読み取る権限を持っている場合にのみアクセスを許可できます

    $export_auth_hook = sub {
    	use Apache2::SubRequest ();
    	use Apache2::Const -compile => qw(HTTP_OK);
    	my $path = "$_[0]/HEAD";
    	my $r    = Apache2::RequestUtil->request;
    	my $sub  = $r->lookup_file($path);
    	return $sub->filename eq $path
    	    && $sub->status == Apache2::Const::HTTP_OK;
    };

リポジトリごとの gitweb 設定

gitwebに表示される個々のリポジトリは、GitリポジトリのGIT_DIR内にファイルを作成するか、または(GIT_DIR/configで)リポジトリ設定変数を設定することによって構成できます(git-config[1]を参照)。

リポジトリでは以下のファイルを使用できます

README.html

gitwebプロジェクトの「summary」ページにある<div>ブロック要素内に含まれるHTMLファイル(HTMLフラグメント)。プロジェクトのより長い説明、リンクの提供(例えばプロジェクトのホームページへのリンク)などに使用できます。これはXSS防止が無効の場合($prevent_xss が false の場合。gitweb.conf[5] を参照)にのみ認識されます。XSS防止が有効な場合にREADMEを安全に含める方法は、将来的に検討される可能性があります。

description (または gitweb.description)

プロジェクト(リポジトリ)の短い(プロジェクトリストページでは$projects_list_description_widthまで短縮され、デフォルトでは25文字です。gitweb.conf[5]を参照)一行説明。プレーンテキストファイルです。HTMLはエスケープされます。デフォルトでは、次のように設定されます。

Unnamed repository; edit this file to name it for gitweb.

リポジトリ作成時のテンプレートから設定され、通常は /usr/share/git-core/templates/ にインストールされます。gitweb.description リポジトリ設定変数を使用することもできますが、ファイルが優先されます。

category (または gitweb.category)

プロジェクトの単一行カテゴリ。$projects_list_group_categories が有効な場合、プロジェクトをグループ化するために使用されます。デフォルトでは(ファイルと設定変数が存在しない場合)、カテゴリなしのプロジェクトは$project_list_default_category カテゴリに配置されます。gitweb.category リポジトリ設定変数を使用することもできますが、ファイルが優先されます。

設定変数 $projects_list_group_categories および $project_list_default_categorygitweb.conf[5] で説明されています。

cloneurl (または複数値 gitweb.url)

リポジトリURL(クローンおよびフェッチに使用)を含むファイル。1行に1つ。プロジェクトサマリーページに表示されます。複数値のgitweb.urlリポジトリ設定変数を使用することもできますが、ファイルが優先されます。

これは、グローバルなプレフィックスベースの@git_base_url_list gitweb 設定変数(gitweb.conf[5] を参照)のリポジトリごとの拡張/バージョンです。

gitweb.owner

gitweb.owner リポジトリ設定変数を使用して、リポジトリの所有者を設定できます。これはプロジェクトリストおよび概要ページに表示されます。

設定されていない場合、$projects_list が未設定であれば、ファイルシステムディレクトリの所有者が使用されます(GECOSフィールド、つまりgetpwuid(3)からの実名フィールド経由。gitwebは$projectrootをスキャンしてリポジトリを探します)。もし$projects_listがリポジトリのリストを含むファイルを指している場合、プロジェクトの所有者はそのファイルからの特定のリポジトリの値にデフォルトで設定されます。

様々な gitweb.* 設定変数 (config内)

詳細なリストと説明については、%feature ハッシュの説明を読んでください。gitweb.conf[5] の「gitweb 機能の設定」セクションも参照してください。

アクションとURL

Gitweb は path_info (コンポーネント) ベースの URL を使用することも、必要なすべての情報をクエリパラメータ経由で渡すこともできます。典型的な gitweb URL は5つのコンポーネントに分解されます

.../gitweb.cgi/<repo>/<action>/<revision>:/<path>?<arguments>
repo

アクションが実行されるリポジトリ。

利用可能なすべてのプロジェクトをリストするアクションを除き、どのような形式であれ、すべての​​アクションでこのパラメータが必要です。

action

実行されるアクション。repo が設定されていない場合は projects_list がデフォルトとなり、それ以外の場合は summary がデフォルトとなります。

revision

表示されるリビジョン。デフォルトはHEADです。

path

アクションが実行される <repository> 内のパス。それを必要とするアクションの場合。

arguments

アクションの動作を制御する任意の引数。

一部のアクションでは2つのリビジョン、場合によっては2つのパス名を指定する必要があります。最も一般的な形式では、path_info(コンポーネント)ベースのgitweb URLは次のようになります。

.../gitweb.cgi/<repo>/<action>/<revision-from>:/<path-from>..<revision-to>:/<path-to>?<arguments>

各アクションはサブルーチンとして実装されており、%actions ハッシュ内に存在する必要があります。一部のアクションはデフォルトで無効になっており、機能メカニズムを通じて有効にする必要があります。例えば、blame ビューを有効にするには、gitweb 設定ファイルに以下を追加します

$feature{'blame'}{'default'} = [1];

アクション

標準アクションは以下の通りです

project_list

利用可能なGitリポジトリをリスト表示します。URLにリポジトリが指定されていない場合、これがデフォルトコマンドです。

summary

指定されたリポジトリの概要を表示します。URLにアクションが指定されず、リポジトリのみが指定されている場合、これがデフォルトコマンドです。

heads
remotes

指定されたリポジトリ内のすべてのローカルブランチまたはすべてのリモート追跡ブランチをリスト表示します。

後者は、設定されていない限りデフォルトでは利用できません。

tags

指定されたリポジトリ内のすべてのタグ(軽量タグとアノテーションタグ)をリスト表示します。

blob
tree

指定されたリポジトリパスにあるファイルとディレクトリを、指定されたリビジョンで表示します。URLにアクションが指定されず、パスが指定されている場合、これがデフォルトコマンドです。

blob_plain

指定されたリポジトリ内のファイルについて、指定されたパスとリビジョンでの生データを返します。このアクションへのリンクはrawと表示されます。

blobdiff

同じファイルの2つのリビジョン間の差分を表示します。

blame
blame_incremental

ファイルの blame(アノテーションとも呼ばれます)情報を表示します。行ごとに、その行が最後に変更されたリビジョンと、変更をコミットしたユーザーが表示されます。インクリメンタルバージョン(設定されていればJavaScriptが有効な場合に自動的に使用されます)は、Ajaxを使用して、与えられたファイルの内容に blame 情報を段階的に追加します。

このアクションはパフォーマンス上の理由からデフォルトで無効になっています。

commit
commitdiff

リポジトリ内の特定のコミットに関する情報を表示します。commitビューはコミットに関する情報をより詳細に表示し、commitdiffアクションは指定されたコミットの変更セットを表示します。

patch

コミットをプレーンテキストメール形式で返します。git-am[1] で適用するのに適しています。

tag

特定のアノテーション付きタグ(タグオブジェクト)を表示します。

log
shortlog

指定されたブランチのログ情報(コミットメッセージまたはコミットの件名のみ)を表示します(指定されたリビジョンから開始)。

shortlogビューはよりコンパクトで、1行に1つのコミットを表示します。

history

指定されたリポジトリパスにあるファイルまたはディレクトリの履歴を、指定されたリビジョンから表示します(デフォルトはHEAD、つまりデフォルトブランチ)。

このビューはshortlogビューと似ています。

rss
atom

リポジトリへの変更のRSS(またはAtom)フィードを生成します。

ウェブサーバー設定

このセクションでは、一般的なウェブサーバーでgitwebを実行するための設定方法について説明します。すべての例で、/path/to/gitwebはgitwebをインストールしたディレクトリであり、gitweb_config.perlが含まれています。

ここに記載されていないウェブサーバーでgitwebを設定した場合は、将来のリリースに含めることができるよう、その手順を送ってください。

CGIとしてのApache

gitweb がインストールされているディレクトリで、Apache が CGI スクリプトをサポートするように設定されている必要があります。それが /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>

この設定では、リポジトリを閲覧するためのフルパスは次のようになります

http://server/cgi-bin/gitweb.cgi

mod_perlを使用したApache (ModPerl::Registry経由)

gitweb で mod_perl を使用できます。このサポートを有効にするには、Apache::Registry (mod_perl 1.x 用) または ModPerl::Registry (mod_perl 2.x 用) をインストールする必要があります。

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>

この設定では、リポジトリを閲覧するためのフルパスは次のようになります

http://server/perl/gitweb.cgi

FastCGIを使用したApache

GitwebはApacheとFastCGIで動作します。まず、gitweb.cgiをgitweb.fcgiに名前変更、コピー、またはシンボリックリンクする必要があります。gitwebが/usr/share/gitwebディレクトリにインストールされていると仮定しましょう。以下のApache設定が適切です(未検証!)

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>

この設定では、リポジトリを閲覧するためのフルパスは次のようになります

http://server/gitweb

高度なウェブサーバー設定

これらの例はすべてリクエストのリライトを使用しており、mod_rewrite(または同等のもの。以下の例はApache用に書かれています)が必要です。

gitwebとフェッチのための単一URL

gitweb と http:// リポジトリの両方で1つの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>

上記の設定では、公開リポジトリが /pub/git 以下に存在することを想定しており、それらを http://git.domain.org/dir-under-pub-git として、クローン可能な Git URL と閲覧可能な gitweb インターフェースの両方で提供します。もし git-daemon[1]--base-path=/pub/git --export-all で起動すれば、全く同じパスで git:// URL を使用することも可能です。

環境変数 GITWEB_CONFIG を設定すると、gitweb は指定されたファイル(この例では /etc/gitweb.conf)をgitwebの設定として使用するようになります。上記の例では実際には必要ありません。組込み(gitwebのコンパイル時)の gitweb_config.perl/etc/gitweb.conf とは異なる場所に設定ファイルがある場合にのみ必要です。詳細、特に優先順位のルールについては gitweb.conf[5] を参照してください。

もし例のリライトルールを使用する場合、gitweb 設定ファイル(以下の例では /etc/gitweb.conf)に以下のようなものも必要になるかもしれません

@stylesheets = ("/some/absolute/path/gitweb.css");
$my_uri    = "/";
$home_link = "/";
$per_request_config = 1;

しかし、現在では gitweb は必要な場合に HTML の base タグを生成するはずなので(相対リンクのベースURIを設定するため)、自動的に機能するはずです。

複数のプロジェクトルートを持つウェブサーバー設定

複数のプロジェクトルートを持つgitwebを使用したい場合、Apacheの仮想ホストとgitwebの設定ファイルを次のように編集できます。

仮想ホスト設定(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  [QSA,L,PT]

    # look for a public_git directory 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>

ここでは、実際のプロジェクトルートがウェブサーバーからGITWEB_PROJECT_ROOT環境変数経由でgitwebに渡されるため、gitweb設定ファイル(上記の例では/etc/gitweb.conf)に以下の行を記述する必要があります。

$projectroot = $ENV{'GITWEB_PROJECTROOT'} || "/pub/git";

注意:これはリクエストごとに設定される必要があるため、$per_request_config が false であるか、上記のコードが $per_request_config によって参照されるコード内に置かれている必要があります。

これらの設定により2つのことが可能になります。まず、サーバーの各Unixユーザー(<user>)は、次のURLで~/public_git/にあるgitweb Gitリポジトリを閲覧できるようになります。

http://git.example.org/~<user>/

この機能をサーバーで利用したくない場合は、2番目のリライトルールを削除してください。

仮想ホストで既にmod_userdirを使用している場合、または最初の文字として'~'を使用しない場合は、2番目のリライトルールをコメントアウトまたは削除し、希望に応じて以下のいずれかのコメントを解除してください。

次に、/pub/scm//var/git/にあるリポジトリは、http://git.example.org/scm/http://git.example.org/var/を通じてアクセス可能になります。3番目と4番目のようなリライトルールを追加することで、必要なだけプロジェクトルートを追加できます。

PATH_INFO の使用

gitwebでPATH_INFOの使用を有効にするには、以下を記述してください

$feature{'pathinfo'}{'default'} = [1];

gitweb 設定ファイルに記述すると、サーバーが次のような形式のURLを使用および生成するように設定することが可能です。

http://git.example.com/project.git/shortlog/sometag

つまり、gitweb.cgi の部分なしで、以下のような設定を使用することで可能です。この設定は、/var/www/gitweb がウェブサーバーの DocumentRoot であり、gitweb.cgi スクリプトと補完的な静的ファイル(スタイルシート、ファビコン、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>

リライトルールは、既存の静的ファイルが適切に提供されることを保証し、それ以外のURLはPATH_INFOパラメータとしてgitwebに渡されます。

注意: この場合、@stylesheets$my_uri$home_link に特別な設定は不要ですが、「gitwebとフェッチのための単一URL」セクションで説明されている、プロジェクトの.gitディレクトリへの「ダムクライアント」アクセスは失われます。後者に対する可能な回避策は以下の通りです。プロジェクトのルートディレクトリ(例: /pub/git)にプロジェクトを.git拡張子なしで命名し(例: /pub/git/project.git の代わりに /pub/git/project)、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

はプロジェクトのGitディレクトリへの生アクセスを提供し(プロジェクトがクローン可能になる)、一方

http://git.example.com/project

は人間が使いやすいgitwebアクセスを提供します。

この解決策は100%完璧ではありません。つまり、あるプロジェクトがgit/で始まる名前付き参照(ブランチ、タグ)を持っている場合、次のようなパスは

http://git.example.com/project/command/abranch..git/abranch

404エラーで失敗します。

バグ

バグや機能のリクエストは git@vger.kernel.org まで報告してください。メールの件名に「gitweb」と記入してください。

関連項目

gitweb/README, gitweb/INSTALL

GIT

git[1] スイートの一部

scroll-to-top