セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
- 2.50.1 変更なし
- 
        2.50.0
          
            
                                     2025-06-16 2025-06-16
- 2.47.1 → 2.49.1 変更なし
- 
        2.47.0
          
            
                             2024-10-06 2024-10-06
- 2.44.1 → 2.46.4 変更なし
- 
        2.44.0
          
            
                             2024-02-23 2024-02-23
- 2.43.2 → 2.43.7 変更なし
- 
        2.43.1
          
            
                             2024-02-09 2024-02-09
- 
        2.43.0
          
            
                                 2023-11-20 2023-11-20
- 2.42.1 → 2.42.4 変更なし
- 
        2.42.0
          
            
                             2023-08-21 2023-08-21
- 2.34.1 → 2.41.3 変更なし
- 
        2.34.0
          
            
                             2021-11-15 2021-11-15
- 2.22.2 → 2.33.8 変更なし
- 
        2.22.1
          
            
                             2019-08-11 2019-08-11
- 
        2.22.0
          
            
                                 2019-06-07 2019-06-07
- 2.14.6 → 2.21.4 変更なし
- 
        2.13.7
          
            
                             2018-05-22 2018-05-22
- 2.10.5 → 2.12.5 変更なし
- 
        2.9.5
          
            
                             2017-07-30 2017-07-30
- 2.1.4 → 2.8.6 変更なし
- 
        2.0.5
          
            
                                     2014-12-17 2014-12-17
