]>
Commit | Line | Data |
---|---|---|
0a8f4f00 | 1 | GIT web Interface |
128eead1 | 2 | ================= |
0a8f4f00 JH |
3 | |
4 | The one working on: | |
eae7a759 | 5 | http://git.kernel.org/ |
0a8f4f00 | 6 | |
175fb6c0 | 7 | From the git version 1.4.0 gitweb is bundled with git. |
0a8f4f00 | 8 | |
5d043a3d | 9 | |
128eead1 MW |
10 | How to configure gitweb for your local system |
11 | --------------------------------------------- | |
5d043a3d | 12 | |
eae7a759 | 13 | See also the "Build time configuration" section in the INSTALL |
61fd2552 JN |
14 | file for gitweb (in gitweb/INSTALL). |
15 | ||
5d043a3d | 16 | You can specify the following configuration variables when building GIT: |
61fd2552 | 17 | * GIT_BINDIR |
eae7a759 RGS |
18 | Points where to find the git executable. You should set it up to |
19 | the place where the git binary was installed (usually /usr/bin) if you | |
61fd2552 | 20 | don't install git from sources together with gitweb. [Default: $(bindir)] |
5d043a3d | 21 | * GITWEB_SITENAME |
61fd2552 JN |
22 | Shown in the title of all generated pages, defaults to the server name |
23 | (SERVER_NAME CGI environment variable) if not set. [No default] | |
5d043a3d | 24 | * GITWEB_PROJECTROOT |
61fd2552 JN |
25 | The root directory for all projects shown by gitweb. Must be set |
26 | correctly for gitweb to find repositories to display. See also | |
eae7a759 | 27 | "Gitweb repositories" in the INSTALL file for gitweb. [Default: /pub/git] |
61fd2552 | 28 | * GITWEB_PROJECT_MAXDEPTH |
eae7a759 | 29 | The filesystem traversing limit for getting the project list; the number |
61fd2552 JN |
30 | is taken as depth relative to the projectroot. It is used when |
31 | GITWEB_LIST is a directory (or is not set; then project root is used). | |
32 | Is is meant to speed up project listing on large work trees by limiting | |
eae7a759 | 33 | search depth. [Default: 2007] |
5d043a3d | 34 | * GITWEB_LIST |
61fd2552 JN |
35 | Points to a directory to scan for projects (defaults to project root |
36 | if not set / if empty) or to a file with explicit listing of projects | |
37 | (together with projects' ownership). See "Generating projects list | |
38 | using gitweb" in INSTALL file for gitweb to find out how to generate | |
39 | such file from scan of a directory. [No default, which means use root | |
40 | directory for projects] | |
41 | * GITWEB_EXPORT_OK | |
42 | Show repository only if this file exists (in repository). Only | |
43 | effective if this variable evaluates to true. [No default / Not set] | |
44 | * GITWEB_STRICT_EXPORT | |
45 | Only allow viewing of repositories also shown on the overview page. | |
46 | This for example makes GITWEB_EXPORT_OK to decide if repository is | |
47 | available and not only if it is shown. If GITWEB_LIST points to | |
48 | file with list of project, only those repositories listed would be | |
49 | available for gitweb. [No default] | |
5d043a3d | 50 | * GITWEB_HOMETEXT |
61fd2552 JN |
51 | Points to an .html file which is included on the gitweb project |
52 | overview page ('projects_list' view), if it exists. Relative to | |
53 | gitweb.cgi script. [Default: indextext.html] | |
54 | * GITWEB_SITE_HEADER | |
55 | Filename of html text to include at top of each page. Relative to | |
56 | gitweb.cgi script. [No default] | |
57 | * GITWEB_SITE_FOOTER | |
58 | Filename of html text to include at bottom of each page. Relative to | |
59 | gitweb.cgi script. [No default] | |
60 | * GITWEB_HOME_LINK_STR | |
61 | String of the home link on top of all pages, leading to $home_link | |
62 | (usually main gitweb page, which means projects list). Used as first | |
63 | part of gitweb view "breadcrumb trail": <home> / <project> / <view>. | |
64 | [Default: projects] | |
65 | * GITWEB_SITENAME | |
66 | Name of your site or organization to appear in page titles. Set it | |
67 | to something descriptive for clearer bookmarks etc. If not set | |
68 | (if empty) gitweb uses "$SERVER_NAME Git", or "Untitled Git" if | |
69 | SERVER_NAME CGI environment variable is not set (e.g. if running | |
70 | gitweb as standalone script). [No default] | |
71 | * GITWEB_BASE_URL | |
72 | Git base URLs used for URL to where fetch project from, i.e. full | |
73 | URL is "$git_base_url/$project". Shown on projects summary page. | |
74 | Repository URL for project can be also configured per repository; this | |
eae7a759 | 75 | takes precedence over URLs composed from base URL and a project name. |
61fd2552 | 76 | Note that you can setup multiple base URLs (for example one for |
eae7a759 RGS |
77 | git:// protocol access, another for http:// access) from the gitweb |
78 | config file. [No default] | |
5d043a3d | 79 | * GITWEB_CSS |
61fd2552 | 80 | Points to the location where you put gitweb.css on your web server |
eae7a759 RGS |
81 | (or to be more generic, the URI of gitweb stylesheet). Relative to the |
82 | base URI of gitweb. Note that you can setup multiple stylesheets from | |
18d05328 PKS |
83 | the gitweb config file. [Default: static/gitweb.css (or |
84 | static/gitweb.min.css if the CSSMIN variable is defined / CSS minifier | |
85 | is used)] | |
281f2f6b | 86 | * GITWEB_LOGO |
61fd2552 JN |
87 | Points to the location where you put git-logo.png on your web server |
88 | (or to be more generic URI of logo, 72x27 size, displayed in top right | |
89 | corner of each gitweb page, and used as logo for Atom feed). Relative | |
18d05328 | 90 | to base URI of gitweb. [Default: static/git-logo.png] |
61fd2552 JN |
91 | * GITWEB_FAVICON |
92 | Points to the location where you put git-favicon.png on your web server | |
93 | (or to be more generic URI of favicon, assumed to be image/png type; | |
94 | web browsers that support favicons (website icons) may display them | |
95 | in the browser's URL bar and next to site name in bookmarks). Relative | |
18d05328 | 96 | to base URI of gitweb. [Default: static/git-favicon.png] |
4af819d4 | 97 | * GITWEB_JS |
22e5e58a | 98 | Points to the location where you put gitweb.js on your web server |
4af819d4 | 99 | (or to be more generic URI of JavaScript code used by gitweb). |
18d05328 PKS |
100 | Relative to base URI of gitweb. [Default: static/gitweb.js (or |
101 | static/gitweb.min.js if JSMIN build variable is defined / JavaScript | |
102 | minifier is used)] | |
bb55f77f | 103 | * GITWEB_CONFIG |
61fd2552 JN |
104 | This Perl file will be loaded using 'do' and can be used to override any |
105 | of the options above as well as some other options -- see the "Runtime | |
106 | gitweb configuration" section below, and top of 'gitweb.cgi' for their | |
107 | full list and description. If the environment variable GITWEB_CONFIG | |
108 | is set when gitweb.cgi is executed, then the file specified in the | |
109 | environment variable will be loaded instead of the file specified | |
110 | when gitweb.cgi was created. [Default: gitweb_config.perl] | |
17a8b250 GP |
111 | * GITWEB_CONFIG_SYSTEM |
112 | This Perl file will be loaded using 'do' as a fallback if GITWEB_CONFIG | |
113 | does not exist. If the environment variable GITWEB_CONFIG_SYSTEM is set | |
114 | when gitweb.cgi is executed, then the file specified in the environment | |
115 | variable will be loaded instead of the file specified when gitweb.cgi was | |
116 | created. [Default: /etc/gitweb.conf] | |
7ce896b3 CW |
117 | * HIGHLIGHT_BIN |
118 | Path to the highlight executable to use (must be the one from | |
119 | http://www.andre-simon.de due to assumptions about parameters and output). | |
120 | Useful if highlight is not installed on your webserver's PATH. | |
121 | [Default: highlight] | |
5d043a3d | 122 | |
128eead1 | 123 | |
45a3b12c PB |
124 | Runtime gitweb configuration |
125 | ---------------------------- | |
126 | ||
127 | You can adjust gitweb behaviour using the file specified in `GITWEB_CONFIG` | |
17a8b250 GP |
128 | (defaults to 'gitweb_config.perl' in the same directory as the CGI), and |
129 | as a fallback `GITWEB_CONFIG_SYSTEM` (defaults to /etc/gitweb.conf). | |
45a3b12c | 130 | The most notable thing that is not configurable at compile time are the |
61fd2552 JN |
131 | optional features, stored in the '%features' variable. |
132 | ||
133 | Ultimate description on how to reconfigure the default features setting | |
134 | in your `GITWEB_CONFIG` or per-project in `project.git/config` can be found | |
135 | as comments inside 'gitweb.cgi'. | |
136 | ||
eae7a759 RGS |
137 | See also the "Gitweb config file" (with an example of config file), and |
138 | the "Gitweb repositories" sections in INSTALL file for gitweb. | |
61fd2552 JN |
139 | |
140 | ||
eae7a759 | 141 | The gitweb config file is a fragment of perl code. You can set variables |
61fd2552 JN |
142 | using "our $variable = value"; text from "#" character until the end |
143 | of a line is ignored. See perlsyn(1) man page for details. | |
144 | ||
eae7a759 | 145 | Below is the list of variables which you might want to set in gitweb config. |
61fd2552 JN |
146 | See the top of 'gitweb.cgi' for the full list of variables and their |
147 | descriptions. | |
148 | ||
149 | Gitweb config file variables | |
150 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
151 | ||
d661146a JN |
152 | You can set, among others, the following variables in gitweb config files |
153 | (with the exception of $projectroot and $projects_list this list does | |
154 | not include variables usually directly set during build): | |
61fd2552 | 155 | * $GIT |
eae7a759 | 156 | Core git executable to use. By default set to "$GIT_BINDIR/git", which |
61fd2552 JN |
157 | in turn is by default set to "$(bindir)/git". If you use git from binary |
158 | package, set this to "/usr/bin/git". This can just be "git" if your | |
159 | webserver has a sensible PATH. If you have multiple git versions | |
d661146a | 160 | installed it can be used to choose which one to use. |
61fd2552 JN |
161 | * $version |
162 | Gitweb version, set automatically when creating gitweb.cgi from | |
163 | gitweb.perl. You might want to modify it if you are running modified | |
164 | gitweb. | |
d661146a JN |
165 | * $projectroot |
166 | Absolute filesystem path which will be prepended to project path; | |
167 | the path to repository is $projectroot/$project. Set to | |
168 | $GITWEB_PROJECTROOT during installation. This variable have to be | |
169 | set correctly for gitweb to find repositories. | |
170 | * $projects_list | |
171 | Source of projects list, either directory to scan, or text file | |
e67c9e39 JN |
172 | with list of repositories (in the "<URI-encoded repository path> SP |
173 | <URI-encoded repository owner>" line format; actually there can be | |
174 | any sequence of whitespace in place of space (SP)). Set to | |
175 | $GITWEB_LIST during installation. If empty, $projectroot is used | |
176 | to scan for repositories. | |
61fd2552 | 177 | * $my_url, $my_uri |
e80f97e2 JN |
178 | Full URL and absolute URL of gitweb script; |
179 | in earlier versions of gitweb you might have need to set those | |
b3f52a9c JN |
180 | variables, now there should be no need to do it. See |
181 | $per_request_config if you need to set them still. | |
46068383 JN |
182 | * $base_url |
183 | Base URL for relative URLs in pages generated by gitweb, | |
184 | (e.g. $logo, $favicon, @stylesheets if they are relative URLs), | |
185 | needed and used only for URLs with nonempty PATH_INFO via | |
b62a1a98 | 186 | <base href="$base_url">. Usually gitweb sets its value correctly, |
46068383 | 187 | and there is no need to set this variable, e.g. to $my_uri or "/". |
b3f52a9c | 188 | See $per_request_config if you need to set it anyway. |
61fd2552 JN |
189 | * $home_link |
190 | Target of the home link on top of all pages (the first part of view | |
e80f97e2 | 191 | "breadcrumbs"). By default set to absolute URI of a page ($my_uri). |
61fd2552 JN |
192 | * @stylesheets |
193 | List of URIs of stylesheets (relative to base URI of a page). You | |
194 | might specify more than one stylesheet, for example use gitweb.css | |
195 | as base, with site specific modifications in separate stylesheet | |
196 | to make it easier to upgrade gitweb. You can add 'site' stylesheet | |
197 | for example by using | |
198 | push @stylesheets, "gitweb-site.css"; | |
eae7a759 | 199 | in the gitweb config file. |
61fd2552 JN |
200 | * $logo_url, $logo_label |
201 | URI and label (title) of GIT logo link (or your site logo, if you choose | |
202 | to use different logo image). By default they point to git homepage; | |
203 | in the past they pointed to git documentation at www.kernel.org. | |
204 | * $projects_list_description_width | |
205 | The width (in characters) of the projects list "Description" column. | |
206 | Longer descriptions will be cut (trying to cut at word boundary); | |
207 | full description is available as 'title' attribute (usually shown on | |
208 | mouseover). By default set to 25, which might be too small if you | |
209 | use long project descriptions. | |
210 | * @git_base_url_list | |
211 | List of git base URLs used for URL to where fetch project from, shown | |
212 | in project summary page. Full URL is "$git_base_url/$project". | |
213 | You can setup multiple base URLs (for example one for git:// protocol | |
214 | access, and one for http:// "dumb" protocol access). Note that per | |
215 | repository configuration in 'cloneurl' file, or as values of gitweb.url | |
216 | project config. | |
217 | * $default_blob_plain_mimetype | |
218 | Default mimetype for blob_plain (raw) view, if mimetype checking | |
219 | doesn't result in some other type; by default 'text/plain'. | |
220 | * $default_text_plain_charset | |
eae7a759 | 221 | Default charset for text files. If not set, web server configuration |
61fd2552 JN |
222 | would be used. |
223 | * $mimetypes_file | |
224 | File to use for (filename extension based) guessing of MIME types before | |
eae7a759 RGS |
225 | trying /etc/mime.types. Path, if relative, is taken currently as |
226 | relative to the current git repository. | |
61fd2552 JN |
227 | * $fallback_encoding |
228 | Gitweb assumes this charset if line contains non-UTF-8 characters. | |
229 | Fallback decoding is used without error checking, so it can be even | |
680ebc01 | 230 | 'utf-8'. Value must be valid encoding; see Encoding::Supported(3pm) man |
61fd2552 JN |
231 | page for a list. By default 'latin1', aka. 'iso-8859-1'. |
232 | * @diff_opts | |
233 | Rename detection options for git-diff and git-diff-tree. By default | |
234 | ('-M'); set it to ('-C') or ('-C', '-C') to also detect copies, or | |
235 | set it to () if you don't want to have renames detection. | |
7e1100e9 MM |
236 | * $prevent_xss |
237 | If true, some gitweb features are disabled to prevent content in | |
238 | repositories from launching cross-site scripting (XSS) attacks. Set this | |
239 | to true if you don't trust the content of your repositories. The default | |
240 | is false. | |
b62a1a98 JWH |
241 | * $maxload |
242 | Used to set the maximum load that we will still respond to gitweb queries. | |
22e5e58a | 243 | If server load exceed this value then return "503 Service Unavailable" error. |
b62a1a98 JWH |
244 | Server load is taken to be 0 if gitweb cannot determine its value. Set it to |
245 | undefined value to turn it off. The default is 300. | |
7ce896b3 CW |
246 | * $highlight_bin |
247 | Path to the highlight executable to use (must be the one from | |
248 | http://www.andre-simon.de due to assumptions about parameters and output). | |
249 | Useful if highlight is not installed on your webserver's PATH. | |
250 | [Default: highlight] | |
da4b2432 JN |
251 | * $per_request_config |
252 | If set to code reference, it would be run once per each request. You can | |
253 | set parts of configuration that change per session, e.g. by setting it to | |
254 | sub { $ENV{GL_USER} = $cgi->remote_user || "gitweb"; } | |
255 | Otherwise it is treated as boolean value: if true gitweb would process | |
256 | config file once per request, if false it would process config file only | |
b3f52a9c JN |
257 | once. Note: $my_url, $my_uri, and $base_url are overwritten with |
258 | their default values before every request, so if you want to change | |
259 | them, be sure to set this variable to true or a code reference effecting | |
260 | the desired changes. The default is true. | |
e67c9e39 JN |
261 | |
262 | Projects list file format | |
263 | ~~~~~~~~~~~~~~~~~~~~~~~~~ | |
264 | ||
265 | Instead of having gitweb find repositories by scanning filesystem starting | |
266 | from $projectroot (or $projects_list, if it points to directory), you can | |
267 | provide list of projects by setting $projects_list to a text file with list | |
268 | of projects (and some additional info). This file uses the following | |
269 | format: | |
270 | ||
271 | One record (for project / repository) per line, whitespace separated fields; | |
272 | does not support (at least for now) lines continuation (newline escaping). | |
273 | Leading and trailing whitespace are ignored, any run of whitespace can be | |
274 | used as field separator (rules for Perl's "split(' ', $line)"). Keyed by | |
275 | the first field, which is project name, i.e. path to repository GIT_DIR | |
276 | relative to $projectroot. Fields use modified URI encoding, defined in | |
277 | RFC 3986, section 2.1 (Percent-Encoding), or rather "Query string encoding" | |
278 | (see http://en.wikipedia.org/wiki/Query_string#URL_encoding), the difference | |
279 | being that SP (' ') can be encoded as '+' (and therefore '+' has to be also | |
280 | percent-encoded). Reserved characters are: '%' (used for encoding), '+' | |
281 | (can be used to encode SPACE), all whitespace characters as defined in Perl, | |
282 | including SP, TAB and LF, (used to separate fields in a record). | |
283 | ||
284 | Currently list of fields is | |
285 | * <repository path> - path to repository GIT_DIR, relative to $projectroot | |
286 | * <repository owner> - displayed as repository owner, preferably full name, | |
287 | or email, or both | |
288 | ||
289 | You can additionally use $projects_list file to limit which repositories | |
290 | are visible, and together with $strict_export to limit access to | |
291 | repositories (see "Gitweb repositories" section in gitweb/INSTALL). | |
292 | ||
293 | ||
61fd2552 JN |
294 | Per-repository gitweb configuration |
295 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
296 | ||
297 | You can also configure individual repositories shown in gitweb by creating | |
298 | file in the GIT_DIR of git repository, or by setting some repo configuration | |
299 | variable (in GIT_DIR/config). | |
300 | ||
301 | You can use the following files in repository: | |
302 | * README.html | |
303 | A .html file (HTML fragment) which is included on the gitweb project | |
304 | summary page inside <div> block element. You can use it for longer | |
e67c9e39 | 305 | description of a project, to provide links (for example to project's |
7e1100e9 MM |
306 | homepage), etc. This is recognized only if XSS prevention is off |
307 | ($prevent_xss is false); a way to include a readme safely when XSS | |
308 | prevention is on may be worked out in the future. | |
61fd2552 JN |
309 | * description (or gitweb.description) |
310 | Short (shortened by default to 25 characters in the projects list page) | |
311 | single line description of a project (of a repository). Plain text file; | |
312 | HTML will be escaped. By default set to | |
313 | Unnamed repository; edit this file to name it for gitweb. | |
eae7a759 | 314 | from the template during repository creation. You can use the |
61fd2552 | 315 | gitweb.description repo configuration variable, but the file takes |
eae7a759 | 316 | precedence. |
61fd2552 JN |
317 | * cloneurl (or multiple-valued gitweb.url) |
318 | File with repository URL (used for clone and fetch), one per line. | |
319 | Displayed in the project summary page. You can use multiple-valued | |
320 | gitweb.url repository configuration variable for that, but the file | |
eae7a759 | 321 | takes precedence. |
b59012ef BR |
322 | * gitweb.owner |
323 | You can use the gitweb.owner repository configuration variable to set | |
324 | repository's owner. It is displayed in the project list and summary | |
ef115e26 JN |
325 | page. If it's not set, filesystem directory's owner is used |
326 | (via GECOS field / real name field from getpwiud(3)). | |
61fd2552 JN |
327 | * various gitweb.* config variables (in config) |
328 | Read description of %feature hash for detailed list, and some | |
329 | descriptions. | |
45a3b12c PB |
330 | |
331 | ||
128eead1 MW |
332 | Webserver configuration |
333 | ----------------------- | |
334 | ||
335 | If you want to have one URL for both gitweb and your http:// | |
336 | repositories, you can configure apache like this: | |
337 | ||
55f409a8 | 338 | <VirtualHost *:80> |
964ad928 SR |
339 | ServerName git.example.org |
340 | DocumentRoot /pub/git | |
341 | SetEnv GITWEB_CONFIG /etc/gitweb.conf | |
342 | ||
343 | # turning on mod rewrite | |
55f409a8 | 344 | RewriteEngine on |
964ad928 | 345 | |
55f409a8 ABH |
346 | # make the front page an internal rewrite to the gitweb script |
347 | RewriteRule ^/$ /cgi-bin/gitweb.cgi | |
964ad928 | 348 | |
55f409a8 ABH |
349 | # make access for "dumb clients" work |
350 | RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI} [L,PT] | |
128eead1 MW |
351 | </VirtualHost> |
352 | ||
353 | The above configuration expects your public repositories to live under | |
354 | /pub/git and will serve them as http://git.domain.org/dir-under-pub-git, | |
355 | both as cloneable GIT URL and as browseable gitweb interface. | |
356 | If you then start your git-daemon with --base-path=/pub/git --export-all | |
357 | then you can even use the git:// URL with exactly the same path. | |
358 | ||
604cb211 AC |
359 | Setting the environment variable GITWEB_CONFIG will tell gitweb to use |
360 | the named file (i.e. in this example /etc/gitweb.conf) as a | |
361 | configuration for gitweb. Perl variables defined in here will | |
362 | override the defaults given at the head of the gitweb.perl (or | |
363 | gitweb.cgi). Look at the comments in that file for information on | |
364 | which variables and what they mean. | |
128eead1 | 365 | |
55f409a8 ABH |
366 | If you use the rewrite rules from the example you'll likely also need |
367 | something like the following in your gitweb.conf (or gitweb_config.perl) file: | |
368 | ||
369 | @stylesheets = ("/some/absolute/path/gitweb.css"); | |
370 | $my_uri = "/"; | |
371 | $home_link = "/"; | |
372 | ||
128eead1 | 373 | |
964ad928 SR |
374 | Webserver configuration with multiple projects' root |
375 | ---------------------------------------------------- | |
376 | ||
377 | If you want to use gitweb with several project roots you can edit your apache | |
378 | virtual host and gitweb.conf configuration files like this : | |
379 | ||
380 | virtual host configuration : | |
381 | ||
382 | <VirtualHost *:80> | |
383 | ServerName git.example.org | |
384 | DocumentRoot /pub/git | |
385 | SetEnv GITWEB_CONFIG /etc/gitweb.conf | |
386 | ||
387 | # turning on mod rewrite | |
388 | RewriteEngine on | |
389 | ||
390 | # make the front page an internal rewrite to the gitweb script | |
391 | RewriteRule ^/$ /cgi-bin/gitweb.cgi [QSA,L,PT] | |
392 | ||
393 | # look for a public_git folder in unix users' home | |
394 | # http://git.example.org/~<user>/ | |
395 | RewriteRule ^/\~([^\/]+)(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi [QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT] | |
396 | ||
397 | # http://git.example.org/+<user>/ | |
398 | #RewriteRule ^/\+([^\/]+)(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi [QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT] | |
399 | ||
400 | # http://git.example.org/user/<user>/ | |
401 | #RewriteRule ^/user/([^\/]+)/(gitweb.cgi)?$ /cgi-bin/gitweb.cgi [QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT] | |
402 | ||
403 | # defined list of project roots | |
404 | RewriteRule ^/scm(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi [QSA,E=GITWEB_PROJECTROOT:/pub/scm/,L,PT] | |
405 | RewriteRule ^/var(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi [QSA,E=GITWEB_PROJECTROOT:/var/git/,L,PT] | |
406 | ||
407 | # make access for "dumb clients" work | |
408 | RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI} [L,PT] | |
409 | </VirtualHost> | |
410 | ||
411 | gitweb.conf configuration : | |
412 | ||
413 | $projectroot = $ENV{'GITWEB_PROJECTROOT'} || "/pub/git"; | |
414 | ||
415 | These configurations enable two things. First, each unix user (<user>) of the | |
416 | server will be able to browse through gitweb git repositories found in | |
417 | ~/public_git/ with the following url : http://git.example.org/~<user>/ | |
418 | ||
419 | If you do not want this feature on your server just remove the second rewrite rule. | |
420 | ||
421 | If you already use mod_userdir in your virtual host or you don't want to use | |
422 | the '~' as first character just comment or remove the second rewrite rule and | |
423 | uncomment one of the following according to what you want. | |
424 | ||
425 | Second, repositories found in /pub/scm/ and /var/git/ will be accesible | |
426 | through http://git.example.org/scm/ and http://git.example.org/var/. | |
427 | You can add as many project roots as you want by adding rewrite rules like the | |
428 | third and the fourth. | |
429 | ||
430 | ||
0dbf027a GB |
431 | PATH_INFO usage |
432 | ----------------------- | |
433 | If you enable PATH_INFO usage in gitweb by putting | |
434 | ||
435 | $feature{'pathinfo'}{'default'} = [1]; | |
436 | ||
437 | in your gitweb.conf, it is possible to set up your server so that it | |
438 | consumes and produces URLs in the form | |
439 | ||
440 | http://git.example.com/project.git/shortlog/sometag | |
441 | ||
442 | by using a configuration such as the following, that assumes that | |
443 | /var/www/gitweb is the DocumentRoot of your webserver, and that it | |
444 | contains the gitweb.cgi script and complementary static files | |
445 | (stylesheet, favicon): | |
446 | ||
447 | <VirtualHost *:80> | |
448 | ServerAlias git.example.com | |
449 | ||
450 | DocumentRoot /var/www/gitweb | |
451 | ||
452 | <Directory /var/www/gitweb> | |
453 | Options ExecCGI | |
454 | AddHandler cgi-script cgi | |
455 | ||
456 | DirectoryIndex gitweb.cgi | |
457 | ||
458 | RewriteEngine On | |
459 | RewriteCond %{REQUEST_FILENAME} !-f | |
460 | RewriteCond %{REQUEST_FILENAME} !-d | |
461 | RewriteRule ^.* /gitweb.cgi/$0 [L,PT] | |
462 | </Directory> | |
463 | </VirtualHost> | |
464 | ||
465 | The rewrite rule guarantees that existing static files will be properly | |
466 | served, whereas any other URL will be passed to gitweb as PATH_INFO | |
467 | parameter. | |
468 | ||
469 | Notice that in this case you don't need special settings for | |
470 | @stylesheets, $my_uri and $home_link, but you lose "dumb client" access | |
471 | to your project .git dirs. A possible workaround for the latter is the | |
472 | following: in your project root dir (e.g. /pub/git) have the projects | |
473 | named without a .git extension (e.g. /pub/git/project instead of | |
474 | /pub/git/project.git) and configure Apache as follows: | |
475 | ||
476 | <VirtualHost *:80> | |
477 | ServerAlias git.example.com | |
478 | ||
479 | DocumentRoot /var/www/gitweb | |
480 | ||
1bed73c6 | 481 | AliasMatch ^(/.*?)(\.git)(/.*)?$ /pub/git$1$3 |
0dbf027a GB |
482 | <Directory /var/www/gitweb> |
483 | Options ExecCGI | |
484 | AddHandler cgi-script cgi | |
485 | ||
486 | DirectoryIndex gitweb.cgi | |
487 | ||
488 | RewriteEngine On | |
489 | RewriteCond %{REQUEST_FILENAME} !-f | |
490 | RewriteCond %{REQUEST_FILENAME} !-d | |
491 | RewriteRule ^.* /gitweb.cgi/$0 [L,PT] | |
492 | </Directory> | |
493 | </VirtualHost> | |
494 | ||
495 | The additional AliasMatch makes it so that | |
496 | ||
497 | http://git.example.com/project.git | |
498 | ||
499 | will give raw access to the project's git dir (so that the project can | |
500 | be cloned), while | |
501 | ||
502 | http://git.example.com/project | |
503 | ||
504 | will provide human-friendly gitweb access. | |
505 | ||
1bed73c6 GB |
506 | This solution is not 100% bulletproof, in the sense that if some project |
507 | has a named ref (branch, tag) starting with 'git/', then paths such as | |
508 | ||
509 | http://git.example.com/project/command/abranch..git/abranch | |
510 | ||
511 | will fail with a 404 error. | |
512 | ||
513 | ||
0dbf027a | 514 | |
ee0d3234 | 515 | Originally written by: |
0a8f4f00 | 516 | Kay Sievers <kay.sievers@vrfy.org> |
ee0d3234 JH |
517 | |
518 | Any comment/question/concern to: | |
519 | Git mailing list <git@vger.kernel.org> |