summaryrefslogtreecommitdiffstats
path: root/Documentation/config-gitweb.txt
blob: 00e33a35d35d3f375068bf39f95fa2c61633a782 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
:linkattrs:
== Gitweb Integration

Gerrit Code Review can manage and generate hyperlinks to gitweb,
allowing users to jump from Gerrit content to the same information,
but shown by gitweb.

=== Internal/Managed gitweb

In the internal configuration, Gerrit inspects the request, enforces
its project level access controls, and directly executes `gitweb.cgi`
if the user is authorized to view the page.

To enable the internal configuration, set
link:config-gerrit.html#gitweb.cgi[gitweb.cgi] with the path of the
installed CGI.  This defaults to `/usr/lib/cgi-bin/gitweb.cgi`,
which is a common installation path for the 'gitweb' package on
Linux distributions.

----
  git config -f $site_path/etc/gerrit.config gitweb.type gitweb
  git config -f $site_path/etc/gerrit.config gitweb.cgi /usr/lib/cgi-bin/gitweb.cgi
  git config -f $site_path/etc/gerrit.config --unset gitweb.url
----

Alternatively, if Gerrit is served behind reverse proxy, it can
generate different URLs for gitweb's links (they need to be
rewritten to `<gerrit>/gitweb?args` on the web server). This allows
for serving gitweb under a different URL than the Gerrit instance.
To enable this feature, set both: `gitweb.cgi` and `gitweb.url`.

----
  git config -f $site_path/etc/gerrit.config gitweb.type gitweb
  git config -f $site_path/etc/gerrit.config gitweb.cgi /usr/lib/cgi-bin/gitweb.cgi
  git config -f $site_path/etc/gerrit.config gitweb.url /pretty/path/to/gitweb
----

After updating `'$site_path'/etc/gerrit.config`, the Gerrit server must
be restarted and clients must reload the host page to see the change.

==== Configuration

Most of the gitweb configuration file is handled automatically
by Gerrit Code Review.  Site specific overrides can be placed in
`'$site_path'/etc/gitweb_config.perl`, as this file is loaded as
part of the generated configuration file.

==== Logo and CSS

If the package-manager installed CGI (`/usr/lib/cgi-bin/gitweb.cgi`)
is being used, the stock CSS and logo files will be served from
either `/usr/share/gitweb` or `/var/www`.

Otherwise, Gerrit expects `gitweb.css` and `git-logo.png` to be found
in the same directory as the CGI script itself.  This matches with
the default source code distribution, and most custom installations.

==== Access Control

Access controls for internally managed gitweb page views are enforced
using the standard project READ +1 permission.

