セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット取得
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
ガイド
- gitattributes
- コマンドラインインターフェースの慣習
- 日常的なGit
- よくある質問 (FAQ)
- 用語集
- フック
- gitignore
- gitmodules
- リビジョン
- サブモジュール
- チュートリアル
- ワークフロー
- すべてのガイド...
管理
プラミングコマンド
- 2.47.1 → 2.49.0 変更なし
-
2.47.0
2024-10-06
- 2.44.1 → 2.46.3 変更なし
-
2.44.0
2024-02-23
- 2.43.2 → 2.43.6 変更なし
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.42.1 → 2.42.4 変更なし
-
2.42.0
2023-08-21
- 2.34.1 → 2.41.3 変更なし
-
2.34.0
2021-11-15
- 2.22.2 → 2.33.8 変更なし
-
2.22.1
2019-08-11
-
2.22.0
2019-06-07
- 2.14.6 → 2.21.4 変更なし
-
2.13.7
2018-05-22
- 2.10.5 → 2.12.5 変更なし
-
2.9.5
2017-07-30
- 2.1.4 → 2.8.6 変更なし
-
2.0.5
2014-12-17
概要
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を含むすべての空白文字(レコード内のフィールドを区切るために使用)です。
-
現在認識されているフィールドは以下の通りです
プロジェクトリストのインデックスファイルは、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_category
は gitweb.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>
一部のアクションでは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」と記入してください。
GIT
git[1] スイートの一部