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.js, gitweb.css, git-logo.png and git-favicon.png) to their 7destination. For example if git was (or is) installed with /usr prefix, 8you can do 9 10 $ make prefix=/usr gitweb/gitweb.cgi ;# as yourself 11 # cp gitweb/git* /var/www/cgi-bin/ ;# as root 12 13Alternatively you can use autoconf generated ./configure script to 14set up path to git binaries (via config.mak.autogen), so you can write 15instead 16 17 $ make configure ;# as yourself 18 $ ./configure --prefix=/usr ;# as yourself 19 $ make gitweb/gitweb.cgi ;# as yourself 20 # cp gitweb/git* /var/www/cgi-bin/ ;# as root 21 22The above example assumes that your web server is configured to run 23[executable] files in /var/www/cgi-bin/ as server scripts (as CGI 24scripts). 25 26 27Build time configuration 28------------------------ 29 30See also "How to configure gitweb for your local system" in README 31file for gitweb (in gitweb/README). 32 33- There are many configuration variables which affect building of 34 gitweb.cgi; see "default configuration for gitweb" section in main 35 (top dir) Makefile, and instructions for building gitweb/gitweb.cgi 36 target. 37 38 One of the most important is where to find the git wrapper binary. Gitweb 39 tries to find the git wrapper at $(bindir)/git, so you have to set $bindir 40 when building gitweb.cgi, or $prefix from which $bindir is derived. If 41 you build and install gitweb together with the rest of the git suite, 42 there should be no problems. Otherwise, if git was for example 43 installed from a binary package, you have to set $prefix (or $bindir) 44 accordingly. 45 46- Another important issue is where are git repositories you want to make 47 available to gitweb. By default gitweb searches for repositories under 48 /pub/git; if you want to have projects somewhere else, like /home/git, 49 use GITWEB_PROJECTROOT build configuration variable. 50 51 By default all git repositories under projectroot are visible and 52 available to gitweb. The list of projects is generated by default by 53 scanning the projectroot directory for git repositories. This can be 54 changed (configured) as described in "Gitweb repositories" section 55 below. 56 57 Note that gitweb deals directly with the object database, and does not 58 need a working directory; the name of the project is the name of its 59 repository object database, usually projectname.git for bare 60 repositories. If you want to provide gitweb access to non-bare (live) 61 repositories, you can make projectname.git a symbolic link under 62 projectroot linking to projectname/.git (but it is just 63 a suggestion). 64 65- You can control where gitweb tries to find its main CSS style file, 66 its JavaScript file, its favicon and logo with the GITWEB_CSS, GITWEB_JS 67 GITWEB_FAVICON and GITWEB_LOGO build configuration variables. By default 68 gitweb tries to find them in the same directory as gitweb.cgi script. 69 70- You can optionally generate minified versions of gitweb.js and gitweb.css 71 by defining the JSMIN and CSSMIN build configuration variables. By default 72 the non-minified versions will be used. NOTE: if you enable this option, 73 substitute gitweb.min.js and gitweb.min.css for all uses of gitweb.js and 74 gitweb.css in the help files. 75 76Build example 77~~~~~~~~~~~~~ 78 79- To install gitweb to /var/www/cgi-bin/gitweb/ when git wrapper 80 is installed at /usr/local/bin/git and the repositories (projects) 81 we want to display are under /home/local/scm, you can do 82 83 make GITWEB_PROJECTROOT="/home/local/scm" \ 84 GITWEB_JS="/gitweb/gitweb.js" \ 85 GITWEB_CSS="/gitweb/gitweb.css" \ 86 GITWEB_LOGO="/gitweb/git-logo.png" \ 87 GITWEB_FAVICON="/gitweb/git-favicon.png" \ 88 bindir=/usr/local/bin \ 89 gitweb/gitweb.cgi 90 91 cp -fv ~/git/gitweb/gitweb.{cgi,js,css} \ 92 ~/git/gitweb/git-{favicon,logo}.png \ 93 /var/www/cgi-bin/gitweb/ 94 95 96Gitweb config file 97------------------ 98 99See also "Runtime gitweb configuration" section in README file 100for gitweb (in gitweb/README). 101 102- You can configure gitweb further using the gitweb configuration file; 103 by default this is a file named gitweb_config.perl in the same place as 104 gitweb.cgi script. You can control the default place for the config file 105 using the GITWEB_CONFIG build configuration variable, and you can set it 106 using the GITWEB_CONFIG environment variable. If this file does not 107 exist, gitweb looks for a system-wide configuration file, normally 108 /etc/gitweb.conf. You can change the default using the 109 GITWEB_CONFIG_SYSTEM build configuration variable, and override it 110 through the GITWEB_CONFIG_SYSTEM environment variable. 111 112- The gitweb config file is a fragment of perl code. You can set variables 113 using "our $variable = value"; text from "#" character until the end 114 of a line is ignored. See perlsyn(1) for details. 115 116 See the top of gitweb.perl file for examples of customizable options. 117 118Config file example 119~~~~~~~~~~~~~~~~~~~ 120 121To enable blame, pickaxe search, and snapshot support, while allowing 122individual projects to turn them off, put the following in your 123GITWEB_CONFIG file: 124 125 $feature{'blame'}{'default'} = [1]; 126 $feature{'blame'}{'override'} = 1; 127 128 $feature{'pickaxe'}{'default'} = [1]; 129 $feature{'pickaxe'}{'override'} = 1; 130 131 $feature{'snapshot'}{'default'} = ['zip', 'tgz']; 132 $feature{'snapshot'}{'override'} = 1; 133 134If you allow overriding for the snapshot feature, you can specify which 135snapshot formats are globally disabled. You can also add any command line 136options you want (such as setting the compression level). For instance, 137you can disable Zip compressed snapshots and set GZip to run at level 6 by 138adding the following lines to your $GITWEB_CONFIG: 139 140 $known_snapshot_formats{'zip'}{'disabled'} = 1; 141 $known_snapshot_formats{'tgz'}{'compressor'} = ['gzip','-6']; 142 143 144Gitweb repositories 145------------------- 146 147- By default all git repositories under projectroot are visible and 148 available to gitweb. The list of projects is generated by default by 149 scanning the projectroot directory for git repositories (for object 150 databases to be more exact). 151 152 You can provide a pre-generated list of [visible] repositories, 153 together with information about their owners (the project ownership 154 defaults to the owner of the repository directory otherwise), by setting 155 the GITWEB_LIST build configuration variable (or the $projects_list 156 variable in the gitweb config file) to point to a plain file. 157 158 Each line of the projects list file should consist of the url-encoded path 159 to the project repository database (relative to projectroot), followed 160 by the url-encoded project owner on the same line (separated by a space). 161 Spaces in both project path and project owner have to be encoded as either 162 '%20' or '+'. 163 164 Other characters that have to be url-encoded, i.e. replaced by '%' 165 followed by two-digit character number in octal, are: other whitespace 166 characters (because they are field separator in a record), plus sign '+' 167 (because it can be used as replacement for spaces), and percent sign '%' 168 (which is used for encoding / escaping). 169 170 You can generate the projects list index file using the project_index 171 action (the 'TXT' link on projects list page) directly from gitweb. 172 173- By default, even if a project is not visible on projects list page, you 174 can view it nevertheless by hand-crafting a gitweb URL. You can set the 175 GITWEB_STRICT_EXPORT build configuration variable (or the $strict_export 176 variable in the gitweb config file) to only allow viewing of 177 repositories also shown on the overview page. 178 179- Alternatively, you can configure gitweb to only list and allow 180 viewing of the explicitly exported repositories, via the 181 GITWEB_EXPORT_OK build configuration variable (or the $export_ok 182 variable in gitweb config file). If it evaluates to true, gitweb 183 shows repositories only if this file exists in its object database 184 (if directory has the magic file named $export_ok). 185 186- Finally, it is possible to specify an arbitrary perl subroutine that 187 will be called for each project to determine if it can be exported. 188 The subroutine receives an absolute path to the project as its only 189 parameter. 190 191 For example, if you use mod_perl to run the script, and have dumb 192 http protocol authentication configured for your repositories, you 193 can use the following hook to allow access only if the user is 194 authorized to read the files: 195 196 $export_auth_hook = sub { 197 use Apache2::SubRequest (); 198 use Apache2::Const -compile => qw(HTTP_OK); 199 my $path = "$_[0]/HEAD"; 200 my $r = Apache2::RequestUtil->request; 201 my $sub = $r->lookup_file($path); 202 return $sub->filename eq $path 203 && $sub->status == Apache2::Const::HTTP_OK; 204 }; 205 206 207Generating projects list using gitweb 208~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 209 210We assume that GITWEB_CONFIG has its default Makefile value, namely 211gitweb_config.perl. Put the following in gitweb_make_index.perl file: 212 213 $GITWEB_CONFIG = "gitweb_config.perl"; 214 do $GITWEB_CONFIG if -e $GITWEB_CONFIG; 215 216 $projects_list = $projectroot; 217 218Then create the following script to get list of project in the format 219suitable for GITWEB_LIST build configuration variable (or 220$projects_list variable in gitweb config): 221 222 #!/bin/sh 223 224 export GITWEB_CONFIG="gitweb_make_index.perl" 225 export GATEWAY_INTERFACE="CGI/1.1" 226 export HTTP_ACCEPT="*/*" 227 export REQUEST_METHOD="GET" 228 export QUERY_STRING="a=project_index" 229 230 perl -- /var/www/cgi-bin/gitweb.cgi 231 232 233Requirements 234------------ 235 236 - Core git tools 237 - Perl 238 - Perl modules: CGI, Encode, Fcntl, File::Find, File::Basename. 239 - web server 240 241 242Example web server configuration 243~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 244 245See also "Webserver configuration" section in README file for gitweb 246(in gitweb/README). 247 248 249- Apache2, gitweb installed as CGI script, 250 under /var/www/cgi-bin/ 251 252 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" 253 254 <Directory "/var/www/cgi-bin"> 255 Options Indexes FollowSymlinks ExecCGI 256 AllowOverride None 257 Order allow,deny 258 Allow from all 259 </Directory> 260 261- Apache2, gitweb installed as mod_perl legacy script, 262 under /var/www/perl/ 263 264 Alias /perl "/var/www/perl" 265 266 <Directory "/var/www/perl"> 267 SetHandler perl-script 268 PerlResponseHandler ModPerl::Registry 269 PerlOptions +ParseHeaders 270 Options Indexes FollowSymlinks +ExecCGI 271 AllowOverride None 272 Order allow,deny 273 Allow from all 274 </Directory>