GIT web Interface (gitweb) Installation
=======================================

First you have to generate gitweb.cgi from gitweb.perl using
"make gitweb/gitweb.cgi", then copy appropriate files (gitweb.cgi,
gitweb.css, git-logo.png and git-favicon.png) to their destination.
For example if git was (or is) installed with /usr prefix, you can do

	$ make prefix=/usr gitweb/gitweb.cgi  ;# as yourself
	# cp gitweb/git* /var/www/cgi-bin/    ;# as root

Alternatively you can use autoconf generated ./configure script to
set up path to git binaries (via config.mak.autogen), so you can write
instead

	$ make configure                     ;# as yourself
	$ ./configure --prefix=/usr          ;# as yourself
	$ make gitweb/gitweb.cgi             ;# as yourself
	# cp gitweb/git* /var/www/cgi-bin/   ;# as root

The above example assumes that your web server is configured to run
[executable] files in /var/www/cgi-bin/ as server scripts (as CGI
scripts).


Build time configuration
------------------------

See also "How to configure gitweb for your local system" in README
file for gitweb (in gitweb/README).

- There are many configuration variables which affects building of
  gitweb.cgi; see "default configuration for gitweb" section in main
  (top dir) Makefile, and instructions for building gitweb/gitweb.cgi
  target.

  One of most important is where to find git wrapper binary. Gitweb
  tries to find git wrapper at $(bindir)/git, so you have to set $bindir
  when building gitweb.cgi, or $prefix from which $bindir is derived. If
  you build and install gitweb together with the rest of git suite,
  there should be no problems. Otherwise, if git was for example
  installed from a binary package, you have to set $prefix (or $bindir)
  accordingly.

- Another important issue is where are git repositories you want to make
  available to gitweb. By default gitweb search for repositories under
  /pub/git; if you want to have projects somewhere else, like /home/git,
  use GITWEB_PROJECTROOT build configuration variable.

  By default all git repositories under projectroot are visible and
  available to gitweb. List of projects is generated by default by
  scanning the projectroot directory for git repositories. This can be
  changed (configured) as described in "Gitweb repositories" section
  below.

  Note that gitweb deals directly with object database, and does not
  need working directory; the name of the project is the name of its
  repository object database, usually projectname.git for bare
  repositories. If you want to provide gitweb access to non-bare (live)
  repository, you can make projectname.git symbolic link under
  projectroot linking to projectname/.git (but it is just
  a suggestion).

- You can control where gitweb tries to find its main CSS style file,
  its favicon and logo with GITWEB_CSS, GITWEB_FAVICON and GITWEB_LOGO
  build configuration variables. By default gitweb tries to find them
  in the same directory as gitweb.cgi script.

Build example
~~~~~~~~~~~~~

- To install gitweb to /var/www/cgi-bin/gitweb/ when git wrapper
  is installed at /usr/local/bin/git and the repositories (projects)
  we want to display are under /home/local/scm, you can do

	make GITWEB_PROJECTROOT="/home/local/scm" \
	     GITWEB_CSS="/gitweb/gitweb.css" \
	     GITWEB_LOGO="/gitweb/git-logo.png" \
	     GITWEB_FAVICON="/gitweb/git-favicon.png" \
	     bindir=/usr/local/bin \
	     gitweb/gitweb.cgi

	cp -fv ~/git/gitweb/gitweb.{cgi,css} \
	       ~/git/gitweb/git-{favicon,logo}.png \
	     /var/www/cgi-bin/gitweb/


Gitweb config file
------------------

See also "Runtime gitweb configuration" section in README file
for gitweb (in gitweb/README).

- You can configure gitweb further using gitweb configuration file;
  by default it is file named gitweb_config.perl in the same place as
  gitweb.cgi script. You can control default place for config file
  using GITWEB_CONFIG build configuration variable, and you can set it
  using GITWEB_CONFIG environmental variable.

- Gitweb config file is [fragment] of perl code. You can set variables
  using "our $variable = value"; text from "#" character until the end
  of a line is ignored. See perlsyn(1) for details.

  See the top of gitweb.perl file for examples of customizable options.

Config file example
~~~~~~~~~~~~~~~~~~~

To enable blame, pickaxe search, and snapshot support, while allowing
individual projects to turn them off, put the following in your
GITWEB_CONFIG file:

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

	$feature{'pickaxe'}{'default'} = [1];
	$feature{'pickaxe'}{'override'} = 1;

	$feature{'snapshot'}{'default'} = ['x-gzip', 'gz', 'gzip'];
	$feature{'snapshot'}{'override'} = 1;


Gitweb repositories
-------------------

- By default all git repositories under projectroot are visible and
  available to gitweb. List of projects is generated by default by
  scanning the projectroot directory for git repositories (for object
  databases to be more exact).

  You can provide pre-generated list of [visible] repositories,
  together with information about their owners (the project ownership
  is taken from owner of repository directory otherwise), by setting
  GITWEB_LIST build configuration variable (or $projects_list variable
  in gitweb config file) to point to a plain file.

  Each line of projects list file should consist of url-encoded path
  to project repository database (relative to projectroot) separated
  by space from url-encoded project owner; spaces in both project path
  and project owner have to be encoded as either '%20' or '+'.

  You can generate projects list index file using project_index action
  (the 'TXT' link on projects list page) directly from gitweb.

- By default even if project is not visible on projects list page, you
  can view it nevertheless by hand-crafting gitweb URL. You can set
  GITWEB_STRICT_EXPORT build configuration variable (or $strict_export
  variable in gitweb config file) to only allow viewing of
  repositories also shown on the overview page.

- Alternatively, you can configure gitweb to only list and allow
  viewing of the explicitly exported repositories, via
  GITWEB_EXPORT_OK build configuration variable (or $export_ok
  variable in gitweb config file). If it evaluates to true, gitweb
  show repository only if this file exists in its object database
  (if directory has the magic file $export_ok).

Generating projects list using gitweb
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

We assume that GITWEB_CONFIG has its default Makefile value, namely
gitweb_config.perl. Put the following in gitweb_make_index.perl file:

	$GITWEB_CONFIG = "gitweb_config.perl";
	do $GITWEB_CONFIG if -e $GITWEB_CONFIG;

	$projects_list = $projectroot;

Then create the following script to get list of project in the format
suitable for GITWEB_LIST build configuration variable (or
$projects_list variable in gitweb config):

	#!/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


Requirements
------------

 - Core git tools
 - Perl
 - Perl modules: CGI, Encode, Fcntl, File::Find, File::Basename.
 - web server


Example web server configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

See also "Webserver configuration" section in README file for gitweb
(in gitweb/README).


- Apache2, gitweb installed as CGI script,
  under /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>

- Apache2, gitweb installed as mod_perl legacy script,
  under /var/www/perl/

	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>