Also, in order for a user to be able to view any gitweb information for a
project, the user must be able to read all references (including
refs/meta/config, refs/meta/dashboards/*, etc.). If you have exclusive read
permissions for any references, make sure to include all parties that should be
able to read the gitweb info for any of the branches in that project.

=== External/Unmanaged gitweb

For the external configuration, gitweb runs under the control of an
external web server, and Gerrit access controls are not enforced. Gerrit
provides configuration parameters for integration with gitweb.

[[linuxGitWeb]]
==== Linux Installation

===== Install Gitweb

On Ubuntu:

----
  sudo apt-get install gitweb
----

With Yum:

----
  yum install gitweb
----

===== Configure Gitweb


Update `/etc/gitweb.conf`, add the public GIT repositories:

----
$projectroot = "/var/www/repo/";

# directory to use for temp files
$git_temp = "/tmp";

# target of the home link on top of all pages
#$home_link = $my_uri || "/";

# html text to include at home page
$home_text = "indextext.html";

# file with project list; by default, simply scan the projectroot dir.
$projects_list = $projectroot;

# stylesheet to use
# I took off the prefix / of the following path to put these files inside gitweb directory directly
$stylesheet = "gitweb.css";

# logo to use
$logo = "git-logo.png";

# the favicon
$favicon = "git-favicon.png";
----

==== Configure & Restart Apache Web Server

===== Configure Apache


Link gitweb to `/var/www/gitweb`, check `/etc/gitweb.conf` if unsure of paths:

----
  sudo ln -s /usr/share/gitweb /var/www/gitweb
----

Add the gitweb directory to the Apache configuration by creating a "gitweb"
file inside the Apache conf.d directory:

----
  touch /etc/apache/conf.d/gitweb
----

Add the following to /etc/apache/conf.d/gitweb:

----
Alias /gitweb /var/www/gitweb

Options Indexes FollowSymlinks ExecCGI
DirectoryIndex /cgi-bin/gitweb.cgi
AllowOverride None
----

[NOTE]
This may have already been added by yum/apt-get. If that's the case, leave as
is.

===== Restart the Apache Web Server

----
  sudo /etc/init.d/apache2 restart
----

Now you should be able to view your repository projects online:

link:http://localhost/gitweb[http://localhost/gitweb]

[[WindowsGitWeb]]
==== Windows Installation

Instructions are available for installing the gitweb module distributed with
MsysGit:

link:https://github.com/msysgit/msysgit/wiki/GitWeb[GitWeb,role=external,window=_blank]

If you don't have Apache installed, you can download the appropriate build for
Windows from link:http://www.apachelounge.com/download[apachelounge.org].

After you have installed Apache, you will want to create a link:http://httpd.apache.org/docs/2.0/platform/windows.html#winsvc[new service user
account,role=external,window=_blank] to use with Apache.

If you're still having difficulty setting up permissions, you may find this
tech note useful for configuring Apache Service to run under another account.
You must grant the new account link:http://technet.microsoft.com/en-us/library/cc794944(WS.10).aspx["run as service",role=external,window=_blank] permission:

The gitweb version in msysgit is missing several important and required
perl modules, including CGI.pm. The perl included with the msysgit distro 1.7.8
is broken.. The link:http://groups.google.com/group/msysgit/browse_thread/thread/ba3501f1f0ed95af[unicore folder is missing along with utf8_heavy.pl and CGI.pm,role=external,window=_blank]. You can
verify by checking for perl modules. From an msys console, execute the
following to check:

----
  perl -mCGI -mEncode -mFcntl -mFile::Find -mFile::Basename -e ""
----

You may encounter the following exception:

----
$ perl -mCGI -mEncode -mFcntl -mFile::Find -mFile::Basename -e ""
Can't locate CGI.pm in @INC (@INC contains: /usr/lib/perl5/5.8.8/msys
/usr/lib/p erl5/5.8.8 /usr/lib/perl5/site_perl/5.8.8/msys
/usr/lib/perl5/site_perl/5.8.8 /u sr/lib/perl5/site_perl .). BEGIN
failed--compilation aborted.
----

If you're missing CGI.pm, you'll have to deploy the module to the msys
environment: You will have to retrieve them from the 5.8.8 distro on :

http://strawberryperl.com/releases.html[role=external,window=_blank]

File: strawberry-perl-5.8.8.3.zip

contents: `bin/` `lib/` `site/`

copy the contents of lib into `msysgit/lib/perl5/5.8.8` and overwrite existing files.

==== Enable Gitweb Integration

To enable the external gitweb integration, set
link:config-gerrit.html#gitweb.url[gitweb.url] with the URL of your
gitweb CGI.

The CGI's `$projectroot` should be the same directory as
gerrit.basePath, or a fairly current replica.  If a replica is
being used, ensure it uses a full mirror, so the `+refs/changes/*+`
namespace is available.

----
  git config -f $site_path/etc/gerrit.config gitweb.type gitweb
  git config -f $site_path/etc/gerrit.config --unset gitweb.cgi
  git config -f $site_path/etc/gerrit.config gitweb.url https://gitweb.corporation.com
----

If you're not following the traditional `\{projectName\}.git` project naming conventions,
you will want to customize Gerrit to read them. Add the following:

----
  git config -f $site_path/etc/gerrit.config gitweb.type custom
  git config -f $site_path/etc/gerrit.config gitweb.project ?p=\${project}\;a=summary
  git config -f $site_path/etc/gerrit.config gitweb.revision ?p=\${project}\;a=commit\;h=\${commit}
  git config -f $site_path/etc/gerrit.config gitweb.branch ?p=\${project}\;a=shortlog\;h=\${branch}
  git config -f $site_path/etc/gerrit.config gitweb.roottree ?p=\${project}\;a=tree\;hb=\${commit}
  git config -f $site_path/etc/gerrit.config gitweb.file ?p=\${project}\;hb=\${commit}\;f=\${file}
  git config -f $site_path/etc/gerrit.config gitweb.filehistory ?p=\${project}\;a=history\;hb=\${branch}\;f=\${file}
----

After updating `'$site_path'/etc/gerrit.config`, the Gerrit server must
be restarted and clients must reload the host page to see the change.

Note that when using a custom gitweb configuration, values must be
specified for all of the `project`, `revision`, `branch`, `roottree`,
`file`, and `filehistory` settings, otherwise the configuration will
not be used.

===== Access Control

Gitweb access controls can be implemented using standard web server
access controls.  This isn't typically integrated with Gerrit's own
access controls.  Caution must be taken to ensure the controls are
consistent if access needs to be restricted.

===== Caching Gitweb

If your repository set is large and you are expecting a lot
of users, you may want to look at the caching forks used by
high-traffic sites like kernel.org or repo.or.cz.

=== Alternatives to gitweb
There are other alternatives to gitweb that can also be used with
Gerrit, such as cgit.

cgit can be used by specifying `gitweb.type` to be 'cgit'.

It is also possible to define custom patterns. Gitea can be used
with custom patterns for example:

----
  git config -f $site_path/etc/gerrit.config gitweb.type custom
  git config -f $site_path/etc/gerrit.config gitweb.urlEncode false
  git config -f $site_path/etc/gerrit.config gitweb.linkname gitea
  git config -f $site_path/etc/gerrit.config gitweb.url https://gitea.example.org/
  git config -f $site_path/etc/gerrit.config gitweb.branch ${project}/src/branch/${branch}
  git config -f $site_path/etc/gerrit.config gitweb.file ${project}/src/commit/${hash}/${file}
  git config -f $site_path/etc/gerrit.config gitweb.filehistory ${project}/commits/branch/${branch}/${file}
  git config -f $site_path/etc/gerrit.config gitweb.project ${project}
  git config -f $site_path/etc/gerrit.config gitweb.revision ${project}/commit/${commit}
  git config -f $site_path/etc/gerrit.config gitweb.roottree ${project}/src/commit/${commit}
  git config -f $site_path/etc/gerrit.config gitweb.tag ${project}/src/tag/${tag}
----

=== SEE ALSO

* link:config-gerrit.html#gitweb[Section gitweb]
* link:http://git.zx2c4.com/cgit/about/[cgit,role=external,window=_blank]

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------