| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 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" /> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 6 | <meta name="generator" content="AsciiDoc 8.4.5" /> | 
|  | 7 | <title>git-http-backend(1)</title> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 8 | <style type="text/css"> | 
|  | 9 | /* Debug borders */ | 
|  | 10 | p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 { | 
|  | 11 | /* | 
|  | 12 | border: 1px solid red; | 
|  | 13 | */ | 
|  | 14 | } | 
|  | 15 |  | 
|  | 16 | body { | 
|  | 17 | margin: 1em 5% 1em 5%; | 
|  | 18 | } | 
|  | 19 |  | 
|  | 20 | a { | 
|  | 21 | color: blue; | 
|  | 22 | text-decoration: underline; | 
|  | 23 | } | 
|  | 24 | a:visited { | 
|  | 25 | color: fuchsia; | 
|  | 26 | } | 
|  | 27 |  | 
|  | 28 | em { | 
|  | 29 | font-style: italic; | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 30 | color: navy; | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 31 | } | 
|  | 32 |  | 
|  | 33 | strong { | 
|  | 34 | font-weight: bold; | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 35 | color: #083194; | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 36 | } | 
|  | 37 |  | 
|  | 38 | tt { | 
|  | 39 | color: navy; | 
|  | 40 | } | 
|  | 41 |  | 
|  | 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; | 
|  | 48 | } | 
|  | 49 |  | 
|  | 50 | h1, h2, h3 { | 
|  | 51 | border-bottom: 2px solid silver; | 
|  | 52 | } | 
|  | 53 | h2 { | 
|  | 54 | padding-top: 0.5em; | 
|  | 55 | } | 
|  | 56 | h3 { | 
|  | 57 | float: left; | 
|  | 58 | } | 
|  | 59 | h3 + * { | 
|  | 60 | clear: left; | 
|  | 61 | } | 
|  | 62 |  | 
|  | 63 | div.sectionbody { | 
|  | 64 | font-family: serif; | 
|  | 65 | margin-left: 0; | 
|  | 66 | } | 
|  | 67 |  | 
|  | 68 | hr { | 
|  | 69 | border: 1px solid silver; | 
|  | 70 | } | 
|  | 71 |  | 
|  | 72 | p { | 
|  | 73 | margin-top: 0.5em; | 
|  | 74 | margin-bottom: 0.5em; | 
|  | 75 | } | 
|  | 76 |  | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 77 | ul, ol, li > p { | 
|  | 78 | margin-top: 0; | 
|  | 79 | } | 
|  | 80 |  | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 81 | pre { | 
|  | 82 | padding: 0; | 
|  | 83 | margin: 0; | 
|  | 84 | } | 
|  | 85 |  | 
|  | 86 | span#author { | 
|  | 87 | color: #527bbd; | 
|  | 88 | font-family: sans-serif; | 
|  | 89 | font-weight: bold; | 
|  | 90 | font-size: 1.1em; | 
|  | 91 | } | 
|  | 92 | span#email { | 
|  | 93 | } | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 94 | span#revnumber, span#revdate, span#revremark { | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 95 | font-family: sans-serif; | 
|  | 96 | } | 
|  | 97 |  | 
|  | 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; | 
|  | 104 | } | 
|  | 105 | div#footer-text { | 
|  | 106 | float: left; | 
|  | 107 | padding-bottom: 0.5em; | 
|  | 108 | } | 
|  | 109 | div#footer-badges { | 
|  | 110 | float: right; | 
|  | 111 | padding-bottom: 0.5em; | 
|  | 112 | } | 
|  | 113 |  | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 114 | div#preamble { | 
|  | 115 | margin-top: 1.5em; | 
|  | 116 | margin-bottom: 1.5em; | 
|  | 117 | } | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 118 | div.tableblock, div.imageblock, div.exampleblock, div.verseblock, | 
|  | 119 | div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock, | 
|  | 120 | div.admonitionblock { | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 121 | margin-top: 1.5em; | 
|  | 122 | margin-bottom: 1.5em; | 
|  | 123 | } | 
|  | 124 | div.admonitionblock { | 
|  | 125 | margin-top: 2.5em; | 
|  | 126 | margin-bottom: 2.5em; | 
|  | 127 | } | 
|  | 128 |  | 
|  | 129 | div.content { /* Block element content. */ | 
|  | 130 | padding: 0; | 
|  | 131 | } | 
|  | 132 |  | 
|  | 133 | /* Block element titles. */ | 
|  | 134 | div.title, caption.title { | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 135 | color: #527bbd; | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 136 | font-family: sans-serif; | 
|  | 137 | font-weight: bold; | 
|  | 138 | text-align: left; | 
|  | 139 | margin-top: 1.0em; | 
|  | 140 | margin-bottom: 0.5em; | 
|  | 141 | } | 
|  | 142 | div.title + * { | 
|  | 143 | margin-top: 0; | 
|  | 144 | } | 
|  | 145 |  | 
|  | 146 | td div.title:first-child { | 
|  | 147 | margin-top: 0.0em; | 
|  | 148 | } | 
|  | 149 | div.content div.title:first-child { | 
|  | 150 | margin-top: 0.0em; | 
|  | 151 | } | 
|  | 152 | div.content + div.title { | 
|  | 153 | margin-top: 0.0em; | 
|  | 154 | } | 
|  | 155 |  | 
|  | 156 | div.sidebarblock > div.content { | 
|  | 157 | background: #ffffee; | 
|  | 158 | border: 1px solid silver; | 
|  | 159 | padding: 0.5em; | 
|  | 160 | } | 
|  | 161 |  | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 162 | div.listingblock > div.content { | 
|  | 163 | border: 1px solid silver; | 
|  | 164 | background: #f4f4f4; | 
|  | 165 | padding: 0.5em; | 
|  | 166 | } | 
|  | 167 |  | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 168 | div.quoteblock { | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 169 | padding-left: 2.0em; | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 170 | margin-right: 10%; | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 171 | } | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 172 | div.quoteblock > div.attribution { | 
|  | 173 | padding-top: 0.5em; | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 174 | text-align: right; | 
|  | 175 | } | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 176 |  | 
|  | 177 | div.verseblock { | 
|  | 178 | padding-left: 2.0em; | 
|  | 179 | margin-right: 10%; | 
|  | 180 | } | 
|  | 181 | div.verseblock > div.content { | 
|  | 182 | white-space: pre; | 
|  | 183 | } | 
|  | 184 | div.verseblock > div.attribution { | 
|  | 185 | padding-top: 0.75em; | 
|  | 186 | text-align: left; | 
|  | 187 | } | 
|  | 188 | /* DEPRECATED: Pre version 8.2.7 verse style literal block. */ | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 189 | div.verseblock + div.attribution { | 
|  | 190 | text-align: left; | 
|  | 191 | } | 
|  | 192 |  | 
|  | 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; | 
|  | 200 | } | 
|  | 201 | div.admonitionblock td.content { | 
|  | 202 | padding-left: 0.5em; | 
|  | 203 | border-left: 2px solid silver; | 
|  | 204 | } | 
|  | 205 |  | 
|  | 206 | div.exampleblock > div.content { | 
|  | 207 | border-left: 2px solid silver; | 
|  | 208 | padding: 0.5em; | 
|  | 209 | } | 
|  | 210 |  | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 211 | div.imageblock div.content { padding-left: 0; } | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 212 | span.image img { border-style: none; } | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 213 | a.image:visited { color: white; } | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 214 |  | 
|  | 215 | dl { | 
|  | 216 | margin-top: 0.8em; | 
|  | 217 | margin-bottom: 0.8em; | 
|  | 218 | } | 
|  | 219 | dt { | 
|  | 220 | margin-top: 0.5em; | 
|  | 221 | margin-bottom: 0; | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 222 | font-style: normal; | 
|  | 223 | color: navy; | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 224 | } | 
|  | 225 | dd > *:first-child { | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 226 | margin-top: 0.1em; | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 227 | } | 
|  | 228 |  | 
|  | 229 | ul, ol { | 
|  | 230 | list-style-position: outside; | 
|  | 231 | } | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 232 | ol.arabic { | 
|  | 233 | list-style-type: decimal; | 
|  | 234 | } | 
|  | 235 | ol.loweralpha { | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 236 | list-style-type: lower-alpha; | 
|  | 237 | } | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 238 | ol.upperalpha { | 
|  | 239 | list-style-type: upper-alpha; | 
|  | 240 | } | 
|  | 241 | ol.lowerroman { | 
|  | 242 | list-style-type: lower-roman; | 
|  | 243 | } | 
|  | 244 | ol.upperroman { | 
|  | 245 | list-style-type: upper-roman; | 
|  | 246 | } | 
|  | 247 |  | 
|  | 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; | 
|  | 253 | } | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 254 |  | 
|  | 255 | div.tableblock > table { | 
|  | 256 | border: 3px solid #527bbd; | 
|  | 257 | } | 
|  | 258 | thead { | 
|  | 259 | font-family: sans-serif; | 
|  | 260 | font-weight: bold; | 
|  | 261 | } | 
|  | 262 | tfoot { | 
|  | 263 | font-weight: bold; | 
|  | 264 | } | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 265 | td > div.verse { | 
|  | 266 | white-space: pre; | 
|  | 267 | } | 
|  | 268 | p.table { | 
|  | 269 | margin-top: 0; | 
|  | 270 | } | 
|  | 271 | /* Because the table frame attribute is overriden by CSS in most browsers. */ | 
|  | 272 | div.tableblock > table[frame="void"] { | 
|  | 273 | border-style: none; | 
|  | 274 | } | 
|  | 275 | div.tableblock > table[frame="hsides"] { | 
|  | 276 | border-left-style: none; | 
|  | 277 | border-right-style: none; | 
|  | 278 | } | 
|  | 279 | div.tableblock > table[frame="vsides"] { | 
|  | 280 | border-top-style: none; | 
|  | 281 | border-bottom-style: none; | 
|  | 282 | } | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 283 |  | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 284 |  | 
|  | 285 | div.hdlist { | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 286 | margin-top: 0.8em; | 
|  | 287 | margin-bottom: 0.8em; | 
|  | 288 | } | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 289 | div.hdlist tr { | 
|  | 290 | padding-bottom: 15px; | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 291 | } | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 292 | dt.hdlist1.strong, td.hdlist1.strong { | 
|  | 293 | font-weight: bold; | 
|  | 294 | } | 
|  | 295 | td.hdlist1 { | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 296 | vertical-align: top; | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 297 | font-style: normal; | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 298 | padding-right: 0.8em; | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 299 | color: navy; | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 300 | } | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 301 | td.hdlist2 { | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 302 | vertical-align: top; | 
|  | 303 | } | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 304 | div.hdlist.compact tr { | 
|  | 305 | margin: 0; | 
|  | 306 | padding-bottom: 0; | 
|  | 307 | } | 
|  | 308 |  | 
|  | 309 | .comment { | 
|  | 310 | background: yellow; | 
|  | 311 | } | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 312 |  | 
|  | 313 | @media print { | 
|  | 314 | div#footer-badges { display: none; } | 
|  | 315 | } | 
|  | 316 |  | 
|  | 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; | 
|  | 324 | } | 
|  | 325 |  | 
|  | 326 | div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 { | 
|  | 327 | margin-top: 0; | 
|  | 328 | margin-bottom: 0; | 
|  | 329 | } | 
|  | 330 | div.toclevel2 { | 
|  | 331 | margin-left: 2em; | 
|  | 332 | font-size: 0.9em; | 
|  | 333 | } | 
|  | 334 | div.toclevel3 { | 
|  | 335 | margin-left: 4em; | 
|  | 336 | font-size: 0.9em; | 
|  | 337 | } | 
|  | 338 | div.toclevel4 { | 
|  | 339 | margin-left: 6em; | 
|  | 340 | font-size: 0.9em; | 
|  | 341 | } | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 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; | 
|  | 348 | } | 
|  | 349 | h2 { | 
|  | 350 | border-style: none; | 
|  | 351 | } | 
|  | 352 | div.sectionbody { | 
|  | 353 | margin-left: 5%; | 
|  | 354 | } | 
|  | 355 |  | 
|  | 356 | @media print { | 
|  | 357 | div#toc { display: none; } | 
|  | 358 | } | 
|  | 359 |  | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 360 | /* Workarounds for IE6's broken and incomplete CSS2. */ | 
|  | 361 |  | 
|  | 362 | div.sidebar-content { | 
|  | 363 | background: #ffffee; | 
|  | 364 | border: 1px solid silver; | 
|  | 365 | padding: 0.5em; | 
|  | 366 | } | 
|  | 367 | div.sidebar-title, div.image-title { | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 368 | color: #527bbd; | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 369 | font-family: sans-serif; | 
|  | 370 | font-weight: bold; | 
|  | 371 | margin-top: 0.0em; | 
|  | 372 | margin-bottom: 0.5em; | 
|  | 373 | } | 
|  | 374 |  | 
|  | 375 | div.listingblock div.content { | 
|  | 376 | border: 1px solid silver; | 
|  | 377 | background: #f4f4f4; | 
|  | 378 | padding: 0.5em; | 
|  | 379 | } | 
|  | 380 |  | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 381 | div.quoteblock-attribution { | 
|  | 382 | padding-top: 0.5em; | 
|  | 383 | text-align: right; | 
|  | 384 | } | 
|  | 385 |  | 
|  | 386 | div.verseblock-content { | 
|  | 387 | white-space: pre; | 
|  | 388 | } | 
|  | 389 | div.verseblock-attribution { | 
|  | 390 | padding-top: 0.75em; | 
|  | 391 | text-align: left; | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 392 | } | 
|  | 393 |  | 
|  | 394 | div.exampleblock-content { | 
|  | 395 | border-left: 2px solid silver; | 
|  | 396 | padding-left: 0.5em; | 
|  | 397 | } | 
|  | 398 |  | 
|  | 399 | /* IE6 sets dynamically generated links as visited. */ | 
|  | 400 | div#toc a:visited { color: blue; } | 
|  | 401 | </style> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 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> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 415 | <h2 id="_synopsis">SYNOPSIS</h2> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 416 | <div class="sectionbody"> | 
|  | 417 | <div class="verseblock"> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 418 | <div class="verseblock-content"><em>git http-backend</em></div> | 
|  | 419 | <div class="verseblock-attribution"> | 
|  | 420 | </div></div> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 421 | </div> | 
|  | 422 | <h2 id="_description">DESCRIPTION</h2> | 
|  | 423 | <div class="sectionbody"> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 424 | <div class="paragraph"><p>A simple CGI program to serve the contents of a Git repository to Git | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 425 | clients accessing the repository over http:// and https:// protocols. | 
| Junio C Hamano | 167b138 | 2010-01-31 23:04:31 | [diff] [blame] | 426 | The program supports clients fetching using both the smart HTTP protocol | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 427 | and the backwards-compatible dumb HTTP protocol, as well as clients | 
|  | 428 | pushing using the smart HTTP protocol.</p></div> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 429 | <div class="paragraph"><p>It verifies that the directory has the magic file | 
| Junio C Hamano | 6ce6b6c | 2010-01-18 01:25:50 | [diff] [blame] | 430 | "git-daemon-export-ok", and it will refuse to export any git directory | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 431 | that hasn’t explicitly been marked for export this way (unless the | 
| Junio C Hamano | 6ce6b6c | 2010-01-18 01:25:50 | [diff] [blame] | 432 | GIT_HTTP_EXPORT_ALL environmental variable is set).</p></div> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 433 | <div class="paragraph"><p>By default, only the <tt>upload-pack</tt> service is enabled, which serves | 
| Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 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> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 438 | </div> | 
|  | 439 | <h2 id="_services">SERVICES</h2> | 
|  | 440 | <div class="sectionbody"> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 441 | <div class="paragraph"><p>These services can be enabled/disabled using the per-repository | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 442 | configuration file:</p></div> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 443 | <div class="dlist"><dl> | 
|  | 444 | <dt class="hdlist1"> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 445 | http.getanyfile | 
|  | 446 | </dt> | 
|  | 447 | <dd> | 
|  | 448 | <p> | 
| Junio C Hamano | 1f630d5 | 2010-04-01 04:49:25 | [diff] [blame] | 449 | This serves Git clients older than version 1.6.6 that are unable to use the | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 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> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 457 | <dt class="hdlist1"> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 458 | http.uploadpack | 
|  | 459 | </dt> | 
|  | 460 | <dd> | 
|  | 461 | <p> | 
| Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 462 | This serves <em>git fetch-pack</em> and <em>git ls-remote</em> clients. | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 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> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 467 | <dt class="hdlist1"> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 468 | http.receivepack | 
|  | 469 | </dt> | 
|  | 470 | <dd> | 
|  | 471 | <p> | 
| Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 472 | This serves <em>git send-pack</em> clients, allowing push. It is | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 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"> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 483 | <div class="paragraph"><p>To determine the location of the repository on disk, <em>git http-backend</em> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 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 | 
| Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 487 | set, <em>git http-backend</em> reads PATH_TRANSLATED, which is also set | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 488 | automatically by the web server.</p></div> | 
|  | 489 | </div> | 
|  | 490 | <h2 id="_examples">EXAMPLES</h2> | 
|  | 491 | <div class="sectionbody"> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 492 | <div class="paragraph"><p>All of the following examples map <em>http://$hostname/git/foo/bar.git</em> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 493 | to <em>/var/www/git/foo/bar.git</em>.</p></div> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 494 | <div class="dlist"><dl> | 
|  | 495 | <dt class="hdlist1"> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 496 | Apache 2.x | 
|  | 497 | </dt> | 
|  | 498 | <dd> | 
|  | 499 | <p> | 
|  | 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 | 
| Junio C Hamano | 6ce6b6c | 2010-01-18 01:25:50 | [diff] [blame] | 507 | SetEnv GIT_HTTP_EXPORT_ALL | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 508 | ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/</tt></pre> | 
|  | 509 | </div></div> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 510 | <div class="paragraph"><p>To enable anonymous read access but authenticated write access, | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 511 | require authorization with a LocationMatch directive:</p></div> | 
|  | 512 | <div class="listingblock"> | 
|  | 513 | <div class="content"> | 
|  | 514 | <pre><tt><LocationMatch "^/git/.*/git-receive-pack$"> | 
|  | 515 | AuthType Basic | 
|  | 516 | AuthName "Git Access" | 
|  | 517 | Require group committers | 
|  | 518 | ... | 
|  | 519 | </LocationMatch></tt></pre> | 
|  | 520 | </div></div> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 521 | <div class="paragraph"><p>To require authentication for both reads and writes, use a Location | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 522 | directive around the repository, or one of its parent directories:</p></div> | 
|  | 523 | <div class="listingblock"> | 
|  | 524 | <div class="content"> | 
|  | 525 | <pre><tt><Location /git/private> | 
|  | 526 | AuthType Basic | 
|  | 527 | AuthName "Private Git Access" | 
|  | 528 | Require group committers | 
|  | 529 | ... | 
|  | 530 | </Location></tt></pre> | 
|  | 531 | </div></div> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 532 | <div class="paragraph"><p>To serve gitweb at the same url, use a ScriptAliasMatch to only | 
| Junio C Hamano | 1aa40d2 | 2010-01-21 17:46:43 | [diff] [blame] | 533 | those URLs that <em>git http-backend</em> can handle, and forward the | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 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 | 
|  | 545 |  | 
|  | 546 | ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/</tt></pre> | 
|  | 547 | </div></div> | 
| Junio C Hamano | f727901 | 2011-08-18 06:13:13 | [diff] [blame] | 548 | <div class="paragraph"><p>To serve multiple repositories from different <a href="gitnamespaces.html">gitnamespaces(7)</a> in a | 
|  | 549 | single repository:</p></div> | 
|  | 550 | <div class="listingblock"> | 
|  | 551 | <div class="content"> | 
|  | 552 | <pre><tt>SetEnvIf Request_URI "^/git/([^/]*)" GIT_NAMESPACE=$1 | 
|  | 553 | ScriptAliasMatch ^/git/[^/]*(.*) /usr/libexec/git-core/git-http-backend/storage.git$1</tt></pre> | 
|  | 554 | </div></div> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 555 | </dd> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 556 | <dt class="hdlist1"> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 557 | Accelerated static Apache 2.x | 
|  | 558 | </dt> | 
|  | 559 | <dd> | 
|  | 560 | <p> | 
|  | 561 | Similar to the above, but Apache can be used to return static | 
|  | 562 | files that are stored on disk. On many systems this may | 
|  | 563 | be more efficient as Apache can ask the kernel to copy the | 
|  | 564 | file contents from the file system directly to the network: | 
|  | 565 | </p> | 
|  | 566 | <div class="listingblock"> | 
|  | 567 | <div class="content"> | 
|  | 568 | <pre><tt>SetEnv GIT_PROJECT_ROOT /var/www/git | 
|  | 569 |  | 
|  | 570 | AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1 | 
|  | 571 | AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1 | 
|  | 572 | ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/</tt></pre> | 
|  | 573 | </div></div> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 574 | <div class="paragraph"><p>This can be combined with the gitweb configuration:</p></div> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 575 | <div class="listingblock"> | 
|  | 576 | <div class="content"> | 
|  | 577 | <pre><tt>SetEnv GIT_PROJECT_ROOT /var/www/git | 
|  | 578 |  | 
|  | 579 | AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1 | 
|  | 580 | AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1 | 
|  | 581 | ScriptAliasMatch \ | 
|  | 582 | "(?x)^/git/(.*/(HEAD | \ | 
|  | 583 | info/refs | \ | 
|  | 584 | objects/info/[^/]+ | \ | 
|  | 585 | git-(upload|receive)-pack))$" \ | 
|  | 586 | /usr/libexec/git-core/git-http-backend/$1 | 
|  | 587 | ScriptAlias /git/ /var/www/cgi-bin/gitweb.cgi/</tt></pre> | 
|  | 588 | </div></div> | 
|  | 589 | </dd> | 
|  | 590 | </dl></div> | 
|  | 591 | </div> | 
|  | 592 | <h2 id="_environment">ENVIRONMENT</h2> | 
|  | 593 | <div class="sectionbody"> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 594 | <div class="paragraph"><p><em>git http-backend</em> relies upon the CGI environment variables set | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 595 | by the invoking web server, including:</p></div> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 596 | <div class="ulist"><ul> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 597 | <li> | 
|  | 598 | <p> | 
|  | 599 | PATH_INFO (if GIT_PROJECT_ROOT is set, otherwise PATH_TRANSLATED) | 
|  | 600 | </p> | 
|  | 601 | </li> | 
|  | 602 | <li> | 
|  | 603 | <p> | 
|  | 604 | REMOTE_USER | 
|  | 605 | </p> | 
|  | 606 | </li> | 
|  | 607 | <li> | 
|  | 608 | <p> | 
|  | 609 | REMOTE_ADDR | 
|  | 610 | </p> | 
|  | 611 | </li> | 
|  | 612 | <li> | 
|  | 613 | <p> | 
|  | 614 | CONTENT_TYPE | 
|  | 615 | </p> | 
|  | 616 | </li> | 
|  | 617 | <li> | 
|  | 618 | <p> | 
|  | 619 | QUERY_STRING | 
|  | 620 | </p> | 
|  | 621 | </li> | 
|  | 622 | <li> | 
|  | 623 | <p> | 
|  | 624 | REQUEST_METHOD | 
|  | 625 | </p> | 
|  | 626 | </li> | 
|  | 627 | </ul></div> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 628 | <div class="paragraph"><p>The GIT_HTTP_EXPORT_ALL environmental variable may be passed to | 
| Junio C Hamano | 6ce6b6c | 2010-01-18 01:25:50 | [diff] [blame] | 629 | <em>git-http-backend</em> to bypass the check for the "git-daemon-export-ok" | 
|  | 630 | file in each repository before allowing export of that repository.</p></div> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 631 | <div class="paragraph"><p>The backend process sets GIT_COMMITTER_NAME to <em>$REMOTE_USER</em> and | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 632 | GIT_COMMITTER_EMAIL to <em>${REMOTE_USER}@http.${REMOTE_ADDR}</em>, | 
|  | 633 | ensuring that any reflogs created by <em>git-receive-pack</em> contain some | 
|  | 634 | identifying information of the remote user who performed the push.</p></div> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 635 | <div class="paragraph"><p>All CGI environment variables are available to each of the hooks | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 636 | invoked by the <em>git-receive-pack</em>.</p></div> | 
|  | 637 | </div> | 
|  | 638 | <h2 id="_author">Author</h2> | 
|  | 639 | <div class="sectionbody"> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 640 | <div class="paragraph"><p>Written by Shawn O. Pearce <<a href="mailto:spearce@spearce.org">spearce@spearce.org</a>>.</p></div> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 641 | </div> | 
|  | 642 | <h2 id="_documentation">Documentation</h2> | 
|  | 643 | <div class="sectionbody"> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 644 | <div class="paragraph"><p>Documentation by Shawn O. Pearce <<a href="mailto:spearce@spearce.org">spearce@spearce.org</a>>.</p></div> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 645 | </div> | 
|  | 646 | <h2 id="_git">GIT</h2> | 
|  | 647 | <div class="sectionbody"> | 
| Junio C Hamano | 103b572 | 2011-01-31 05:03:45 | [diff] [blame] | 648 | <div class="paragraph"><p>Part of the <a href="git.html">git(1)</a> suite</p></div> | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 649 | </div> | 
|  | 650 | <div id="footer"> | 
|  | 651 | <div id="footer-text"> | 
| Junio C Hamano | f727901 | 2011-08-18 06:13:13 | [diff] [blame] | 652 | Last updated 2011-08-18 06:09:28 UTC | 
| Junio C Hamano | 3b70d3c | 2009-11-21 17:37:37 | [diff] [blame] | 653 | </div> | 
|  | 654 | </div> | 
|  | 655 | </body> | 
|  | 656 | </html> |