| 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 affect 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 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 favicon and logo with the 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 the 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. |
| |
| - 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 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 (for object |
| databases to be more exact). |
| |
| You can provide a pre-generated list of [visible] repositories, |
| together with information about their owners (the project ownership |
| defaults to the owner of the repository directory otherwise), by setting |
| the GITWEB_LIST build configuration variable (or the $projects_list |
| variable in the gitweb config file) to point to a plain file. |
| |
| Each line of the projects list file should consist of the url-encoded path |
| to the project repository database (relative to projectroot), followed |
| by the url-encoded project owner on the same line (separated by a space). |
| Spaces in both project path and project owner have to be encoded as either |
| '%20' or '+'. |
| |
| Other characters that have to be url-encoded, i.e. replaced by '%' |
| followed by two-digit character number in octal, are: other whitespace |
| characters (because they are field separator in a record), plus sign '+' |
| (because it can be used as replacement for spaces), and percent sign '%' |
| (which is used for encoding / escaping). |
| |
| You can generate the projects list index file using the project_index |
| action (the 'TXT' link on projects list page) directly from gitweb. |
| |
| - By default, even if a project is not visible on projects list page, you |
| can view it nevertheless by hand-crafting a gitweb URL. You can set the |
| GITWEB_STRICT_EXPORT build configuration variable (or the $strict_export |
| variable in the 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 the |
| GITWEB_EXPORT_OK build configuration variable (or the $export_ok |
| variable in gitweb config file). If it evaluates to true, gitweb |
| shows repositories only if this file exists in its object database |
| (if directory has the magic file named $export_ok). |
| |
| - Finally, it is possible to specify an arbitrary perl subroutine that |
| will be called for each project to determine if it can be exported. |
| The subroutine receives an absolute path to the project as its only |
| parameter. |
| |
| For example, if you use mod_perl to run the script, and have dumb |
| http protocol authentication configured for your repositories, you |
| can use the following hook to allow access only if the user is |
| authorized to read the files: |
| |
| $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; |
| }; |
| |
| |
| 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> |