gitweb / INSTALLon commit git-completion: add "git stash" (7fd53fc)
   1GIT web Interface (gitweb) Installation
   2=======================================
   3
   4First you have to generate gitweb.cgi from gitweb.perl using
   5"make gitweb/gitweb.cgi", then copy appropriate files (gitweb.cgi,
   6gitweb.css, git-logo.png and git-favicon.png) to their destination.
   7For example if git was (or is) installed with /usr prefix, you can do
   8
   9        $ make prefix=/usr gitweb/gitweb.cgi  ;# as yourself
  10        # cp gitweb/git* /var/www/cgi-bin/    ;# as root
  11
  12Alternatively you can use autoconf generated ./configure script to
  13set up path to git binaries (via config.mak.autogen), so you can write
  14instead
  15
  16        $ make configure                     ;# as yourself
  17        $ ./configure --prefix=/usr          ;# as yourself
  18        $ make gitweb/gitweb.cgi             ;# as yourself
  19        # cp gitweb/git* /var/www/cgi-bin/   ;# as root
  20
  21The above example assumes that your web server is configured to run
  22[executable] files in /var/www/cgi-bin/ as server scripts (as CGI
  23scripts).
  24
  25
  26Build time configuration
  27------------------------
  28
  29See also "How to configure gitweb for your local system" in README
  30file for gitweb (in gitweb/README).
  31
  32- There are many configuration variables which affects building of
  33  gitweb.cgi; see "default configuration for gitweb" section in main
  34  (top dir) Makefile, and instructions for building gitweb/gitweb.cgi
  35  target.
  36
  37  One of most important is where to find git wrapper binary. Gitweb
  38  tries to find git wrapper at $(bindir)/git, so you have to set $bindir
  39  when building gitweb.cgi, or $prefix from which $bindir is derived. If
  40  you build and install gitweb together with the rest of git suite,
  41  there should be no problems. Otherwise, if git was for example
  42  installed from a binary package, you have to set $prefix (or $bindir)
  43  accordingly.
  44
  45- Another important issue is where are git repositories you want to make
  46  available to gitweb. By default gitweb search for repositories under
  47  /pub/git; if you want to have projects somewhere else, like /home/git,
  48  use GITWEB_PROJECTROOT build configuration variable.
  49
  50  By default all git repositories under projectroot are visible and
  51  available to gitweb. List of projects is generated by default by
  52  scanning the projectroot directory for git repositories. This can be
  53  changed (configured) as described in "Gitweb repositories" section
  54  below.
  55
  56  Note that gitweb deals directly with object database, and does not
  57  need working directory; the name of the project is the name of its
  58  repository object database, usually projectname.git for bare
  59  repositories. If you want to provide gitweb access to non-bare (live)
  60  repository, you can make projectname.git symbolic link under
  61  projectroot linking to projectname/.git (but it is just
  62  a suggestion).
  63
  64- You can control where gitweb tries to find its main CSS style file,
  65  its favicon and logo with GITWEB_CSS, GITWEB_FAVICON and GITWEB_LOGO
  66  build configuration variables. By default gitweb tries to find them
  67  in the same directory as gitweb.cgi script.
  68
  69Build example
  70~~~~~~~~~~~~~
  71
  72- To install gitweb to /var/www/cgi-bin/gitweb/ when git wrapper
  73  is installed at /usr/local/bin/git and the repositories (projects)
  74  we want to display are under /home/local/scm, you can do
  75
  76        make GITWEB_PROJECTROOT="/home/local/scm" \
  77             GITWEB_CSS="/gitweb/gitweb.css" \
  78             GITWEB_LOGO="/gitweb/git-logo.png" \
  79             GITWEB_FAVICON="/gitweb/git-favicon.png" \
  80             bindir=/usr/local/bin \
  81             gitweb/gitweb.cgi
  82
  83        cp -fv ~/git/gitweb/gitweb.{cgi,css} \
  84               ~/git/gitweb/git-{favicon,logo}.png \
  85             /var/www/cgi-bin/gitweb/
  86
  87
  88Gitweb config file
  89------------------
  90
  91See also "Runtime gitweb configuration" section in README file
  92for gitweb (in gitweb/README).
  93
  94- You can configure gitweb further using gitweb configuration file;
  95  by default it is file named gitweb_config.perl in the same place as
  96  gitweb.cgi script. You can control default place for config file
  97  using GITWEB_CONFIG build configuration variable, and you can set it
  98  using GITWEB_CONFIG environmental variable.
  99
 100- Gitweb config file is [fragment] of perl code. You can set variables
 101  using "our $variable = value"; text from "#" character until the end
 102  of a line is ignored. See perlsyn(1) for details.
 103
 104  See the top of gitweb.perl file for examples of customizable options.
 105
 106Config file example
 107~~~~~~~~~~~~~~~~~~~
 108
 109To enable blame, pickaxe search, and snapshot support, while allowing
 110individual projects to turn them off, put the following in your
 111GITWEB_CONFIG file:
 112
 113        $feature{'blame'}{'default'} = [1];
 114        $feature{'blame'}{'override'} = 1;
 115
 116        $feature{'pickaxe'}{'default'} = [1];
 117        $feature{'pickaxe'}{'override'} = 1;
 118
 119        $feature{'snapshot'}{'default'} = ['x-gzip', 'gz', 'gzip'];
 120        $feature{'snapshot'}{'override'} = 1;
 121
 122
 123Gitweb repositories
 124-------------------
 125
 126- By default all git repositories under projectroot are visible and
 127  available to gitweb. List of projects is generated by default by
 128  scanning the projectroot directory for git repositories (for object
 129  databases to be more exact).
 130
 131  You can provide pre-generated list of [visible] repositories,
 132  together with information about their owners (the project ownership
 133  is taken from owner of repository directory otherwise), by setting
 134  GITWEB_LIST build configuration variable (or $projects_list variable
 135  in gitweb config file) to point to a plain file.
 136
 137  Each line of projects list file should consist of url-encoded path
 138  to project repository database (relative to projectroot) separated
 139  by space from url-encoded project owner; spaces in both project path
 140  and project owner have to be encoded as either '%20' or '+'.
 141
 142  You can generate projects list index file using project_index action
 143  (the 'TXT' link on projects list page) directly from gitweb.
 144
 145- By default even if project is not visible on projects list page, you
 146  can view it nevertheless by hand-crafting gitweb URL. You can set
 147  GITWEB_STRICT_EXPORT build configuration variable (or $strict_export
 148  variable in gitweb config file) to only allow viewing of
 149  repositories also shown on the overview page.
 150
 151- Alternatively, you can configure gitweb to only list and allow
 152  viewing of the explicitly exported repositories, via
 153  GITWEB_EXPORT_OK build configuration variable (or $export_ok
 154  variable in gitweb config file). If it evaluates to true, gitweb
 155  show repository only if this file exists in its object database
 156  (if directory has the magic file $export_ok).
 157
 158Generating projects list using gitweb
 159~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 160
 161We assume that GITWEB_CONFIG has its default Makefile value, namely
 162gitweb_config.perl. Put the following in gitweb_make_index.perl file:
 163
 164        $GITWEB_CONFIG = "gitweb_config.perl";
 165        do $GITWEB_CONFIG if -e $GITWEB_CONFIG;
 166
 167        $projects_list = $projectroot;
 168
 169Then create the following script to get list of project in the format
 170suitable for GITWEB_LIST build configuration variable (or
 171$projects_list variable in gitweb config):
 172
 173        #!/bin/sh
 174
 175        export GITWEB_CONFIG="gitweb_make_index.perl"
 176        export GATEWAY_INTERFACE="CGI/1.1"
 177        export HTTP_ACCEPT="*/*"
 178        export REQUEST_METHOD="GET"
 179        export QUERY_STRING="a=project_index"
 180
 181        perl -- /var/www/cgi-bin/gitweb.cgi
 182
 183
 184Requirements
 185------------
 186
 187 - Core git tools
 188 - Perl
 189 - Perl modules: CGI, Encode, Fcntl, File::Find, File::Basename.
 190 - web server
 191
 192
 193Example web server configuration
 194~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 195
 196See also "Webserver configuration" section in README file for gitweb
 197(in gitweb/README).
 198
 199
 200- Apache2, gitweb installed as CGI script,
 201  under /var/www/cgi-bin/
 202
 203        ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
 204
 205        <Directory "/var/www/cgi-bin">
 206            Options Indexes FollowSymlinks ExecCGI
 207            AllowOverride None
 208            Order allow,deny
 209            Allow from all
 210        </Directory>
 211
 212- Apache2, gitweb installed as mod_perl legacy script,
 213  under /var/www/perl/
 214
 215        Alias /perl "/var/www/perl"
 216
 217        <Directory "/var/www/perl">
 218            SetHandler perl-script
 219            PerlResponseHandler ModPerl::Registry
 220            PerlOptions +ParseHeaders
 221            Options Indexes FollowSymlinks +ExecCGI
 222            AllowOverride None
 223            Order allow,deny
 224            Allow from all
 225        </Directory>