| GIT web Interface (gitweb) Installation | |
| ======================================= | |
| First you have to generate gitweb.cgi from gitweb.perl using | |
| "make gitweb", then "make install-gitweb" appropriate files | |
| (gitweb.cgi, gitweb.js, gitweb.css, git-logo.png and git-favicon.png) | |
| to their destination. For example if git was (or is) installed with | |
| /usr prefix and gitwebdir is /var/www/cgi-bin, you can do | |
| $ make prefix=/usr gitweb ;# as yourself | |
| # make gitwebdir=/var/www/cgi-bin install-gitweb ;# 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 ;# as yourself | |
| # make gitwebdir=/var/www/cgi-bin \ | |
| install-gitweb ;# 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). | |
| Requirements | |
| ------------ | |
| - Core git tools | |
| - Perl | |
| - Perl modules: CGI, Encode, Fcntl, File::Find, File::Basename. | |
| - web server | |
| The following optional Perl modules are required for extra features | |
| - Digest::MD5 - for gravatar support | |
| - CGI::Fast and FCGI - for running gitweb as FastCGI script | |
| - HTML::TagCloud - for fancy tag cloud in project list view | |
| - HTTP::Date or Time::ParseDate - to support If-Modified-Since for feeds | |
| Build time configuration | |
| ------------------------ | |
| See also "How to configure gitweb for your local system" section below. | |
| - There are many configuration variables which affect building of | |
| gitweb.cgi; see "default configuration for gitweb" section in main | |
| (top dir) Makefile, and instructions for building gitweb target. | |
| One of the most important is where to find the git wrapper binary. Gitweb | |
| tries to find the 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 the 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 searches 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. The 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 the object database, and does not | |
| need a 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) | |
| repositories, you can make projectname.git a 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 JavaScript file, its favicon and logo with the GITWEB_CSS, GITWEB_JS | |
| GITWEB_FAVICON and GITWEB_LOGO build configuration variables. By default | |
| gitweb tries to find them in the same directory as gitweb.cgi script. | |
| - You can optionally generate minified versions of gitweb.js and gitweb.css | |
| by defining the JSMIN and CSSMIN build configuration variables. By default | |
| the non-minified versions will be used. NOTE: if you enable this option, | |
| substitute gitweb.min.js and gitweb.min.css for all uses of gitweb.js and | |
| gitweb.css in the help files. | |
| How to configure gitweb for your local system | |
| --------------------------------------------- | |
| You can specify the following configuration variables when building GIT: | |
| * GIT_BINDIR | |
| Points where to find the git executable. You should set it up to | |
| the place where the git binary was installed (usually /usr/bin) if you | |
| don't install git from sources together with gitweb. [Default: $(bindir)] | |
| * GITWEB_SITENAME | |
| Shown in the title of all generated pages, defaults to the server name | |
| (SERVER_NAME CGI environment variable) if not set. [No default] | |
| * GITWEB_PROJECTROOT | |
| The root directory for all projects shown by gitweb. Must be set | |
| correctly for gitweb to find repositories to display. See also | |
| "Gitweb repositories" in the INSTALL file for gitweb. [Default: /pub/git] | |
| * GITWEB_PROJECT_MAXDEPTH | |
| The filesystem traversing limit for getting the project list; the number | |
| is taken as depth relative to the projectroot. It is used when | |
| GITWEB_LIST is a directory (or is not set; then project root is used). | |
| This is meant to speed up project listing on large work trees by limiting | |
| search depth. [Default: 2007] | |
| * GITWEB_LIST | |
| Points to a directory to scan for projects (defaults to project root | |
| if not set / if empty) or to a file with explicit listing of projects | |
| (together with projects' ownership). See "Generating projects list | |
| using gitweb" in INSTALL file for gitweb to find out how to generate | |
| such file from scan of a directory. [No default, which means use root | |
| directory for projects] | |
| * GITWEB_EXPORT_OK | |
| Show repository only if this file exists (in repository). Only | |
| effective if this variable evaluates to true. [No default / Not set] | |
| * GITWEB_STRICT_EXPORT | |
| Only allow viewing of repositories also shown on the overview page. | |
| This for example makes GITWEB_EXPORT_OK to decide if repository is | |
| available and not only if it is shown. If GITWEB_LIST points to | |
| file with list of project, only those repositories listed would be | |
| available for gitweb. [No default] | |
| * GITWEB_HOMETEXT | |
| Points to an .html file which is included on the gitweb project | |
| overview page ('projects_list' view), if it exists. Relative to | |
| gitweb.cgi script. [Default: indextext.html] | |
| * GITWEB_SITE_HTML_HEAD_STRING | |
| html snippet to include in the <head> section of each page. [No default] | |
| * GITWEB_SITE_HEADER | |
| Filename of html text to include at top of each page. Relative to | |
| gitweb.cgi script. [No default] | |
| * GITWEB_SITE_FOOTER | |
| Filename of html text to include at bottom of each page. Relative to | |
| gitweb.cgi script. [No default] | |
| * GITWEB_HOME_LINK_STR | |
| String of the home link on top of all pages, leading to $home_link | |
| (usually main gitweb page, which means projects list). Used as first | |
| part of gitweb view "breadcrumb trail": <home> / <project> / <view>. | |
| [Default: projects] | |
| * GITWEB_SITENAME | |
| Name of your site or organization to appear in page titles. Set it | |
| to something descriptive for clearer bookmarks etc. If not set | |
| (if empty) gitweb uses "$SERVER_NAME Git", or "Untitled Git" if | |
| SERVER_NAME CGI environment variable is not set (e.g. if running | |
| gitweb as standalone script). [No default] | |
| * GITWEB_BASE_URL | |
| Git base URLs used for URL to where fetch project from, i.e. full | |
| URL is "$git_base_url/$project". Shown on projects summary page. | |
| Repository URL for project can be also configured per repository; this | |
| takes precedence over URLs composed from base URL and a project name. | |
| Note that you can setup multiple base URLs (for example one for | |
| git:// protocol access, another for http:// access) from the gitweb | |
| config file. [No default] | |
| * GITWEB_CSS | |
| Points to the location where you put gitweb.css on your web server | |
| (or to be more generic, the URI of gitweb stylesheet). Relative to the | |
| base URI of gitweb. Note that you can setup multiple stylesheets from | |
| the gitweb config file. [Default: static/gitweb.css (or | |
| static/gitweb.min.css if the CSSMIN variable is defined / CSS minifier | |
| is used)] | |
| * GITWEB_JS | |
| Points to the location where you put gitweb.js on your web server | |
| (or to be more generic URI of JavaScript code used by gitweb). | |
| Relative to base URI of gitweb. [Default: static/gitweb.js (or | |
| static/gitweb.min.js if JSMIN build variable is defined / JavaScript | |
| minifier is used)] | |
| * CSSMIN, JSMIN | |
| Invocation of a CSS minifier or a JavaScript minifier, respectively, | |
| working as a filter (source on standard input, minified result on | |
| standard output). If set, it is used to generate a minified version of | |
| 'static/gitweb.css' or 'static/gitweb.js', respectively. *Note* that | |
| minified files would have *.min.css and *.min.js extension, which is | |
| important if you also set GITWEB_CSS and/or GITWEB_JS. [No default] | |
| * GITWEB_LOGO | |
| Points to the location where you put git-logo.png on your web server | |
| (or to be more generic URI of logo, 72x27 size, displayed in top right | |
| corner of each gitweb page, and used as logo for Atom feed). Relative | |
| to base URI of gitweb. [Default: static/git-logo.png] | |
| * GITWEB_FAVICON | |
| Points to the location where you put git-favicon.png on your web server | |
| (or to be more generic URI of favicon, assumed to be image/png type; | |
| web browsers that support favicons (website icons) may display them | |
| in the browser's URL bar and next to site name in bookmarks). Relative | |
| to base URI of gitweb. [Default: static/git-favicon.png] | |
| * GITWEB_CONFIG | |
| This Perl file will be loaded using 'do' and can be used to override any | |
| of the options above as well as some other options -- see the "Runtime | |
| gitweb configuration" section below, and top of 'gitweb.cgi' for their | |
| full list and description. If the environment variable GITWEB_CONFIG | |
| is set when gitweb.cgi is executed, then the file specified in the | |
| environment variable will be loaded instead of the file specified | |
| when gitweb.cgi was created. [Default: gitweb_config.perl] | |
| * GITWEB_CONFIG_SYSTEM | |
| This Perl file will be loaded using 'do' as a fallback if GITWEB_CONFIG | |
| does not exist. If the environment variable GITWEB_CONFIG_SYSTEM is set | |
| when gitweb.cgi is executed, then the file specified in the environment | |
| variable will be loaded instead of the file specified when gitweb.cgi was | |
| created. [Default: /etc/gitweb.conf] | |
| * HIGHLIGHT_BIN | |
| Path to the highlight executable to use (must be the one from | |
| http://www.andre-simon.de due to assumptions about parameters and output). | |
| Useful if highlight is not installed on your webserver's PATH. | |
| [Default: highlight] | |
| Build example | |
| ~~~~~~~~~~~~~ | |
| - To install gitweb to /var/www/cgi-bin/gitweb/, when git wrapper | |
| is installed at /usr/local/bin/git, the repositories (projects) | |
| we want to display are under /home/local/scm, and you do not use | |
| minifiers, you can do | |
| make GITWEB_PROJECTROOT="/home/local/scm" \ | |
| GITWEB_JS="gitweb/static/gitweb.js" \ | |
| GITWEB_CSS="gitweb/static/gitweb.css" \ | |
| GITWEB_LOGO="gitweb/static/git-logo.png" \ | |
| GITWEB_FAVICON="gitweb/static/git-favicon.png" \ | |
| bindir=/usr/local/bin \ | |
| gitweb | |
| make gitwebdir=/var/www/cgi-bin/gitweb install-gitweb | |
| Gitweb config file | |
| ------------------ | |
| See also "Runtime gitweb configuration" section in README file | |
| for gitweb (in gitweb/README), and gitweb.conf(5) manpage. | |
| - You can configure gitweb further using the per-instance gitweb configuration file; | |
| by default this is a file named gitweb_config.perl in the same place as | |
| gitweb.cgi script. You can control the default place for the config file | |
| using the GITWEB_CONFIG build configuration variable, and you can set it | |
| using the GITWEB_CONFIG environment variable. If this file does not | |
| exist, gitweb looks for a system-wide configuration file, normally | |
| /etc/gitweb.conf. You can change the default using the | |
| GITWEB_CONFIG_SYSTEM build configuration variable, and override it | |
| through the GITWEB_CONFIG_SYSTEM environment variable. | |
| Note that the GITWEB_CONFIG_SYSTEM system-wide configuration file is | |
| only used for instances that lack per-instance configuration file. | |
| You can use GITWEB_CONFIG_COMMON common system-wide configuration | |
| file (normally /etc/gitweb-common.conf) to keep common default | |
| settings that apply to all instances. Settings from per-instance or | |
| system-wide configuration file override those from common system-wide | |
| configuration file. | |
| - The gitweb config file is a 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'} = ['zip', 'tgz']; | |
| $feature{'snapshot'}{'override'} = 1; | |
| If you allow overriding for the snapshot feature, you can specify which | |
| snapshot formats are globally disabled. You can also add any command line | |
| options you want (such as setting the compression level). For instance, | |
| you can disable Zip compressed snapshots and set GZip to run at level 6 by | |
| adding the following lines to your $GITWEB_CONFIG: | |
| $known_snapshot_formats{'zip'}{'disabled'} = 1; | |
| $known_snapshot_formats{'tgz'}{'compressor'} = ['gzip','-6']; | |
| Gitweb repositories | |
| ------------------- | |
| By default gitweb shows all git repositories under single common repository | |
| root on a local filesystem; see description of GITWEB_PROJECTROOT build-time | |
| configuration variable above (and also of GITWEB_LIST). | |
| More advanced usage, like limiting access or visibility of repositories and | |
| managing multiple roots are described on gitweb manpage. | |
| Example web server configuration | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| See also "Webserver configuration" and "Advanced web server setup" sections | |
| in gitweb(1) manpage. | |
| - 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> |