Autogenerated HTML docs for v1.7.6-rc1
[git/jnareb-git.git] / git-http-backend.html
blob25c5d1fe59c90070a18b687b5eec52c39fe2af7e
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
4 <head>
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6 <meta name="generator" content="AsciiDoc 8.4.5" />
7 <title>git-http-backend(1)</title>
8 <style type="text/css">
9 /* Debug borders */
10 p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
12 border: 1px solid red;
16 body {
17 margin: 1em 5% 1em 5%;
20 a {
21 color: blue;
22 text-decoration: underline;
24 a:visited {
25 color: fuchsia;
28 em {
29 font-style: italic;
30 color: navy;
33 strong {
34 font-weight: bold;
35 color: #083194;
38 tt {
39 color: navy;
42 h1, h2, h3, h4, h5, h6 {
43 color: #527bbd;
44 font-family: sans-serif;
45 margin-top: 1.2em;
46 margin-bottom: 0.5em;
47 line-height: 1.3;
50 h1, h2, h3 {
51 border-bottom: 2px solid silver;
53 h2 {
54 padding-top: 0.5em;
56 h3 {
57 float: left;
59 h3 + * {
60 clear: left;
63 div.sectionbody {
64 font-family: serif;
65 margin-left: 0;
68 hr {
69 border: 1px solid silver;
72 p {
73 margin-top: 0.5em;
74 margin-bottom: 0.5em;
77 ul, ol, li > p {
78 margin-top: 0;
81 pre {
82 padding: 0;
83 margin: 0;
86 span#author {
87 color: #527bbd;
88 font-family: sans-serif;
89 font-weight: bold;
90 font-size: 1.1em;
92 span#email {
94 span#revnumber, span#revdate, span#revremark {
95 font-family: sans-serif;
98 div#footer {
99 font-family: sans-serif;
100 font-size: small;
101 border-top: 2px solid silver;
102 padding-top: 0.5em;
103 margin-top: 4.0em;
105 div#footer-text {
106 float: left;
107 padding-bottom: 0.5em;
109 div#footer-badges {
110 float: right;
111 padding-bottom: 0.5em;
114 div#preamble {
115 margin-top: 1.5em;
116 margin-bottom: 1.5em;
118 div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
119 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
120 div.admonitionblock {
121 margin-top: 1.5em;
122 margin-bottom: 1.5em;
124 div.admonitionblock {
125 margin-top: 2.5em;
126 margin-bottom: 2.5em;
129 div.content { /* Block element content. */
130 padding: 0;
133 /* Block element titles. */
134 div.title, caption.title {
135 color: #527bbd;
136 font-family: sans-serif;
137 font-weight: bold;
138 text-align: left;
139 margin-top: 1.0em;
140 margin-bottom: 0.5em;
142 div.title + * {
143 margin-top: 0;
146 td div.title:first-child {
147 margin-top: 0.0em;
149 div.content div.title:first-child {
150 margin-top: 0.0em;
152 div.content + div.title {
153 margin-top: 0.0em;
156 div.sidebarblock > div.content {
157 background: #ffffee;
158 border: 1px solid silver;
159 padding: 0.5em;
162 div.listingblock > div.content {
163 border: 1px solid silver;
164 background: #f4f4f4;
165 padding: 0.5em;
168 div.quoteblock {
169 padding-left: 2.0em;
170 margin-right: 10%;
172 div.quoteblock > div.attribution {
173 padding-top: 0.5em;
174 text-align: right;
177 div.verseblock {
178 padding-left: 2.0em;
179 margin-right: 10%;
181 div.verseblock > div.content {
182 white-space: pre;
184 div.verseblock > div.attribution {
185 padding-top: 0.75em;
186 text-align: left;
188 /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
189 div.verseblock + div.attribution {
190 text-align: left;
193 div.admonitionblock .icon {
194 vertical-align: top;
195 font-size: 1.1em;
196 font-weight: bold;
197 text-decoration: underline;
198 color: #527bbd;
199 padding-right: 0.5em;
201 div.admonitionblock td.content {
202 padding-left: 0.5em;
203 border-left: 2px solid silver;
206 div.exampleblock > div.content {
207 border-left: 2px solid silver;
208 padding: 0.5em;
211 div.imageblock div.content { padding-left: 0; }
212 span.image img { border-style: none; }
213 a.image:visited { color: white; }
215 dl {
216 margin-top: 0.8em;
217 margin-bottom: 0.8em;
219 dt {
220 margin-top: 0.5em;
221 margin-bottom: 0;
222 font-style: normal;
223 color: navy;
225 dd > *:first-child {
226 margin-top: 0.1em;
229 ul, ol {
230 list-style-position: outside;
232 ol.arabic {
233 list-style-type: decimal;
235 ol.loweralpha {
236 list-style-type: lower-alpha;
238 ol.upperalpha {
239 list-style-type: upper-alpha;
241 ol.lowerroman {
242 list-style-type: lower-roman;
244 ol.upperroman {
245 list-style-type: upper-roman;
248 div.compact ul, div.compact ol,
249 div.compact p, div.compact p,
250 div.compact div, div.compact div {
251 margin-top: 0.1em;
252 margin-bottom: 0.1em;
255 div.tableblock > table {
256 border: 3px solid #527bbd;
258 thead {
259 font-family: sans-serif;
260 font-weight: bold;
262 tfoot {
263 font-weight: bold;
265 td > div.verse {
266 white-space: pre;
268 p.table {
269 margin-top: 0;
271 /* Because the table frame attribute is overriden by CSS in most browsers. */
272 div.tableblock > table[frame="void"] {
273 border-style: none;
275 div.tableblock > table[frame="hsides"] {
276 border-left-style: none;
277 border-right-style: none;
279 div.tableblock > table[frame="vsides"] {
280 border-top-style: none;
281 border-bottom-style: none;
285 div.hdlist {
286 margin-top: 0.8em;
287 margin-bottom: 0.8em;
289 div.hdlist tr {
290 padding-bottom: 15px;
292 dt.hdlist1.strong, td.hdlist1.strong {
293 font-weight: bold;
295 td.hdlist1 {
296 vertical-align: top;
297 font-style: normal;
298 padding-right: 0.8em;
299 color: navy;
301 td.hdlist2 {
302 vertical-align: top;
304 div.hdlist.compact tr {
305 margin: 0;
306 padding-bottom: 0;
309 .comment {
310 background: yellow;
313 @media print {
314 div#footer-badges { display: none; }
317 div#toctitle {
318 color: #527bbd;
319 font-family: sans-serif;
320 font-size: 1.1em;
321 font-weight: bold;
322 margin-top: 1.0em;
323 margin-bottom: 0.1em;
326 div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
327 margin-top: 0;
328 margin-bottom: 0;
330 div.toclevel2 {
331 margin-left: 2em;
332 font-size: 0.9em;
334 div.toclevel3 {
335 margin-left: 4em;
336 font-size: 0.9em;
338 div.toclevel4 {
339 margin-left: 6em;
340 font-size: 0.9em;
342 /* Overrides for manpage documents */
343 h1 {
344 padding-top: 0.5em;
345 padding-bottom: 0.5em;
346 border-top: 2px solid silver;
347 border-bottom: 2px solid silver;
349 h2 {
350 border-style: none;
352 div.sectionbody {
353 margin-left: 5%;
356 @media print {
357 div#toc { display: none; }
360 /* Workarounds for IE6's broken and incomplete CSS2. */
362 div.sidebar-content {
363 background: #ffffee;
364 border: 1px solid silver;
365 padding: 0.5em;
367 div.sidebar-title, div.image-title {
368 color: #527bbd;
369 font-family: sans-serif;
370 font-weight: bold;
371 margin-top: 0.0em;
372 margin-bottom: 0.5em;
375 div.listingblock div.content {
376 border: 1px solid silver;
377 background: #f4f4f4;
378 padding: 0.5em;
381 div.quoteblock-attribution {
382 padding-top: 0.5em;
383 text-align: right;
386 div.verseblock-content {
387 white-space: pre;
389 div.verseblock-attribution {
390 padding-top: 0.75em;
391 text-align: left;
394 div.exampleblock-content {
395 border-left: 2px solid silver;
396 padding-left: 0.5em;
399 /* IE6 sets dynamically generated links as visited. */
400 div#toc a:visited { color: blue; }
401 </style>
402 </head>
403 <body>
404 <div id="header">
405 <h1>
406 git-http-backend(1) Manual Page
407 </h1>
408 <h2>NAME</h2>
409 <div class="sectionbody">
410 <p>git-http-backend -
411 Server side implementation of Git over HTTP
412 </p>
413 </div>
414 </div>
415 <h2 id="_synopsis">SYNOPSIS</h2>
416 <div class="sectionbody">
417 <div class="verseblock">
418 <div class="verseblock-content"><em>git http-backend</em></div>
419 <div class="verseblock-attribution">
420 </div></div>
421 </div>
422 <h2 id="_description">DESCRIPTION</h2>
423 <div class="sectionbody">
424 <div class="paragraph"><p>A simple CGI program to serve the contents of a Git repository to Git
425 clients accessing the repository over http:// and https:// protocols.
426 The program supports clients fetching using both the smart HTTP protocol
427 and the backwards-compatible dumb HTTP protocol, as well as clients
428 pushing using the smart HTTP protocol.</p></div>
429 <div class="paragraph"><p>It verifies that the directory has the magic file
430 "git-daemon-export-ok", and it will refuse to export any git directory
431 that hasn&#8217;t explicitly been marked for export this way (unless the
432 GIT_HTTP_EXPORT_ALL environmental variable is set).</p></div>
433 <div class="paragraph"><p>By default, only the <tt>upload-pack</tt> service is enabled, which serves
434 <em>git fetch-pack</em> and <em>git ls-remote</em> clients, which are invoked from
435 <em>git fetch</em>, <em>git pull</em>, and <em>git clone</em>. If the client is authenticated,
436 the <tt>receive-pack</tt> service is enabled, which serves <em>git send-pack</em>
437 clients, which is invoked from <em>git push</em>.</p></div>
438 </div>
439 <h2 id="_services">SERVICES</h2>
440 <div class="sectionbody">
441 <div class="paragraph"><p>These services can be enabled/disabled using the per-repository
442 configuration file:</p></div>
443 <div class="dlist"><dl>
444 <dt class="hdlist1">
445 http.getanyfile
446 </dt>
447 <dd>
449 This serves Git clients older than version 1.6.6 that are unable to use the
450 upload pack service. When enabled, clients are able to read
451 any file within the repository, including objects that are
452 no longer reachable from a branch but are still present.
453 It is enabled by default, but a repository can disable it
454 by setting this configuration item to <tt>false</tt>.
455 </p>
456 </dd>
457 <dt class="hdlist1">
458 http.uploadpack
459 </dt>
460 <dd>
462 This serves <em>git fetch-pack</em> and <em>git ls-remote</em> clients.
463 It is enabled by default, but a repository can disable it
464 by setting this configuration item to <tt>false</tt>.
465 </p>
466 </dd>
467 <dt class="hdlist1">
468 http.receivepack
469 </dt>
470 <dd>
472 This serves <em>git send-pack</em> clients, allowing push. It is
473 disabled by default for anonymous users, and enabled by
474 default for users authenticated by the web server. It can be
475 disabled by setting this item to <tt>false</tt>, or enabled for all
476 users, including anonymous users, by setting it to <tt>true</tt>.
477 </p>
478 </dd>
479 </dl></div>
480 </div>
481 <h2 id="_url_translation">URL TRANSLATION</h2>
482 <div class="sectionbody">
483 <div class="paragraph"><p>To determine the location of the repository on disk, <em>git http-backend</em>
484 concatenates the environment variables PATH_INFO, which is set
485 automatically by the web server, and GIT_PROJECT_ROOT, which must be set
486 manually in the web server configuration. If GIT_PROJECT_ROOT is not
487 set, <em>git http-backend</em> reads PATH_TRANSLATED, which is also set
488 automatically by the web server.</p></div>
489 </div>
490 <h2 id="_examples">EXAMPLES</h2>
491 <div class="sectionbody">
492 <div class="paragraph"><p>All of the following examples map <em>http://$hostname/git/foo/bar.git</em>
493 to <em>/var/www/git/foo/bar.git</em>.</p></div>
494 <div class="dlist"><dl>
495 <dt class="hdlist1">
496 Apache 2.x
497 </dt>
498 <dd>
500 Ensure mod_cgi, mod_alias, and mod_env are enabled, set
501 GIT_PROJECT_ROOT (or DocumentRoot) appropriately, and
502 create a ScriptAlias to the CGI:
503 </p>
504 <div class="listingblock">
505 <div class="content">
506 <pre><tt>SetEnv GIT_PROJECT_ROOT /var/www/git
507 SetEnv GIT_HTTP_EXPORT_ALL
508 ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/</tt></pre>
509 </div></div>
510 <div class="paragraph"><p>To enable anonymous read access but authenticated write access,
511 require authorization with a LocationMatch directive:</p></div>
512 <div class="listingblock">
513 <div class="content">
514 <pre><tt>&lt;LocationMatch "^/git/.*/git-receive-pack$"&gt;
515 AuthType Basic
516 AuthName "Git Access"
517 Require group committers
519 &lt;/LocationMatch&gt;</tt></pre>
520 </div></div>
521 <div class="paragraph"><p>To require authentication for both reads and writes, use a Location
522 directive around the repository, or one of its parent directories:</p></div>
523 <div class="listingblock">
524 <div class="content">
525 <pre><tt>&lt;Location /git/private&gt;
526 AuthType Basic
527 AuthName "Private Git Access"
528 Require group committers
530 &lt;/Location&gt;</tt></pre>
531 </div></div>
532 <div class="paragraph"><p>To serve gitweb at the same url, use a ScriptAliasMatch to only
533 those URLs that <em>git http-backend</em> can handle, and forward the
534 rest to gitweb:</p></div>
535 <div class="listingblock">
536 <div class="content">
537 <pre><tt>ScriptAliasMatch \
538 "(?x)^/git/(.*/(HEAD | \
539 info/refs | \
540 objects/(info/[^/]+ | \
541 [0-9a-f]{2}/[0-9a-f]{38} | \
542 pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
543 git-(upload|receive)-pack))$" \
544 /usr/libexec/git-core/git-http-backend/$1
546 ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/</tt></pre>
547 </div></div>
548 </dd>
549 <dt class="hdlist1">
550 Accelerated static Apache 2.x
551 </dt>
552 <dd>
554 Similar to the above, but Apache can be used to return static
555 files that are stored on disk. On many systems this may
556 be more efficient as Apache can ask the kernel to copy the
557 file contents from the file system directly to the network:
558 </p>
559 <div class="listingblock">
560 <div class="content">
561 <pre><tt>SetEnv GIT_PROJECT_ROOT /var/www/git
563 AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1
564 AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1
565 ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/</tt></pre>
566 </div></div>
567 <div class="paragraph"><p>This can be combined with the gitweb configuration:</p></div>
568 <div class="listingblock">
569 <div class="content">
570 <pre><tt>SetEnv GIT_PROJECT_ROOT /var/www/git
572 AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1
573 AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1
574 ScriptAliasMatch \
575 "(?x)^/git/(.*/(HEAD | \
576 info/refs | \
577 objects/info/[^/]+ | \
578 git-(upload|receive)-pack))$" \
579 /usr/libexec/git-core/git-http-backend/$1
580 ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/</tt></pre>
581 </div></div>
582 </dd>
583 </dl></div>
584 </div>
585 <h2 id="_environment">ENVIRONMENT</h2>
586 <div class="sectionbody">
587 <div class="paragraph"><p><em>git http-backend</em> relies upon the CGI environment variables set
588 by the invoking web server, including:</p></div>
589 <div class="ulist"><ul>
590 <li>
592 PATH_INFO (if GIT_PROJECT_ROOT is set, otherwise PATH_TRANSLATED)
593 </p>
594 </li>
595 <li>
597 REMOTE_USER
598 </p>
599 </li>
600 <li>
602 REMOTE_ADDR
603 </p>
604 </li>
605 <li>
607 CONTENT_TYPE
608 </p>
609 </li>
610 <li>
612 QUERY_STRING
613 </p>
614 </li>
615 <li>
617 REQUEST_METHOD
618 </p>
619 </li>
620 </ul></div>
621 <div class="paragraph"><p>The GIT_HTTP_EXPORT_ALL environmental variable may be passed to
622 <em>git-http-backend</em> to bypass the check for the "git-daemon-export-ok"
623 file in each repository before allowing export of that repository.</p></div>
624 <div class="paragraph"><p>The backend process sets GIT_COMMITTER_NAME to <em>$REMOTE_USER</em> and
625 GIT_COMMITTER_EMAIL to <em>${REMOTE_USER}@http.${REMOTE_ADDR}</em>,
626 ensuring that any reflogs created by <em>git-receive-pack</em> contain some
627 identifying information of the remote user who performed the push.</p></div>
628 <div class="paragraph"><p>All CGI environment variables are available to each of the hooks
629 invoked by the <em>git-receive-pack</em>.</p></div>
630 </div>
631 <h2 id="_author">Author</h2>
632 <div class="sectionbody">
633 <div class="paragraph"><p>Written by Shawn O. Pearce &lt;<a href="mailto:spearce@spearce.org">spearce@spearce.org</a>&gt;.</p></div>
634 </div>
635 <h2 id="_documentation">Documentation</h2>
636 <div class="sectionbody">
637 <div class="paragraph"><p>Documentation by Shawn O. Pearce &lt;<a href="mailto:spearce@spearce.org">spearce@spearce.org</a>&gt;.</p></div>
638 </div>
639 <h2 id="_git">GIT</h2>
640 <div class="sectionbody">
641 <div class="paragraph"><p>Part of the <a href="git.html">git(1)</a> suite</p></div>
642 </div>
643 <div id="footer">
644 <div id="footer-text">
645 Last updated 2010-04-01 04:48:58 UTC
646 </div>
647 </div>
648 </body>
649 </html>