概要
gitweb を使い始めるには、Git リポジトリから git-instaweb[1] を実行します。これにより、ウェブサーバーが設定されて起動し、gitweb を指すウェブブラウザが起動します。
説明
Gitweb は Git リポジトリへのウェブインターフェースを提供します。その機能は次のとおりです。
- 
共通のルートを持つ複数の Git リポジトリを表示する。 
- 
リポジトリのすべてのリビジョンを閲覧する。 
- 
任意のリビジョンでリポジトリ内のファイルの内容を表示する。 
- 
ブランチのリビジョンログ、ファイルとディレクトリの履歴を表示し、いつ、誰が、何を変更したかを確認する。 
- 
任意のファイルの blame/annotation 詳細を表示する (有効になっている場合)。 
- 
任意のブランチのコミットの 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_PROJECTROOT ビルド設定変数を使用して、gitweb をビルドする際に変更できます。
デフォルトでは、$projectroot の下のすべての Git リポジトリが gitweb に表示され、利用可能です。プロジェクトのリストは、デフォルトで $projectroot ディレクトリを Git リポジトリ (より正確にはオブジェクトデータベース) についてスキャンすることによって生成されます。gitweb は作業領域には関心がなく、「ベア」リポジトリの表示に最適です。
gitweb でのリポジトリ名は、$projectroot に対するその $GIT_DIR (そのオブジェクトデータベース) へのパスです。したがって、リポジトリ $repo は "$projectroot/$repo" に見つかります。
プロジェクトリストファイルの形式
gitweb に $projectroot からファイルシステムをスキャンしてリポジトリを見つけさせる代わりに、$projects_list をプロジェクトのリスト (いくつかの追加情報を含む) を含むプレーンテキストファイルを指すように設定することで、事前に生成された表示可能なプロジェクトのリストを提供できます。
このファイルは次の形式を使用します
- 
1行に1つのレコード (プロジェクト/リポジトリ用)。行継続 (改行エスケープ) はサポートされていません。 
- 
先頭と末尾の空白は無視されます。 
- 
空白で区切られたフィールド。任意の連続した空白をフィールドセパレータとして使用できます (Perl の " split("",$line)" のルール)。
- 
フィールドは、RFC 3986、セクション 2.1 (パーセントエンコーディング) で定義されている、またはむしろ「クエリ文字列エンコーディング」 (https://en.wikipedia.org/wiki/Query_string#URL_encoding を参照) に修正された URI エンコーディングを使用します。違いは、SP (" ") を "+" としてエンコードできることです (したがって、"+" もパーセントエンコードする必要があります)。 予約文字は: "%" (エンコーディングに使用)、"+" (SPACE のエンコードに使用可能)、SP、TAB、LF を含む Perl で定義されているすべての空白文字 (レコード内のフィールドの区切りに使用)。 
- 
現在認識されているフィールドは次のとおりです 
プロジェクトリストインデックスファイルは、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_listgitweb 設定変数をそれに指すように設定することで、表示される プロジェクトを制御できます。$strict_exportが設定されている場合、プロジェクトリストファイルは、利用可能な リポジトリも制御するために使用できます。
- 
gitweb 設定ファイルの $export_ok変数を使用して、明示的にエクスポートされたリポジトリのみを一覧表示し、表示できるように gitweb を設定できます。gitweb.conf[5] のマニュアルページを参照してください。$export_okで指定されたファイルがオブジェクトデータベースに存在する場合 (ディレクトリに$export_okという名前のマジックファイルがある場合)、gitweb はリポジトリを表示します。例えば、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 設定
Git リポジトリの GIT_DIR にファイルを作成するか、リポジトリ設定変数 (GIT_DIR/config、git-config[1] を参照) を設定することで、gitweb に表示される個々のリポジトリを設定できます。
リポジトリでは以下のファイルを使用できます。
- README.html
- 
gitweb プロジェクトの「概要」ページの <div> ブロック要素内に含まれる HTML ファイル (HTML フラグメント)。プロジェクトのより長い説明、リンク (たとえばプロジェクトのホームページへのリンク) の提供などに使用できます。これは XSS 防止がオフの場合にのみ認識されます ( $prevent_xssが false の場合、gitweb.conf[5] を参照)。XSS 防止がオンの場合に README を安全に含める方法は、将来検討される可能性があります。
- description (または gitweb.description)
- 
プロジェクト (リポジトリ) の短い (プロジェクトリストページでは $projects_list_description_widthに短縮され、デフォルトでは25文字です。gitweb.conf[5] を参照) 1行の説明。プレーンテキストファイル。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_listgitweb 設定変数 (詳細は gitweb.conf[5] を参照) のリポジトリごとの拡張/バージョンです。
- gitweb.owner
- 
gitweb.ownerリポジトリ設定変数を使用して、リポジトリの所有者を設定できます。これはプロジェクトリストと概要ページに表示されます。設定されていない場合、 $projects_listが設定されていない場合 (gitweb が$projectrootをスキャンしてリポジトリを探す場合) は、ファイルシステムディレクトリの所有者 (GECOS フィールド、つまり getpwuid(3) の実名フィールドを介して) が使用されます。$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 (annotation とも呼ばれる) 情報を表示します。行ごとに、その行が最後に変更されたリビジョンと、変更をコミットしたユーザーが表示されます。インクリメンタルバージョン (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
Apache は、gitweb がインストールされているディレクトリで 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
ModPerl::Registry を介した mod_perl を使用する Apache
mod_perl を gitweb で使用できます。このサポートを有効にするには、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 の下にあることを想定しており、クローン可能な Git URL および閲覧可能な gitweb インターフェースとして、http://git.domain.org/dir-under-pub-git として提供されます。次に、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 ベースタグを作成するはずなので (相対リンクのベース 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 設定ファイルに
$feature{'pathinfo'}{'default'} = [1];
と記述して gitweb で PATH_INFO の使用を有効にすると、サーバーを次のような形式の 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 に特別な設定は必要ありませんが、プロジェクトの .git ディレクトリへの「ダムクライアント」アクセス (「gitweb とフェッチ用の単一 URL」セクションで説明) を失います。後者の考えられる回避策は次のとおりです。プロジェクトのルートディレクトリ (例: /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 エラーで失敗します。
バグ
バグや機能のリクエストは、メールの件名に「gitweb」と記載して git@vger.kernel.org まで報告してください。
GIT
git[1]スイートの一部

